LWIP学习笔记——ARP协议

1、ARP协议简介

网络层最重要的三个协议:IP协议、ARP协议、ICMP协议

ARP协议:根据IP地址,获取MAC地址,又叫地址解析协议(Address Resolution Protocol)

特点:电脑的网卡的物理地址(MAC地址)唯一,而电脑的IP地址可变

  • ARP协议:根据目标IP地址以广播方式获取相应的MAC地址,并将MAC地址存入ARP缓存表

ARP请求包、ARP应答包、IP数据包的数据格式都符合如下格式:
一般通过帧类型来区分是ARP数据包?IP数据包或者其他数据包
1

  • MAC地址与IP地址的作用
    • IP地址:用于网络寻址,他作用空间是广域网
      如果主机A和主机B是不同网段,则涉及到网络转发的问题

    • MAC地址:用于链路层寻址,它作用空间是局域网,不可变,不重复

同一网段可以由MAC地址直接发;
不同网段需要借助IP地址进行转发,进入同一局域网内再由MAC地址发送
2

2、ARP协议原理

2.1 发送ARP请求包原理

  • 首先,确定是广播/单播,广播需要通过low_level_output发送,单播就要查询MAC地址
    3
/** ARP states */
enum etharp_state {
  ETHARP_STATE_EMPTY = 0,		//ARP缓存表初始化状态
  ETHARP_STATE_PENDING,			//处于不稳定,表项只记录了IP地址,但是未记录到对应的MAC地址
  ETHARP_STATE_STABLE,			//应答前,数据包挂起,应答后,更新ARP缓存表及发送数据包
  ETHARP_STATE_STABLE_REREQUESTING_1,
  ETHARP_STATE_STABLE_REREQUESTING_2
#if ETHARP_SUPPORT_STATIC_ENTRIES
  , ETHARP_STATE_STATIC
#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
};

struct etharp_entry {
#if ARP_QUEUEING
  /** Pointer to queue of pending outgoing packets on this ARP entry. */
  struct etharp_q_entry *q;
#else /* ARP_QUEUEING */
  /** Pointer to a single pending outgoing packet on this ARP entry. */
  struct pbuf *q;
#endif /* ARP_QUEUEING */
  ip4_addr_t ipaddr;			//目标IP地址
  struct netif *netif;			//指向当前网卡
  struct eth_addr ethaddr;		//MAC地址
  u16_t ctime;					//生存时间
  u8_t state;					//表项的状态
};

static struct etharp_entry arp_table[ARP_TABLE_SIZE];

2.2 接收ARP应答包

  • ethernet_input():判断接收到的数据包是IP数据包还是ARP数据包
  • etharp_input():判断ARP数据包是请求包还是应答包,根据ARP报文结构的OP部分进行判断
    5

2.3 总体原理图

6

3、ARP协议报文结构

4

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zianMrY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值