分享

路由器和主机不在一个网段,如何双向通信?

 新用户16501297 2021-08-25

情况描述:

主机设置192.168.1.6/24 路由IP是192.168.0.138/24,从跟踪心灵可以看到两者发送了ARP消息,查看arp,互相也都有对方的MAC,但是只能看到主机给路由器发消息,看不到路由器的任何响应;
 
图片

图片
为了实现双向通信,我尝试把路由器的子网掩码改为255.255.254.0,也就是将主机IP纳入到路由器的子网,主机的子网掩码依然保持不变,也就是说路由器不在主机的网段,但主机在路由器的网段,之后就可以正常通信了。
我的问题是:
1.      路由器明明知道主机IP和MAC地址,是否必须要将主机IP纳入自己的网段才能向主机转发数据包?
2.      根据协议,路由器的下一跳应该不受同一网段的限制,只需要知道下一跳的IP和MAC地址就可以,但为什么我的主机收不到任何响应?是我的设置有问题么?
3.      如果将路由器的网关设置成主机的IP,即主机和路由器互为网关,是否也可以实现双向通信?
请各位专家大佬指点迷津!
 
主机192.168.1.6/24眼里的网关192.168.0.138/24是一个什么样的存在?
是一个和自己(192.168.1.0/24)不在一个网段的主机(192.168.0.0/24),所以不能与对方直接通信。所谓直接通信,是发送ARP广播请求对方的MAC地址,获得对方MAC地址就可以和对方直接通信了。
以上文字是作为网络启蒙给初学者看的,其实背后的原理是路由表,主机会严格路由表的指示来做操作,路由表指东打东,路由表指西打西,绝对不能含糊!学习路由表的同学一定眼记住这一点,不要凭自己的主观臆断来推测路由器的内部行为。
但是不要忘记,主机一旦配置了网关,那么主机的路由表自动创建了一条默认路由:
0.0.0.0/0 ------> 网关 192.168.0.138
所以主机一旦发现对方和自己不在一个网段时,会使用这条默认路由。既然路由已经指示去联系网关了,还犹豫什么呢?
于是,主机立马发送ARP广播请求网关192.168.0.138的MAC地址。由于网关和主机处在同一个广播域,所以网关收到了这个ARP广播。但是网关发现ARP报文请求方的IP = 192.168.1.6 和接收到的接口IP = 192.168.0.138并不在一个网段。网关经过严谨的智能抉择如下:
如果 网关关于目的IP =192.168.1.6 的内部路由表指向的出接口 = 接收到主机192.168.1.6 ARP广播的入接口,则回复ARP广播,否则不回复。
很显然,网关没有这样的路由,所以网关不会回复主机的物理要求。自然主机就没法与网关通信。
当你把路由器的网络掩码设置为192.168.0.138/23的时候,上文的主机的行为没有任何变化,但是网关的行为发生了微妙的变化。
因为在路由器(网关)的眼里主机和自己在同一个网段,都是192.168.0.0/23。用路由表的表达为路由器可以根据192.168.0.0/23这条路由,指向主机192.168.1.6。既然路由的出接口 = ARP广播报文的入接口,那么路由器自然就回复了。既然双方都有路由表指向对方,且双方都有对方的MAC地址,那么自然就可以通信了。
最后(3)如果将路由器的网关设置成主机的IP,即主机和路由器互为网关,是否也可以实现双向通信?
是的,因为路由器通过查路由表得到0.0.0.0/0 指向主机,既然路由的出接口 = ARP广播报文的入接口,自然会回复对方的MAC地址。那么双方就可以毫无障碍地通信。
最后一个思考题,当路由器没有配置主机为网关时,路由器关于主机192.168.1.6的路由指向哪里?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多