TCP / IP – 为什么没有伪装的路由工作?

我以为从另一个子网的数据包总是被拒绝。 但是,当我有两个主机(H1和H2)在两个不同的子网(S1和S2)和一个路由器(R)激活IP_ FORWARD和访问这两个子网,我可以从H2平h1。 我知道如何将数据包路由到h1,但我不明白为什么h1接受来自另一个子网的数据包。 如果伪装完成,我都清楚。 但没有伪装,我无法理解它。

这是否意味着在TCP / IP协议中,如果到达主机,则来自另一个子网的数据包总是被接受? 那么没有路由器的问题只是发送主机不是在另一个子网中发送一个包含目的地的数据包?

是的,你是对的 – 如果一个主机收到一个IP包,并且有一个到源的有效路由path ,它只是响应。 显然,之间可能有防火墙,可能会打败stream量。

不包括dynamic路由协议等更高级的主题,情况非常简单。 如果没有链接类(直接)或基于网关的(间接)path,则使用最宽的默认路由( 0.0.0.0/0 )。 想想看,你会发现这一切都是有道理的。 🙂

正如@迈克尔汉普顿已经指出的那样,这正是互联网的工作原理。 NAT只是一个附加(在IP协议之后创build的),通常用于将本地地址类(检查RFC1918 )连接到WAN,从而保存公共可路由的地址。

只要你想连接2个或更多的networking,你就可以使用路由器。 这些networking上的主机必须知道这个路由器,并正确地使用它来连接从一个到另一个networking,除非你用brctl这样的networking来桥接这些networking,“把路由器变成交换机”。 如果你的路由器的机器有ip_forward ,那么它不会阻塞任何东西,如果知道如何去做,或者返回一个“不可路由的地址”,它将会路由所有的东西。 除非你用iptables来告诉一个/多个阻塞规则/用于正常路由或桥接的ebtables