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字节
- 操作:
- ARP请求=1,
- ARP应答=2,
- RARP请求=3
- 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通信
在主机B上开启echo服务
在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)'
通过
telnet 192.168.247.142 echo
建立TCP连接查看ARP通信包- 主要是下面包内容
- 主要是下面包内容
- ff:ff:ff:ff:ff:ff以太网广播地址,第一个包的发送方MAC地址是主机A,
- 以太网帧类型0x806表示分发给ARP模块处理
- 42字节长度以太网包(未加上CRC校验字段) = 帧开头14字节 + arp包28字节
- 发送arp request,接收arp reply
来自: <<Linux高性能服务器编程>>
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!