04、ARP
百度百科关于ARP的简介:
https://baike.baidu.com/item/ARP/609343?fr=aladdin
ARP
作用:在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的 MAC 地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的 MAC 地址, 那就需要ARP 进行地址解析, 所谓“地址解析”就是主机在发送帧前将目标IP 地址转换成目标MAC 地址的过程。ARP 协议的基本功能就是通过目标设备的 IP 地址,查询目标设备的 MAC 地址,以保证通信的顺利进行。
什么是MAC?
https://baike.baidu.com/item/MAC%E5%9C%B0%E5%9D%80/1254181?fr=aladdin
简而言之,网络中每台设备都有一个唯一的网络标识,这个地址叫MAC地址或网卡地址
ARP 缓存表
当要访问某个IP,计算机必须知道这个IP的物理地址(MAC地址),这时计算机会发一个广播式的数据包询问:“ipx.x.x.x对应的mac是什么?我是IP y.y.y.y , 我的mac是yy-yy-yy-yy-yy-yy” 整个局域网的机子都收到这个询问,真正拥有这个IP的机子就会回答它:“IP x.x.x.x的mac地址是我这个xx-xx-xx-xx-xx-xx”。
通过arp -a查看缓存表,在cmd命令窗敲这个命令即可
LwIP 使用一个arp_table 数组描述ARP 缓存表
static struct etharp_entry arp_table[ARP_TABLE_SIZE];
etharp_entry结构体源码如下
struct etharp_entry {
#if ARP_QUEUEING
/** Pointer to queue of pending outgoing packets on this ARP entry. */
//指向此ARP表项上挂起的数据包队列的指针。
struct etharp_q_entry *q;
#else /* ARP_QUEUEING */
/** Pointer to a single pending outgoing packet on this ARP entry. */
//指向此 ARP 表项上的单个挂起数据包的指针
struct pbuf *q;
#endif /* ARP_QUEUEING */
ip_addr_t ipaddr;
struct netif *netif;
struct eth_addr ethaddr;
u8_t state;
u8_t ctime;
};
关于结构体中其他结构的定义
1、ip_addr_t ipaddr;//记录目标 IP 地址 为一个u32的整型数
```
typedef struct ip_addr ip_addr_t;
struct ip_addr {
u32_t addr;
};
struct netif *netif;//对应网卡信息。
struct eth_addr ethaddr;//记录与目标 IP 地址对应的 MAC 地址 u8_t state;//表项的状态
enum etharp_state {
ETHARP_STATE_EMPTY = 0, //空状态, 表示这些表项能被使用
ETHARP_STATE_PENDING, //添加状态
ETHARP_STATE_STABLE, //
ETHARP_STATE_STABLE_REREQUESTING
#if ETHARP_SUPPORT_STATIC_ENTRIES
,ETHARP_STATE_STATIC
#endif /* ETHARP_SUPPORT_STATIC_ENTRIES */
};
u8_t ctime;//生存时间
上一篇: Java解释器的运行过程介绍
下一篇: Java加密和数字签名编程
推荐阅读
-
04、ARP
-
Unable to determine the device handle for GPU 0000:04:00.0: GPU is lost. Reboot the system to recov
-
PHP Cookbook读书笔记 – 第04章数组
-
避免无线路由器遭受ARP攻击故障技巧
-
PHP语言基础 04 By ACReaper
-
Vue基础(day04)
-
日记2012-04-05 博客分类: 日记 日记
-
日记2012-04-05 博客分类: 日记 日记
-
日记2012-04-13 博客分类: 备忘 备忘
-
Bootstrap 3之美04-自定义CSS、Theme、Package_html/css_WEB-ITnose