LWIP之ARP协议

Posted on 2019-02-12 17:25  BlackTosni  阅读(258)  评论(0)    收藏  举报

描述ARP缓存表的数据结构:

1 struct etharp_entry {
2     struct etharp_q_entry *q;  //数据包缓冲队列指针
3     ip_addr_t ipaddr;          //目标IP地址
4     struct eth_addr ethaddr;   //MAC地址
5     struct netif *netif;       //对应网络接口信息
6     u8_t state;                //描述该entry的状态
7     u8_t ctime;                //描述该entry的时间信息
8 };

 LWIP中定义一个缓存表项有四种状态,用枚举型etharp_state进行描述

1 enum etharp_state{
2     ETHARP_STATE_EMPTY=0,                           //empty状态
3     ETHARP_STATE_PENDING,                           //pengding状态
4     ETHARP_STATE_STABLE,                             //stable状态
5     ETHARP_STATE_STABLE_REREQUESTING     //stable状态且发送了一个ARP请求
6 }

当处在stable状态时,内核会对其进行周期性定时,当定时时间到之后,内核会往该表项对应目的IP上发送一个ARP请求,以维护APR表项的有效性,当请求包发送之后,该表项状态会被暂时设置为stable_rerequesting状态。
etharp_tmr()函数是实现ARP功能的重要定时函数。典型规定stable超时时间是20mins,pending超时时间是10S。

 

ARP报文组织结构

以太网目

的地址(MAC)  

以太网源

地址(MAC)

帧类型 硬件类型 协议类型

硬件地

址长度

协议地

址长度

OP

发送方以

太网地址

发送方

IP地址

接收方以

太网地址

接收方

IP地址

6(bytes) 6 2 2 2 1 1 2 6 4 6 4
以太网首部 28字节ARP数据包

帧类型要注意大小端的问题。ARP:0X0806  IP:0X0800

广播包MAC地址是:FF-FF-FF-FF-FF-FF

多播包MAC地址:01-00-5E-XX-XX-XX

 遇到pbuf在类型是PBUF_REF、PBUF_POOL、PBUF_RAM时,需要拷贝下来。以防止在等待发送的过程中数据改变。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3