目录
- 前言
- 8.1 IP地址与MAC地址
- 8.2 ARP协议简介
- 8.3 ARP协议报文
- 8.4 ARP缓存表
- 8.4.1 ARP缓存表简介
- 8.4.2 LWIP中的缓存表
- 8.4.3 ARP缓存表数据结构
- 8.4.4 ARP缓存表数据缓冲队列
- 8.4.5 ARP缓存表entry状态信息
- 8.4.6 ARP缓存表超时处理
- 8.4.7 ARP缓存表entry更新
- 8.5 ARP协议超时机制框图
- 8.6 ARP收发报文数据流图
- 8.7 ARP报文组包源码实现
- 8.7.1 ARP报文数据结构
- 8.7.2 ARP报文组建发送函数(基函数)
- 8.7.3 发送ARP请求包
- 8.7.4 发送ARP IP探测包
- 8.7.5 发送ARP IP宣告包
- 8.8 数据包发送分析
- 8.8.1 数据发包处理简述(ARP相关)
- 8.8.2 etharp_output():IP数据包是否ARP协议处理
- 8.8.3 etharp_output_to_arp_index():需要维护arp entry的IP数据包转发函数
- 8.8.4 etharp_query():需要发起ARP请求的IP数据包转发函数
- 8.8.5 etharp_find_entry():查找可被新建的arp entry
- 8.9 数据包接收分析
- 8.10 LWIP ARP一图笔记
ARP协议源码在etharp.c和etharp.h中,也是本次笔记的主要内容 。
ARP源码实现的重要数据结构:
- ARP缓存表 。
- ARP报文 。
8.1 IP地址与MAC地址TCP/IP协议的网络层有自己的IP地址 。
单看网络层,传输数据包时只需要知道目标主机的IP地址即可 。
但是网络层数据包下传到链路层时,链路层需要知道下一个节点的MAC地址,才能发包 。
为了实现网络层对MAC地址无感,又能实现数据包收发,就需要把IP地址和MAC地址绑定 。
一个网卡,有IP地址,而网卡对接物理设备时,物理设备有MAC地址,可以把IP地址和网卡设备MAC地址绑定 。
而有时候,IP地址可能是动态的 , 即是当前网卡设备根据需求被赋予不同的IP,所以IP地址与MAC地址映射也需要动态才能更好地把网络层和链路层分割 。
8.2 ARP协议简介地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议 。
主机A知道主机B的ip地址 , 但是在二层链路,也就是数据链路层,是通过mac地址进行转发的,通过ARP协议实现IP和MAC地址绑定 。
ARP协议有静态获取和动态获?。?
- 静态获?。杭词鞘侄渲肁RP映射表 。
- 动态获?。褐骰ü鼳RP协议主机获取、主机维护ARP映射表 。
![【lwip】08-ARP协议一图笔记及源码实现](http://img.zhejianglong.com/231019/091J52104-0.png)
文章插图
8.3 ARP协议报文ARP请求和应答分组的格式如图:
![【lwip】08-ARP协议一图笔记及源码实现](http://img.zhejianglong.com/231019/091J52931-1.png)
文章插图
【【lwip】08-ARP协议一图笔记及源码实现】以太网首部:
- 目的MAC(6):链路层的数据帧的下一个目标结点设备的MAC 。当携带ARP请求报文时,以太网目的地址MAC为广播地址:0xFFFFFF 。
- 源MAC(6):当前设备的MAC 。
- 帧类型(2):为0x0806时,表示ARP报文 。
- 硬件类型(2):硬件地址的类型 。
- 为1即表示以太网地址 。
- 其它还能表示令牌环地址等 。
- 协议类型(2):表示硬件地址要映射的协议地址类型 。
- 0x0800表示IP地址 。
- 其它还能表示ICMP/IGMP等 。
- 硬件地址长度(1):硬件地址的长度,以字节为单位 。
- 以太网上IP地址的ARP请求或应答:该字段为MAC地址的长度,6 。
- 协议地址长度(1):
- 以太网上IP地址的ARP请求或应答:该字段为IP地址长度,4 。
- OP字段(2):操作字段 。
- 1:ARP请求 。
- 2:ARP应答 。
- 3:RARP请求 。
- 4:RARP应答 。
- 发送端以太网地址(6) 。
- 发送端IP地址(4) 。
- 目的以太网地址(6) 。
- 目的IP地址(4) 。
- 看到上述的报文简述后,会发现以太网的数据帧首部和ARP请求数据报中都有发送端的硬件地址 。这个很正常,因为两者所处的OSI层级不一样,前者是链路层处理的数据帧头需要的硬件地址 。后者是网络层处理的ARP请求数据报中的重要信息 。
- ARP请求有些信息会留空,如ARP请求时,目的端的硬件地址不需要填充 。而协议中保留,是为了实现ARP请求和ARP应答的报文字段一致 。
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值 。
推荐阅读
- 耳机怎么煲机(关于耳机煲机的三大禁忌)
- 桥牌的玩法及规则介绍(三分钟看懂桥牌)
- 三 Linux--多线程
- 金铲铲之战巨龙之巢龙拳瑟提玩法是什么
- 2022支付宝蚂蚁庄园答案9.2
- 荣耀Magic3和小米12哪个好-荣耀Magic3和小米12哪个值得入手
- 网络非常不稳定怎么办(网络不稳定了怎么解决)
- 我的世界地狱门做法(我的世界特殊地狱门怎么做)
- 幻塔2.2版本上线时间是什么时候
- 我的世界地狱门怎么做(mc七种传送门)