当前位置:   article > 正文

linux网络-ARP协议_arp包发送

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. 主机1向主机2发送一个ping包,发生的网络数据交互如下:
  2. //主机1发送广播包 询问ip地址为192.168.1.201设备的mac地址
  3. 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
  4. 0x0000: 0001 0800 0604 0001 0016 3e12 fe04 c0a8
  5. 0x0010: 01c8 0000 0000 0000 c0a8 01c9 0000 0000
  6. 0x0020: 0000 0000 0000 0000 0000 0000 0000
  7. //主机2收到广播后,发现寻找自己,于是回复主机1 自己的mac地址
  8. 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
  9. 0x0000: 0001 0800 0604 0002 0e1a 35bc 4bb3 c0a8
  10. 0x0010: 01c9 0016 3e12 fe04 c0a8 01c8
  11. //主机1学习到主机2的mac地址,于是可以进行后续交互,发送ping请求包
  12. 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
  13. 0x0000: 4500 0054 7c07 4000 4001 39c0 c0a8 01c8
  14. 0x0010: c0a8 01c9 0800 c794 a000 0000 cb37 c532
  15. 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000
  16. 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
  17. 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000
  18. 0x0050: 0000 0000
  19. //主机2收到ping请求包,进行回复包发送
  20. 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
  21. 0x0000: 4500 0054 df09 0000 4001 16be c0a8 01c9
  22. 0x0010: c0a8 01c8 0000 cf94 a000 0000 cb37 c532
  23. 0x0020: 0000 0000 0000 0000 0000 0000 0000 0000
  24. 0x0030: 0000 0000 0000 0000 0000 0000 0000 0000
  25. 0x0040: 0000 0000 0000 0000 0000 0000 0000 0000
  26. 0x0050: 0000 0000
  27. //主机2也希望知道主机1的mac地址于是发送arp广播包
  28. 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
  29. 0x0000: 0001 0800 0604 0001 0e1a 35bc 4bb3 c0a8
  30. 0x0010: 01c9 0000 0000 0000 c0a8 01c8
  31. //主机1进行回复
  32. 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
  33. 0x0000: 0001 0800 0604 0002 0016 3e12 fe04 c0a8
  34. 0x0010: 01c8 0e1a 35bc 4bb3 c0a8 01c9 0000 0000
  35. 0x0020: 0000 0000 0000 0000 0000 0000 0000

3、报文分析

        数据从应用层来到数据链路层后是以帧的形式存在,如IEEE802.3标准规范了以太网数据帧结构如下:

在主机1发包函数中,增加打印,发送出的arp数据包为:

  1. ff ff ff ff ff ff 00 16 3e 12 fe 04 08 06 |->arp包开始 00 01
  2. 08 00 06 04 00 01 00 16 3e 12 fe 04 c0 a8 01 c8
  3. 00 00 00 00 00 00 c0 a8 01 c9 |<-arp数据包结束
  4. //ff ff ff ff ff ff:目的地址 广播
  5. //00 16 3e 12 fe 04:源地址 主机1mac
  6. //08 06:帧类型 arp包
  7. //之后28B为ARP数据包
  8. //00 01:硬件类型 mac地址
  9. //08 00:协议类型
  10. //06:硬件地址长度 6B MAC
  11. //04:协议地址长度 4B ip
  12. //00 01:类型 arp请求1 arp应答2 RARP...
  13. //00 16 3e 12 fe 04:发送方mac地址
  14. //c0 a8 01 c8:发送方IP
  15. //00 00 00 00 00 00 接收方以太网地址
  16. //c0 a8 01 c9:接收方IP地址

arp缓存表不断的进行建立、更新、查询。

4、驱动中的arp

5、网络层中的arp

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号