ARP 协议分析

总的来说,lwip将链路层ethernet的协议分组格式分为ether和etherarp
分开处理。ip分组先进入etharp_ip_input更新一下arp表项,然后直接进入
netif的input传递给上层ip层。arp分组直接进入etharp_arp_input。
不送如ip层。
奇怪的是,lwip把ether header的结构定义在etharp中。

-ARP 数据结构

-- arp表状态
enum etharp_state {
  ETHARP_STATE_EMPTY,  /* 表项空 */
  ETHARP_STATE_PENDING,
  ETHARP_STATE_STABLE, /* 稳定状态表项,该表项中MAC值可直接取出 */
  ETHARP_STATE_EXPIRED  /* 超时表项 */
};
-- arp表项结构
struct etharp_entry {
  struct pbuf *p;  /* arp 请求队列 */
  struct ip_addr ipaddr;
  struct eth_addr ethaddr;
  enum etharp_state state;
  u8_t ctime; /* 超时值 */
};
-- ARP 链路层协议分组
struct etharp_hdr {
  struct eth_hdr ethhdr; /* ether header */
  u16_t hwtype;
  u16_t proto;
  u16_t _hwlen_protolen;
  u16_t opcode;
  struct eth_addr shwaddr;
  struct ip_addr2 sipaddr;
  struct eth_addr dhwaddr;
  struct ip_addr2 dipaddr;
}

- ARP 函数

void etharp_init();
初始化所有静态ARP表项,状态为EMPTY。
static err_t update_arp_entry(struct netif *netif, struct ip_addr *ipaddr, struct eth_addr *ethaddr, u8_t flags);
首先排除广播、多播及any地址。然后,
将ipaddr及ethaddr对加入arp表项中,该表项索引由find_entry获得。
加入后,将该arp表项中还未发送的IP包(这些IP包是由etharp_ouput函数,在
处理IP包发送时,由于未找到对应ip的mac地址,由etharp_query加入到
pending arp的未发送IP包链表中。现在我们得到mac和ip对应值后,就
可以将这些IP包发送出去),发送到netif驱动。
该函数被etharp_ip_input及etharp_arp_input调用。
static s8_t find_entry(struct ip_addr *ipaddr, u8_t flags);
查询包含ipaddr的表项。
查询优先级:1. pending 2. stable 3. empty。
find_entry总是根据这些优先级查找是否由匹配项,如果有,立刻返回该项
索引。否则根据优先级产看是否有过期表项,并覆盖它。
void etharp_ip_input(struct netif *netif, struct pbuf *p);
该函数是再ip分组传上ip层之前,将ip分组的mac和ip映射到
arp表项中做更新。这样的设计好像比较浪费。完全可以加大arp
表项,去除该过程
void etharp_arp_input(struct netif *netif,
 struct eth_addr *ethaddr, struct pbuf *p);
arp分组到来,直接交给该函数处理。
无论netif的ip地址是否被配置过,都将该ARP分组的源ip和mac地址
加入到ARP表项中。如果一个ARP请求的目的ip地址是本地ip地址。
则发送response ARP分组。
err_t etharp_output(struct netif *netif, struct ip_addr *ipaddr, struct pbuf *q);
该函数分开处理两种地址类型的网络层包,
1)多播及广播。直接调用netif->linkoutput发送出去,该函数为网卡驱动。
2)单播。单播的IP包又分三种处理方式。a. 目的ip在arp表项中,并且stable。
则直接构造以太头,调用网卡驱动,发送以太帧。b. 目的ip不在arp表项中,
修改arp表项状态为pending,并调用etharp_request,发送ARP REQUEST。
c. 目的ip在ARP表项中。但状态为pending(这个状态是由b条件引起的,可能
ARP RESPONSE在处理该条件时还为返回)。将待发送的IP包的缓冲区PBUF_REF
替换成PBUF_POOL或PBUF_RAM(暂时不知道为啥)。这些包将会在update_arp_input
中被发送。

- ARP 协议处理流程图

