首页 > 其他 > 详细

LWIP之ARP协议

时间:2019-02-12 17:54:43      阅读:297      评论:0      收藏: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时,需要拷贝下来。以防止在等待发送的过程中数据改变。

LWIP之ARP协议

原文:https://www.cnblogs.com/dubrother/p/10344756.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!