arp协议工作原理

测试网络:

+————————+ +————————-+
| 主机A | |主机B |
| IP:192.168.247.141 | |IP:192.168.247.142 |
| MAC:00:0c:29:28:30:33 | |MAC:00:0c:29:ae:83:e0 |
+———-+————-+ +———-+————–+
|
|
|
+—————-+——————+
| 网关IP:192.168.247.2 |
| MAC:00:50:56:e1:9f:91 |
+———————————–+


以太网帧封装

经过数据链路层封装的数据称为帧(frame),以太网称为以太网帧,令牌环网称令牌环帧,(下面缺少前导码和分隔符)

————————————————————————————————————————

| 目的物理地址(MAC) | 源地址 | 类型 | 数据 | CRC校验 |

| 6字节 | 6字节 | 2字节 | (46-1500)字节 |4字节 |

————————————————————————————————————————

以太网驱动根据2字节类型值将数据发给IP(0x0800),ARP(0x0806)或者RARP(0x0835)模块

arp协议

  • arp协议实现任意网络层地址到任意物理地址的转换,(因为arp报文中有字节分别指出网络层协议类型和硬件类型)
  • arp报文28字节大小

IP地址到以太网地址转换:

——————————————————————————————————————————

|硬件 |协议 |硬件地址|协议地址| | 发送端 |发送端 |接收端 |接收端 |

|类型 |类型 |长度 |长度 | 操作 |物理地址 |IP地址 |物理地址 |IP地址 |

|2字节|2字节|1字节 |1字节 |2字节|6字节 |4字节 | 6字节 |4字节 |

——————————————————————————————————————————

仅讨论IP到MAC的转换:

  • 硬件类型:定义物理地址类型 =1表示MAC地址
  • 表示要映射协议的地址类型 0x0800表示IP协议
  • 硬件地址长度,MAC地址6字节,
  • 协议地址长度IPV4地址4字节
  • 操作:
    1. ARP请求=1,
    2. ARP应答=2,
    3. RARP请求=3
    4. RARP应答=4

linux下有arp高速缓存避免重复arp请求

高速缓存的查看

在主机A下:arp -a
在这里插入图片描述

主机B下:arp -a
在这里插入图片描述

再A(.141)下删除对B(.142)的arp缓存

sudo arp -d 192.168.247.142

tcpdump观察arp通信

  1. 在主机B上开启echo服务

  2. 在A上 tcpdump:

    sudo tcpdump -i ens33 -ent '(dst 192.168.247.141 and src 192.168.247.142) or (dst 192.168.247.142 and src 192.168.247.141)'

  3. 通过telnet 192.168.247.142 echo建立TCP连接查看ARP通信包

    • 主要是下面包内容
      在这里插入图片描述

  1. ff:ff:ff:ff:ff:ff以太网广播地址,第一个包的发送方MAC地址是主机A,
  2. 以太网帧类型0x806表示分发给ARP模块处理
  3. 42字节长度以太网包(未加上CRC校验字段) = 帧开头14字节 + arp包28字节
  4. 发送arp request,接收arp reply

来自: <<Linux高性能服务器编程>>