lwIP ARP协议分析相关推荐

  1. arp协议分析python编程实现arp欺骗抓图片

    arp协议分析&python编程实现arp欺骗抓图片 序 学校tcp/ip协议分析课程老师布置的任务,要求分析一种网络协议并且研究安全问题并编程实现,于是我选择了研究arp协议,并且利用pyt ...

  2. 网络协议实验四 ARP 协议分析实验

    实验四 ARP 协议分析实验 2.2 ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议 (Reverse Address Resolution Protocol)的缩写,负责实现从I ...

  3. ARP协议分析与攻击防护(三)

    ARP协议分析与攻击防护(三) 一.ARP攻击实操 1.1)ARP攻击(断网) 1.2)ARP攻击(窃取)

  4. ARP协议分析与攻击防护(一)

    ARP协议分析与攻击防护(一) 一.广播与广播域的概述 1.1)广播与广播域 1.2)广播地址 二.ARP协议讲解 2.1)ARP地址的全名 2.2)ARP协议的作用 2.3)ARP协议的工作原理 2 ...

  5. 实验二ARP协议分析

    "终究是玫瑰误了花期,而我也将你归还故里" 实验二ARP协议分析 1.arp命令(要用管理员启动命令行) 2.arp请求与应答 3.arp代理 4.免费arp 文中小鲨鱼是指Wir ...

  6. 实验三 ARP 协议分析实验

    1.ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议(Reverse  Address   Resolution   Protocol)的缩写,负责实现从IP 地址到物理地址(如以太 ...

  7. 0x0806 ARP协议分析

    一.基本概念 ARP(Address Resolution Protocol) 即地址解析协议,用于实现从IP地址到MAC地址映射. 二. ARP工作流程 2.1 同一网段ARP工作流程分析 1.  ...

  8. 实验2 ARP协议分析

    一.实验目的 1.分析ARP 协议的报文格式 2.理解ARP 协议的解析过程 3.掌握ARP 相关命令 二.实验拓扑 三.实验工具 GNS3和Wireshark抓包分析软件 四.ARP协议的封装格式 ...

  9. 图解ARP协议分析实例

    一 ARP协议 ARP (地址解析协议) 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.主机发送信息时将包含目标I ...

最新文章

  1. 思科路由器怎么安装?
  2. vimrc-20201028重新配置
  3. 手把手教你玩转ARP包(四)
  4. lambda函数 RUNOOB python练习题49
  5. php 短信验证码对比,php短信验证码的3个优势,你知道是什么吗?
  6. JVM:我就想知道我是怎么没的
  7. 网页修改iPhone13在线源码 – 无需SVIP
  8. MySQL主键和外键使用及说明
  9. MySQL取每组的前N条记录
  10. 使用反相器的rc振荡电路
  11. 【直播预告】「甦:知识蓄力2020」编辑讲书智慧接力行动
  12. uboot 1.1.6 移植8900网卡+tftp
  13. 抖音数据 - 网民评论数据采集,分析
  14. udp广播 安卓和pc互相收不到消息
  15. C++获取打印系统当前时间、日期
  16. 用Processing制作小游戏1
  17. PDF如何转Word?分享几个实用办公软件给你
  18. 获取微信用户信息java开发_Java微信公众平台开发(十二)--微信用户信息的获取
  19. Beego入门简单构建, 连接MySQL实现增查操作
  20. 2022年重庆最新建筑施工焊工(建筑特种作业)模拟考试题库及答案解析

热门文章

  1. oracle个人版初始密码,不知道普通用户密码,只知道sys用户密码,不修改普通用户密码,即可登录...
  2. ASP.NET 例程完全代码版(5)——通过web.config配置数据库连接池
  3. WSFC2008R2跨群集迁移WSFC2012R2
  4. spring源码分析,聊聊PropertyPlaceholderConfigurer
  5. 嵌入式Linux系统运行流程图
  6. iOS 开发-文件下载原理
  7. Android下屏保程序的开发
  8. 躲开职业生涯的“甜蜜陷阱”
  9. Mocha BSM应用管理——J2EE应用服务器监控与管理
  10. ug编程内公差和外公差是什么_干货丨模具工厂CNC加工编程工艺与标准!