linux网络-ARP协议

0、说明

        arp(Address Resolution Protocol)协议,即地址解析协议。是网络层的重要组成部分。

        网络层之上发包的时候只关注目的IP地址,而物理链路层通过mac地址来标识设备,因此在发送数据包的时候,需要将ip地址转换为mac地址封装到数据包。这样才能在数据链路上选择正确的通道将数据包传送出去。整个ip与mac之间的关系就要靠arp来完成。

        arp是底层链路与上层协议之间的纽带,其主要功能是通过目标IP找到目标设备的MAC。

1、环境说明

1.1 IEEE802.3协议简要 

https://www.ieee802.org/misc-docs/GlobeCom2009/IEEE_802d3_Law.pdf

1.2 硬件板卡*2

imx6u板卡*2

2、ARP包的抓取

        既然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

3、报文分析

        数据从应用层来到数据链路层后是以帧的形式存在,如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缓存表不断的进行建立、更新、查询。

4、驱动中的arp

5、网络层中的arp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值