深入分析ARP协议的理论与实践
发布时间:2015-07-04 09:13
摘 要:充分认识arp的作用与工作过程有助于我们认识 网络 、理解tcp/ip体系的通信原理,从而指导我们分析网络中故障发生的原因以及采用有效的方法排查故障。
关键词:网段;arp协议;rarp协议;
充分认识arp的作用与工作过程有助于我们认识网络、理解tcp/ip体系的通信原理,从而指导我们分析网络中故障发生的原因以及采用有效的方法排查故障。首先,子网掩码,网关与arp协议的概念初学者往往难以一下子掌握。因此很有必要通过实验来帮助学员更加深入直观地了解子网掩码,网关与arp协议的基本概念与工作原理。
1 子网掩码(subnet mask)
子网掩码的主要功能是告知网络设备,一个特定的ip地址的哪一部分是包含网络地址与子网地址,哪一部分是主机地址。网络的路由设备只要识别出目的地址的网络号与子网号即可作出路由寻址决策,ip地址的主机部分不参与路由器的路由寻址操作,只用于在网段中唯一标识一个网络设备的接口。
子网掩码使用与ip相同的编址格式,子网掩码为1的部分对应于ip地址的网络与子网部分,子网掩码为0的部分对应于ip地址的主机部分。将子网掩码和ip地址作“与”操作后,ip地址的主机部分将被丢弃,剩余的是网络地址和子网地址。
2 网关(gateway)
在internet中的网关一般是指用于连接两个或者两个以上网段的网络设备,通常使用路由器(router)作为网关。
在tcp/ip网络体系中,网关的基本作用是根据目的ip地址的网络号与子网号,选择最佳的出口对ip分组进行转发,实现跨网段的数据通信。
3 arp协议(address resolution protocol)
在以太网(ethernet)中,一个网络设备要和另一个网络设备进行直接通信,除了知道目标设备的网络层逻辑地址(如ip地址)外,还要知道目标设备的第二层物理地址(mac地址)。arp协议的基本功能就是通过目标设备的ip地址,查询目标设备的mac地址,以保证通信的顺利进行。
当一个网络设备需要和另一个网络设备通信时,它首先把目标设备的ip地址与自己的子网掩码进行“与”操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且源设备没有获得与目标ip地址相对应的mac地址信息,则源设备以第二层广播的形式(目标mac地址为全1)发送arp请求报文,在arp请求报文中包含了源设备与目标设备的ip地址。同一网段中的所有其他设备都可以收到并分析这个arp请求报文,如果某设备发现报文中的目标ip地址与自己的ip地址相同,则它向源设备发回arp响应报文,通过该报文使源设备获得目标设备的mac地址信息。
如果目标设备与源设备不在同一网段,则源设备首先把ip分组发向自己的缺省网关(default gateway),由缺省网关对该分组进行转发。如果源设备没有关于缺省网关的mac信息,则它同样通过arp协议获取缺省网关的mac地址信息。
为了减少广播量,网络设备通过arp表在缓存中保存ip与mac地址的映射信息。在一次arp的请求与响应过程中,通信双方都把对方的mac地址与ip地址的对应关系保存在各自的arp表中,以在后续的通信中使用。arp表使用老化机制,删除在一段时间内没有使用过的ip与mac地址的映射关系。
4 实验设计
我们通过设计一个简单的实验来帮助学员更深入直观地理解上述三个知识点所涉及的基本概念与原理。在实验中,我们利用ping命令来检验主机间能否进行正常的双向通信。在“ping”的过程中,源主机向目标主机发送icmp的echo request报文,目标主机收到后,向源主机发回icmp的echo reply报文,从而可以验证源与目标主机能否进行正确的双向通信。
a与b为实验用的pc机,使用windows2000 professional作操作系统。
实验方案:
步骤1:
设置两台主机的ip地址与子网掩码:
a: 192.168.1.130 255.255.255.0
b: 192.168.1.125 255.255.255.0
两台主机均不设置缺省网关。
用arp -d命令清除两台主机上的arp表,然后在a与b上分别用ping命令与对方通信,在a与b上分别显示,
a: reply from 192.168.1.125: bytes=32 time<10ms ttl=128
b: reply from 192.168.1.130: bytes=32 time<10ms ttl=128
用arp -a命令可以在两台pc上分别看到对方的mac地址。
分析:由于主机将各自通信目标的ip地址与自己的子网掩码相“与”后,发现目标主机与自己均位于同一网段(192.168.1.0),因此通过arp协议获得对方的mac地址,从而实现在同一网段内网络设备间的双向通信。
步骤2:
将a的子网掩码改为:255.255.255.128,其他设置保持不变。
操作1:用arp -d命令清除两台主机上的arp表,然后在a上ping b,在a上显示结果为:destination host unreachable
用arp -a命令在两台pc上均不能看到对方的mac地址。
分析1:a将目标设备的ip地址(192.168.1.125)和自己的子网掩码(255.255.255.128)相“与”得192.168.1.0,和自己不在同一网段(a所在网段为:192.168.1.128),则a必须将该ip分组首先发向缺省网关。由于a的缺省网关没有配置,无法对分组进行正确发送,因此显示“目标主机不可到达”。
操作2:接着在b上ping a,在b上显示结果为:request timed out 此时用arp-a命令可以在两台pc上分别看到对方的mac地址。
分析2:b将目标设备的ip地址(192.168.1.130)和自己的子网掩码(255.255.255.0)相“与”,发现目标主机与自己均位于同一网段(192.168.1.0),因此,b通过arp协议获得a的mac地址,并可以正确地向a发送echo request报文。但由于a不能向b正确地发回echo reply报文(原因见分析1),故b上显示ping的结果为“请求超时”。在该实验操作中,通过观察a与b的arp表的变化,可以验证:在一次arp的请求与响应过程中,通信双方就可以获知对方的mac地址与ip地址的对应关系,并保存在各自的arp表中。
步骤3:
在a上设置缺省网关,用arp -d命令清除a中的arp表,在a上ping一台外网段的主机,如武汉热线(.cn 202.103.24.116),再用arp -a可观察到a的arp表中只有缺省网关的mac地址信息。
分析:当源主机要和外网段的主机进行通信时,它并不需要获取远程主机的mac地址,而是把ip分组发向缺省网关,由网关ip分组的完成转发过程。如果源主机没有缺省网关mac地址的缓存记录,则它会通过arp协议获取网关
的mac地址,因此在a的arp表中只观察到网关的mac地址记录,而观察不到远程主机的mac地址
5 小结
(1)关于通常意义上“ 网络 地址不同不能互相通信”的说明
深入的探讨发现,在 计算 机通信过程中无论是什么协议只要能顺利获得mac地址就能正常通信,无论是否经过路由,只要每段通信成功的经过了数据链路层。可以说通信本来是没有任何限制的,只是ip从逻辑上(网络层)加以了约束。
而其中网络地址是其第一逻辑约束。任何一项针对ip的数据发送首先是经过本地网络层的抉择:是丢弃、直接发送还是间接发送。
之所以有这样三种选择实际上是先一步在本地作出判断:
①“目标ip地址和自己在不在同一网络”其判断的依据由于不知道对方掩码所以只能是自己的子网掩码分别和目标ip、源ip按位与来进行比较。
②相同,否则⑦
③检查本地arp列表,有相应mac地址记录则⑥,否则④
④发送arp request
⑤收到arp reply得到的目的mac地址,执行⑥,否则⑧
⑥将目的mac地址写入待发帧并发送数据
⑦将网关mac地址写入待发帧并发送数据,通过路由转发(间接发送)。若网关无法路由到达则就地丢弃并发出icmp通知不可到达。
⑧直接丢弃,返回目标不存在
其中⑦最终是否能最终到达目标结点还要在每个每个网段网关执行①~⑦
(2)关于“\\主机名”与“\\ip”的区别
运行\\主机名时直接使用netbios检查缓存或广播发出netbios请求解析目的mac地址,该广播是完全物理地址意义上的广播,如果在广播范围内(物理阻隔或路由隔绝)找到主机,主机单播以回应否则报告目标不存在。netbios是绝对不会跨路由的(rfc1542标准的路由器,可设置成允许dhcp的广播数据通过,仅是一个特例)。因此不论是vlan还是lan只要广播可以到达的地方就是netbios的作用范围,完全与ip是否处在同一网络无关。解析出目的mac就可以看到浏览服务提供的共享资源了。
\\ip则是完全不同的过程,是根据arp原理(前面已经有详细讲述)解析出mac地址的,因此会受到逻辑网段的限制。然后再通过mac地址访问目的主机的浏览服务。
关键词:网段;arp协议;rarp协议;
充分认识arp的作用与工作过程有助于我们认识网络、理解tcp/ip体系的通信原理,从而指导我们分析网络中故障发生的原因以及采用有效的方法排查故障。首先,子网掩码,网关与arp协议的概念初学者往往难以一下子掌握。因此很有必要通过实验来帮助学员更加深入直观地了解子网掩码,网关与arp协议的基本概念与工作原理。
1 子网掩码(subnet mask)
子网掩码的主要功能是告知网络设备,一个特定的ip地址的哪一部分是包含网络地址与子网地址,哪一部分是主机地址。网络的路由设备只要识别出目的地址的网络号与子网号即可作出路由寻址决策,ip地址的主机部分不参与路由器的路由寻址操作,只用于在网段中唯一标识一个网络设备的接口。
子网掩码使用与ip相同的编址格式,子网掩码为1的部分对应于ip地址的网络与子网部分,子网掩码为0的部分对应于ip地址的主机部分。将子网掩码和ip地址作“与”操作后,ip地址的主机部分将被丢弃,剩余的是网络地址和子网地址。
2 网关(gateway)
在internet中的网关一般是指用于连接两个或者两个以上网段的网络设备,通常使用路由器(router)作为网关。
在tcp/ip网络体系中,网关的基本作用是根据目的ip地址的网络号与子网号,选择最佳的出口对ip分组进行转发,实现跨网段的数据通信。
3 arp协议(address resolution protocol)
在以太网(ethernet)中,一个网络设备要和另一个网络设备进行直接通信,除了知道目标设备的网络层逻辑地址(如ip地址)外,还要知道目标设备的第二层物理地址(mac地址)。arp协议的基本功能就是通过目标设备的ip地址,查询目标设备的mac地址,以保证通信的顺利进行。
当一个网络设备需要和另一个网络设备通信时,它首先把目标设备的ip地址与自己的子网掩码进行“与”操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且源设备没有获得与目标ip地址相对应的mac地址信息,则源设备以第二层广播的形式(目标mac地址为全1)发送arp请求报文,在arp请求报文中包含了源设备与目标设备的ip地址。同一网段中的所有其他设备都可以收到并分析这个arp请求报文,如果某设备发现报文中的目标ip地址与自己的ip地址相同,则它向源设备发回arp响应报文,通过该报文使源设备获得目标设备的mac地址信息。
如果目标设备与源设备不在同一网段,则源设备首先把ip分组发向自己的缺省网关(default gateway),由缺省网关对该分组进行转发。如果源设备没有关于缺省网关的mac信息,则它同样通过arp协议获取缺省网关的mac地址信息。
为了减少广播量,网络设备通过arp表在缓存中保存ip与mac地址的映射信息。在一次arp的请求与响应过程中,通信双方都把对方的mac地址与ip地址的对应关系保存在各自的arp表中,以在后续的通信中使用。arp表使用老化机制,删除在一段时间内没有使用过的ip与mac地址的映射关系。
4 实验设计
我们通过设计一个简单的实验来帮助学员更深入直观地理解上述三个知识点所涉及的基本概念与原理。在实验中,我们利用ping命令来检验主机间能否进行正常的双向通信。在“ping”的过程中,源主机向目标主机发送icmp的echo request报文,目标主机收到后,向源主机发回icmp的echo reply报文,从而可以验证源与目标主机能否进行正确的双向通信。
a与b为实验用的pc机,使用windows2000 professional作操作系统。
实验方案:
步骤1:
设置两台主机的ip地址与子网掩码:
a: 192.168.1.130 255.255.255.0
b: 192.168.1.125 255.255.255.0
两台主机均不设置缺省网关。
用arp -d命令清除两台主机上的arp表,然后在a与b上分别用ping命令与对方通信,在a与b上分别显示,
a: reply from 192.168.1.125: bytes=32 time<10ms ttl=128
b: reply from 192.168.1.130: bytes=32 time<10ms ttl=128
用arp -a命令可以在两台pc上分别看到对方的mac地址。
分析:由于主机将各自通信目标的ip地址与自己的子网掩码相“与”后,发现目标主机与自己均位于同一网段(192.168.1.0),因此通过arp协议获得对方的mac地址,从而实现在同一网段内网络设备间的双向通信。
将a的子网掩码改为:255.255.255.128,其他设置保持不变。
操作1:用arp -d命令清除两台主机上的arp表,然后在a上ping b,在a上显示结果为:destination host unreachable
用arp -a命令在两台pc上均不能看到对方的mac地址。
分析1:a将目标设备的ip地址(192.168.1.125)和自己的子网掩码(255.255.255.128)相“与”得192.168.1.0,和自己不在同一网段(a所在网段为:192.168.1.128),则a必须将该ip分组首先发向缺省网关。由于a的缺省网关没有配置,无法对分组进行正确发送,因此显示“目标主机不可到达”。
操作2:接着在b上ping a,在b上显示结果为:request timed out 此时用arp-a命令可以在两台pc上分别看到对方的mac地址。
分析2:b将目标设备的ip地址(192.168.1.130)和自己的子网掩码(255.255.255.0)相“与”,发现目标主机与自己均位于同一网段(192.168.1.0),因此,b通过arp协议获得a的mac地址,并可以正确地向a发送echo request报文。但由于a不能向b正确地发回echo reply报文(原因见分析1),故b上显示ping的结果为“请求超时”。在该实验操作中,通过观察a与b的arp表的变化,可以验证:在一次arp的请求与响应过程中,通信双方就可以获知对方的mac地址与ip地址的对应关系,并保存在各自的arp表中。
步骤3:
在a上设置缺省网关,用arp -d命令清除a中的arp表,在a上ping一台外网段的主机,如武汉热线(.cn 202.103.24.116),再用arp -a可观察到a的arp表中只有缺省网关的mac地址信息。
分析:当源主机要和外网段的主机进行通信时,它并不需要获取远程主机的mac地址,而是把ip分组发向缺省网关,由网关ip分组的完成转发过程。如果源主机没有缺省网关mac地址的缓存记录,则它会通过arp协议获取网关
的mac地址,因此在a的arp表中只观察到网关的mac地址记录,而观察不到远程主机的mac地址
5 小结
(1)关于通常意义上“ 网络 地址不同不能互相通信”的说明
深入的探讨发现,在 计算 机通信过程中无论是什么协议只要能顺利获得mac地址就能正常通信,无论是否经过路由,只要每段通信成功的经过了数据链路层。可以说通信本来是没有任何限制的,只是ip从逻辑上(网络层)加以了约束。
而其中网络地址是其第一逻辑约束。任何一项针对ip的数据发送首先是经过本地网络层的抉择:是丢弃、直接发送还是间接发送。
之所以有这样三种选择实际上是先一步在本地作出判断:
①“目标ip地址和自己在不在同一网络”其判断的依据由于不知道对方掩码所以只能是自己的子网掩码分别和目标ip、源ip按位与来进行比较。
②相同,否则⑦
③检查本地arp列表,有相应mac地址记录则⑥,否则④
④发送arp request
⑤收到arp reply得到的目的mac地址,执行⑥,否则⑧
⑥将目的mac地址写入待发帧并发送数据
⑦将网关mac地址写入待发帧并发送数据,通过路由转发(间接发送)。若网关无法路由到达则就地丢弃并发出icmp通知不可到达。
⑧直接丢弃,返回目标不存在
其中⑦最终是否能最终到达目标结点还要在每个每个网段网关执行①~⑦
(2)关于“\\主机名”与“\\ip”的区别
运行\\主机名时直接使用netbios检查缓存或广播发出netbios请求解析目的mac地址,该广播是完全物理地址意义上的广播,如果在广播范围内(物理阻隔或路由隔绝)找到主机,主机单播以回应否则报告目标不存在。netbios是绝对不会跨路由的(rfc1542标准的路由器,可设置成允许dhcp的广播数据通过,仅是一个特例)。因此不论是vlan还是lan只要广播可以到达的地方就是netbios的作用范围,完全与ip是否处在同一网络无关。解析出目的mac就可以看到浏览服务提供的共享资源了。
\\ip则是完全不同的过程,是根据arp原理(前面已经有详细讲述)解析出mac地址的,因此会受到逻辑网段的限制。然后再通过mac地址访问目的主机的浏览服务。