ARP协议工作原理分析(基于Wireshark)
主机(或路由器)在网际层完成路由决定后,需要将IP数据报封装成数据帧发送给目的主机或(路由器),主机(或路由器)都有自己的ARP缓存,里面存放着局域网内有过数据传输的主机(路由器)的IP地址到硬件地址的映射,可以通过arp -a 命令查看主机的arp缓存,如图1-12所示:
图1-12 arp-a命令显示结果
在初始时,主机没有与其他主机(或路由器)有数据交流时,其arp缓存是空的,没有任何数据,如图1-13所示,当PC1要将数据发往Internet服务器网站www.njxzc.edu.cn时,在网际层路由决定首先要把数据发往网关192.168.2.1(路由器地址)。
图1-13 网络拓扑
因PC1没有与路由器有过数据传输,因此其arp 缓存为空,在确定要将数据传输到192.168.2.1后,为封装成数据帧,PC1必须首先获得192.168.2.1的MAC地址,PC1于是发送ARP请求给本网络中的所有主机,ARP请求格式如图1-14所示:
图1-14 ARP请求
ARP请求是一个广播帧,其目标硬件地址(Destination)为ff:ff:ff:ff:ff:ff,源硬件地址(Source)为d8:fc:93:3b:1f:19,其类型字段Type值为0x0806,该值表明数据帧是ARP请求或者响应;ARP请求内容中包含硬件地址的长度,IP地址的长度以及发送者的IP地址192.168.2.199,请求192.168.2.1对应的MAC地址,target MAC部分为00:00:00:00:00:00,这是是需要对方填写的。
网络中的主机(或路由器)均会收到此报文(因为这是一个广播帧),但只有路由器回应此报文,因为只有路由器的IP地址和请求中目标IP地址(Target IP address)相同,于是路由器给出一个ARP响应,如图1-15所示:
图1-15 ARP响应
ARP响应是一个单播帧,其目标硬件地址为d8:fc:93:3b:1f:19,源硬件地址cc:81:da:6f:57:a1,这正是PC1请求的地址,类型字段Type的值依然是0x0800,该单播帧的响应内容中包含了具体的源、目的IP地址以及MAC地址,PC1收到以后就将路由器的IP地址与MAC地址(192.168.2.1 cc:81:da:6f:57:a1)放入自己的ARP缓存,此时,PC1就可以将数据封装在数据帧中发送给路由器,如图1-16所示:
1-16封装的数据
该数据帧中封装的是IP数据报(其类型字段值为0x0800),其目标硬件地址为路由器接口的地址,路由器收到数据帧后,会把数据继续往前传输