您的位置:首页 > 理论基础 > 计算机网络

PING用一生诠释了TCP/IP(2)-----ARP做了PING的接生婆

2009-08-08 07:49 190 查看
前面概述了PING跟TCP/IP的关系,简要阐述了PING的一生。我们知道了PING是利用ICMP的一求一答完成主机目的可达性探测的,那么在发送ICMP请求报文之前,源主机会查询ARP表项(arp -a)获取目的IP<---->目的MAC的映射,有了这个映射关系之后便可以在ICMP报文前封装IP报头,将查询到的目的IP和目的MAC填充在IP报头,便可以在网络上传输了,所以ARP表项的存在是PING能够启动的前提条件,所以在这里我形象的将ARP称为PING的接生婆。
下面我们来介绍一下ARP的工作原理:
ARP(地址解析协议)是用来完成已知目的IP地址解析得到目的MAC地址的,那么为什么必须要知道对端主机的MAC呢?原因就在于真正用于通信的地址是全球唯一的MAC地址,而IP其实是一种用来简化标识被创造出来的虚拟的地址。ARP协议通过向已知目的主机IP发送ARP请求,然后目的端回应填充了目的主机的MAC地址的ARP应答消息来获得目的Dest IP和Dest MAC的映射关系。




图1 以太网封装的ARP请求或应答分组格式
以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。
形容词hardware (硬件)和protocol (协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是IP地址)对应的硬件地址(这里是以太网地址)。
硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的。
接下来的两个1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别为6和4。
操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和R ARP应答(值为4)。这个字段必需的,因为ARP请求和ARP应答的帧类型字段值是相同的。
接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
了解了以太网封装的ARP分组格式之后我们以一个例子来详细说明ARP的工作过程:
PC1------SW------PC2
211.161.17.254 211.161.17.21
00:D0:F8:0A:FB:83 00:E0:3C:43:0D:24
如上图所示从PC1发送ping 211.161.17.21命令,PING命令会发送ICMP请求,在发送ICMP请求之前会查询ARP告诉缓存(arp-a),
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:\Documents and Settings\Administrator>arp -a
Interface: 192.168.1.16 --- 0x3
Internet Address Physical Address Type
192.168.1.2 00-21-27-5e-9f-54 dynamic
C:\Documents and Settings\Administrator>
ARP告诉缓存cache查询结果显示并没有找到目的主机PC2的IP地址的ARP表项,所以PC1就会发送一个ARP请求报文给PC2。发送的arp请求分组的具体格式如下:



图2 以太帧封装的ARP请求报文
正如上图ARP请求报文的格式,其中需要注意的是以太帧头目的MAC为全F的广播地址,也就是说所有局域网内的主机都会收到该请求报文,帧类型十六进制的0X0806代表该帧封装了ARP协议报文。操作类型OPTION字段1代表arp请求,2代表应答信息。目的MAC地址就是需要请求的地址,在请求报文中该字段填全0.如此以太帧封装的ARP请求报文的就准备完成了然后交给物理层进行bit流处理后发送。
当交换机接收到ARP请求报文后,会在交换机端口学习源主机IP与MAC映射ARP表,然后在VLAN内广播,这样请求报文就会从所有的交换机同VLAN端口广播出去,但是只有报文目的IP所对应的主机会接受处理该ARP请求报文,其他的主机则直接丢弃。目的主机接受到后,就会向源主机回应一个ARP应答报文,具体如下:



图3 以太帧封装的ARP应答报文
ARP应答报文中以太帧报文用pc2自己的MAC地址填充,操作字段OPTION字段为2,标识是ARP应答报文,ARP请求报文中的目的以太帧地址(全0)同样填充了PC2的MAC地址,将源及目的IP地址对换后将应答报文发往PC1。
交换机收到ARP应答报文后,在端口上学习mac,生成PC2的arp表项,然后按照目的IP(PC1的)查找对应的ARP表项,查到后从对应的端口发送出去,PC1收到ARP应答报文后生成对应的ARP缓存表项。
如此一来PC1就学习到了目的主机PC2的arp表项,这个时候PING所使用的ICMP请求报文便会根据学习到的ARP表转发报文。arp协议为PING准备好了所有需要使用的表项信息。这就是为什么我把ARP亲切的称为PING的接生婆的原理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: