赞
踩
arp(Address Resolution Protocol)协议,即地址解析协议。是网络层的重要组成部分。
网络层之上发包的时候只关注目的IP地址,而物理链路层通过mac地址来标识设备,因此在发送数据包的时候,需要将ip地址转换为mac地址封装到数据包。这样才能在数据链路上选择正确的通道将数据包传送出去。整个ip与mac之间的关系就要靠arp来完成。
arp是底层链路与上层协议之间的纽带,其主要功能是通过目标IP找到目标设备的MAC。
https://www.ieee802.org/misc-docs/GlobeCom2009/IEEE_802d3_Law.pdf
imx6u板卡*2
既然arp是通信的基础,那么在真正数据交互前,arp已经开始学习。通过两个嵌入式linux硬件板卡进行实验,防止用PC机存在太多的杂包。并在一端抓包如下
- 主机1向主机2发送一个ping包,发生的网络数据交互如下:
-
- //主机1发送广播包 询问ip地址为192.168.1.201设备的mac地址
- 00:16:3e:12:fe:04 (oui Unknown) > Broadcast, ethertype ARP (0x0806), length 60: Request who-has 192.168.1.201 tell 192.168.1.200, length 46
- 0x0000: 0001 0800 0604 0001 0016 3e12 fe04 c0a8
- 0x0010: 01c8 0000 0000 0000 c0a8 01c9 0000 0000
- 0x0020: 0000 0000 0000 0000 0000 0000 0000
- //主机2收到广播后,发现寻找自己,于是回复主机1 自己的mac地址
- 0e:1a:35:bc:4b:b3 (oui Unknown) > 00:16:3e:12:fe:04 (oui Unknown), ethertype ARP (0x0806), length 42: Reply 192.168.1.201 is-at 0e:1a:35:bc:4b:b3 (oui Unknown), length 28
- 0x0000: 0001 0800 0604 0002 0e1a 35bc 4bb3 c0a8
- 0x0010: 01c9 0016 3e12 fe04 c0a8 01c8
-
-
- //主机1学习到主机2的mac地址,于是可以进行后续交互,发送ping请求包
- 00:16:3e:12:fe:04 (oui Unknown) > 0e:1a:35:bc:4b:b3 (oui Unknown), ethertype IPv4 (0x0800), length 98: 192.168.1.200 > 192.168.1.201: ICMP echo request, id 40960, seq 0, length 64
- 0x0000: 4500 0054 7c07 4000 4001 39c0 c0a8 01c8
- 0x0010: c0a8 01c9 0800 c794 a000 0000 cb37 c532
- 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0050: 0000 0000
- //主机2收到ping请求包,进行回复包发送
- 0e:1a:35:bc:4b:b3 (oui Unknown) > 00:16:3e:12:fe:04 (oui Unknown), ethertype IPv4 (0x0800), length 98: 192.168.1.201 > 192.168.1.200: ICMP echo reply, id 40960, seq 0, length 64
- 0x0000: 4500 0054 df09 0000 4001 16be c0a8 01c9
- 0x0010: c0a8 01c8 0000 cf94 a000 0000 cb37 c532
- 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000
- 0x0050: 0000 0000
-
-
- //主机2也希望知道主机1的mac地址于是发送arp广播包
- 0e:1a:35:bc:4b:b3 (oui Unknown) > 00:16:3e:12:fe:04 (oui Unknown), ethertype ARP (0x0806), length 42: Request who-has 192.168.1.200 tell 192.168.1.201, length 28
- 0x0000: 0001 0800 0604 0001 0e1a 35bc 4bb3 c0a8
- 0x0010: 01c9 0000 0000 0000 c0a8 01c8
- //主机1进行回复
- 00:16:3e:12:fe:04 (oui Unknown) > 0e:1a:35:bc:4b:b3 (oui Unknown), ethertype ARP (0x0806), length 60: Reply 192.168.1.200 is-at 00:16:3e:12:fe:04 (oui Unknown), length 46
- 0x0000: 0001 0800 0604 0002 0016 3e12 fe04 c0a8
- 0x0010: 01c8 0e1a 35bc 4bb3 c0a8 01c9 0000 0000
- 0x0020: 0000 0000 0000 0000 0000 0000 0000
数据从应用层来到数据链路层后是以帧的形式存在,如IEEE802.3标准规范了以太网数据帧结构如下:
在主机1发包函数中,增加打印,发送出的arp数据包为:
- ff ff ff ff ff ff 00 16 3e 12 fe 04 08 06 |->arp包开始 00 01
- 08 00 06 04 00 01 00 16 3e 12 fe 04 c0 a8 01 c8
- 00 00 00 00 00 00 c0 a8 01 c9 |<-arp数据包结束
-
- //ff ff ff ff ff ff:目的地址 广播
- //00 16 3e 12 fe 04:源地址 主机1mac
- //08 06:帧类型 arp包
- //之后28B为ARP数据包
- //00 01:硬件类型 mac地址
- //08 00:协议类型
- //06:硬件地址长度 6B MAC
- //04:协议地址长度 4B ip
- //00 01:类型 arp请求1 arp应答2 RARP...
- //00 16 3e 12 fe 04:发送方mac地址
- //c0 a8 01 c8:发送方IP
- //00 00 00 00 00 00 接收方以太网地址
- //c0 a8 01 c9:接收方IP地址
arp缓存表不断的进行建立、更新、查询。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。