【lwip】08-ARP协议一图笔记及源码实现

目录

  • 前言
  • 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一图笔记
前言主要简述TCPIP协议族相关的 。
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协议一图笔记及源码实现

文章插图
8.3 ARP协议报文ARP请求和应答分组的格式如图:
【lwip】08-ARP协议一图笔记及源码实现

文章插图
【【lwip】08-ARP协议一图笔记及源码实现】以太网首部:
  • 目的MAC(6):链路层的数据帧的下一个目标结点设备的MAC 。当携带ARP请求报文时,以太网目的地址MAC为广播地址:0xFFFFFF 。
  • 源MAC(6):当前设备的MAC 。
  • 帧类型(2):为0x0806时,表示ARP报文 。
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简要交互:
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值 。

推荐阅读