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

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

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

 enum etharp_state{
ETHARP_STATE_EMPTY=, //empty状态
ETHARP_STATE_PENDING, //pengding状态
ETHARP_STATE_STABLE, //stable状态
ETHARP_STATE_STABLE_REREQUESTING //stable状态且发送了一个ARP请求
}

当处在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协议的更多相关文章

  1. 图解ARP协议

    前置知识:MAC地址 在说到ARP协议之前,需要了解MAC地址,在OSI七层模型中,第三层是网络层,要解决的是下一跳机制确定的设备位置,具体来说就是网卡地址,MAC地址用于在网络中唯一标示一个网卡,一 ...

  2. 【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缓存表数 ...

  3. 【lwip】09-IPv4协议&超全源码实现分析

    目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...

  4. 浅谈ARP协议以及应用

    0. 前言 本章主要简单的介绍ARP的协议格式,主机如何发送和处理ARP报文,以及免费ARP. 1. ARP协议原理 ARP,全称Address Resolution Protocol,地址解析协议, ...

  5. 6410实现网卡(DM9000A)收发功能及ARP协议实现

    1. 网卡硬件结构(DM9000A) 网卡的实质就是MAC通过MII接口控制PHY的过程. MAC主要负责数据帧的构建.数据差错检查.传送控制等. PHY是物理接口收发器,属于物理层,当它收到MAC过 ...

  6. Lvs原理及部署之ARP协议

    1.什么使ARP协议 ARP协议,全称"Address Resolution Protocol" ,中文名是地址解析协议,使用ARP协议可实现通过IP地址获得对应的物理地址(MAC ...

  7. 计算机网络(2)-----ARP协议

    ARP协议(Address Resolution Protocol) 概念 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/I ...

  8. ARP协议

    ARP协议就是一个获取对方MAC地址的协议,ARP协议它是一个网络层的协议,它的作用是通过ARP request报文来获得对方的MAC地址,ARP报文里面发送的内容大概是192.168.1.20你的M ...

  9. ARP协议格式、ARP运行机制入门学习

    相关学习资料 http://baike.baidu.com/view/149421.htm?fromtitle=ARP%E5%8D%8F%E8%AE%AE&fromid=1742212& ...

随机推荐

  1. Jenkins可持续集成项目搭建——配置Jenkins基本设置 & 运行脚本报错点

    一.系统管理->全局工具配置:配置JDK.GIT: 二.项目配置-部署源码管理的远程地址 三.项目配置-构建触发器(以Windows平台举例) 构建项目时,会自动分配一个运行空间(D:\Prog ...

  2. 491. Increasing Subsequences

    这种increasing xxx 题真是老客户了.. 本题麻烦点在于不能重复, 但是和之前的那些 x sum的题目区别在于不能排序的 所以.... 我还是没搞定. 看了一个Java的思路是直接用set ...

  3. spring4注解配置datasource方式

    package com.boot.config; import org.springframework.context.annotation.AnnotationConfigApplicationCo ...

  4. annotation的理解

    Annotations提供一些本来不属于程序的数据. 比如:一段代码的作者或者告诉编译器禁止一些特殊的错误.An annotation 对代码的执行没有什么影响.Annotations使用@annot ...

  5. cookie 就是一些字符串信息

    什么是 Cookie “cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用JavaScript 来创建和取回cookie 的 ...

  6. update_engine-FilesystemVerifierAction和PostinstallRunnerAction

    在介绍完了DownloadAction之后,还剩下FilesystemVerifierAction和PostinstallRunnerAction,下面开始对其进行分析. FilesystemVeri ...

  7. Java Socket NIO

    服务端: public class NIOServer { private static final String HOST = "localhost"; private stat ...

  8. php验证地图坐标在某片坐标区域内

    mysql空间查询并不太适合地图坐标,如果使用:http://www.cnblogs.com/tyjsjl/p/8760002.html的方式进行地图点坐标的查询就不好用了,于是直接使用php来进行地 ...

  9. OpenLayers加载谷歌地图服务

    谷歌地图的地址如下: 谷歌交通地图地址:http://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i3800725 ...

  10. Office2010安装出现“错误1907”的解决方法(未验证)

    http://bbs.pcbeta.com/viewthread-1627988-1-5.html 这个问题我遇到过.解决方法:1.安装时提示错误选择忽略,安装完成后.2.如果能正常使用OFFICE软 ...