地址解析协议(ARP)的学习(通过wireshark抓包分析)

看看维基百科的解释
地址解析协议(Address Resolution Protocol),其基本功能为通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
基本功能[编辑]

在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。
原理[编辑]

在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。
主机名称 IP地址 MAC地址
A 192.168.38.10 00-AA-00-62-D2-02
B 192.168.38.11 00-BB-00-62-C2-02
C 192.168.38.12 00-CC-00-62-C2-02
D 192.168.38.13 00-DD-00-62-C2-02
E 192.168.38.14 00-EE-00-62-C2-02
… … …
以主机A(192.168.38.10)向主机B(192.168.38.11)发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址为(00-BB-00-62-C2-02),直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在网络上发送一个广播(ARP request),目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询 问:“192.168.38.11的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应(ARP response):“192.168.38.11的MAC地址是(00-BB-00-62-C2-02)”。 这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。


来分析一个ARP包
在win7下,cmd中
看看本地ip和mac
以太网适配器 本地连接:

连接特定的 DNS 后缀 … … . :
IPv6 地址 … … … … : 2001:da8:100e:6c99:f4fc:78d9:6fea:d86
临时 IPv6 地址… … … . : 2001:da8:100e:6c99:990f:bec8:b536:b9
本地链接 IPv6 地址… … . . : fe80::f4fc:78d9:6fea:d86%14
IPv4 地址 … … … … : 10.10.16.49
子网掩码 … … … … : 255.255.252.0
默认网关… … … … . : fe80::290:1aff:fea3:7de4%14
10.10.16.1
再看看arp 缓冲表 arp -a
地址解析协议(ARP)的学习(通过wireshark抓包分析)_第1张图片

那我们就去arp一个arp表中没有的IP,
在cmd中
ping 10.10.16.10
在wireshark中抓包,找到这个包
“28”,”16.004655000”,”CompalIn_32:60:5d”,”Broadcast”,”ARP”,”42”,”Who has 10.10.16.10? Tell 10.10.16.49”
看看具体包的情况

地址解析协议(ARP)的学习(通过wireshark抓包分析)_第2张图片

这是帧的头部,目的地址为全FF表示广播询问,源地址本地的mac地址,类型字段是0806h为arp协议字段,
再看看ARP数据包

地址解析协议(ARP)的学习(通过wireshark抓包分析)_第3张图片

第一个16bit:硬件类型字段,0001h为以太网
第二个16bit:协议类型,0800h ,为IP协议
第三个8bit:mac地址长度 6bytes
第四个8bit:协议地址长度 4bytes
第五个16bit:操作码字段 0001h 是arp请求
第六个48bit:发送方的mac地址
第七个32bit:发送方的协议地址
第八个48bit:接受方的mac地址;一般全0
第九个32bit:接收方的协议地址,因为上面指明是IP协议,所以为IP地址,即使ping 后面的IP地址。
ARP数据包结束;

再看看回过来的数据包
“29”,”16.005449000”,”Unispher_a3:7d:e1”,”CompalIn_32:60:5d”,”ARP”,”60”,”10.10.16.10 is at 00:90:1a:a3:7d:e1”
具体看看包数据

地址解析协议(ARP)的学习(通过wireshark抓包分析)_第4张图片

在以太网头看看有个padding段
查看维基解释如下
Allowed Packet Lengths

Ethernet packets with less than the minimum 64 bytes for an Ethernet packet (header + user data + FCS) are padded to 64 bytes, which means that if there’s less than 64-(14+4) = 46 bytes of user data, extra padding data is added to the packet.
上面为补充到60个字节,再加上4个crc一共64字节。
在以太网头部和请求帧的一致,
具体看看ARP包数据;

地址解析协议(ARP)的学习(通过wireshark抓包分析)_第5张图片

此时,操作码字段为0002h,为应答;
这时候将IP对应的mac地址发回去。这时得到的mac地址为
00:90:1a:a3:7d:e1
看看在win下的arp表中是否有
接口: 10.10.16.49 — 0xe
Internet 地址 物理地址 类型
10.10.16.1 00-90-1a-a3-7d-e1 动态
10.10.16.44 00-90-1a-a3-7d-e1 动态
10.10.19.255 ff-ff-ff-ff-ff-ff 静态
224.0.0.2 01-00-5e-00-00-02 静态
224.0.0.22 01-00-5e-00-00-16 静态
224.0.0.252 01-00-5e-00-00-fc 静态
239.255.255.250 01-00-5e-7f-ff-fa 静态
255.255.255.255 ff-ff-ff-ff-ff-ff 静态
确实是刷新了

你可能感兴趣的:(网络编程)