【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协议有静态获取和动态获取:
  • 静态获取:即是手动配置ARP映射表 。
  • 动态获取:主机通过ARP协议主机获取、主机维护ARP映射表 。

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

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

文章插图
以太网首部:
  • 目的MAC(6):链路层的数据帧的下一个目标结点设备的MAC 。当携带ARP请求报文时,以太网目的地址MAC为广播地址:0xFFFFFF 。
  • 源MAC(6):当前设备的MAC 。
  • 帧类型(2):为0x0806时,表示ARP报文 。
ARP报文: