挺有意思的子网掩码问题

类别:编程语言 点击:0 评论:0 推荐:
挺有意思的子网掩码问题

关于同一个网段两台不同掩码长度的主机的通讯(比如: 172.16.1.1 255.255.0.0 和 172.16.2.1 255.255.255.0)的问题作了以下分析:
在以太网中,最终通信是通过layer2地址mac address来决定的,一台主机想要通信时会先检查arp cache,找到就发送,如没找到,则去检查双方的ip地址是否在一个网段(根据掩码)。如果是同一个网段则发送目的为对方的arp解析请求(2层广播),如果不是同一个网段,会根据设置的default gateway为目的发送arp解析请求,解析成功后会把数据发往default gateway(比如路由器)。(注意,在Win系列的计算机上如果没有设置Default Gateway,主机不会再发送一个指向位于远程网络的对方的arp解析请求,因此Cisco路由器上的proxy-arp功能不起作用。)

ping使用icmp协议,简单的说发起ping的一方发送icmp echo数据包,接受ping的一方回答icmp echo-reply数据包,因此在防火墙或者路有器上过滤其中一种包可以实现单向ping通。

初始状态下,双方的arp-cache都是空的,(刚开机的状态)子网掩码较短的主机会认为对方在自己的同一个网段内,因此会发送目的地为对方的arp解析请求,这时对方就将监听到的ip-mac地址的映射存入自己的arp cache, 同时回复一个arp解析应答,这样发起方(掩码短的)也就保存了对方的ip-mac地址的映射,因此当ping的时候,在发送icmp echo或者icmp echo-reply时,当先检查arp-cache时,可以找到,相应的entry,通信可以建立。

另一种情况,当子网掩码较长的一方发起通信(ping),当比较ip时,会发现目的地与自己不在同一个网段,这时如果时ms的主机,未设DG(default-gateway,这里假定是路由器的接口)的情况下,通信不能建立,如果设置了DG,那么,会发送一个目的为DG的arp解析请求,路由器回答这个arp后,发起方把ping echo数据包发向路由器,路由器上的所有激活(active)的接口的地址以及某个接口上子接口或者第二地址之间不能够over-lapping,否则设不上,因此当路由器转发这个icmp echo时,它或者认为这个包是发给本网段的(路由器接口的掩码设为长的),那么就丢掉这个包,或者去检查路由表(路由器接口的掩码设为短的),这时一般情况下是在其中找不到目的网段的,因此包被丢弃;另一种情况当互联网络(inter-networks)中存在一个不连续的网络,刚好与这边的地址相同,掩码为长的,(这一般是由于不良的网络设计所致),这时路由器会把这个ping包发往遥远的网段,而不是处在同一个端口下面的真正目的地,当然, 这个icmp echo是永远也得不到icmp echo-reply的。

结论,这种情况下,是否连通要看连接是由谁发起的。

本文地址:http://com.8s8s.com/it/it23934.htm