TCP/IP 协议栈_3
前言
ARP 协议可实现网络层地址到物理地址转换, 我们就研究一下 IP地址 >> MAC地址的转换.
一、为什么要用 ARP 协议
以太网中中, 一台主机将以太网帧发送给局域网中的其它主机, 是根据 MAC 地址确定目的接口, 而非 IP 地址, 所以需要 ARP 协议先找到目的 IP 地址对应的 MAC 地址, ARP 协议的作用就是提供 IP >> MAC 映射.
ARP 工作原理也比较简单, ARP 向以太网上的每个主机发送一份 ARP请求的以太网数据帧, 这个过程叫广播. 发送内容包含自己的 IP 和 MAC 以及目的主机的 IP, 意思是谁拥有此 IP 请回复你的 MAC.
下面, 我们实际操作一下, 了解ARP请求和回复究竟是什么.
二、ARP分析
下面需要本系列第一篇文章搭建的环境, 如未搭建成功, 请先搭建环境.
- 打开你的Windows终端CMD, shell也一样.
- 启动 WSL, 开启telnet服务:
$ sudo /etc/init.d/xinetd restart
[sudo] password for lhb: # 输入密码
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
- 获取主机 IP: 172.31.96.156
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.96.156 netmask 255.255.240.0 broadcast 172.31.111.255
- 开启 Wireshark, 捕获 vEthernet(WSL)
- 在Windows终端发起telnet请求
telnet 172.31.96.156 #通过ifconfig得到的wsl的ip
- 服务端要求登录:
DESKTOP-0T82VB6 login: lhb
Password:
Linux DESKTOP-0T82VB6 5.15.79.1-microsoft-standard-WSL2 #1 SMP Wed Nov 23 01:01:46 UTC 2022 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Dec 17 14:37:37 CST 2022 from DESKTOP-0T82VB6.mshome.net on pts/1
lhb@DESKTOP-0T82VB6:~$
- 回到wireshark端, 在过滤栏中输入arp, 筛选出arp请求的捕获
No. | Time | Source | Destination | Protocal | Length | info |
---|---|---|---|---|---|---|
1 | 0.000000 | Microsof_ea:f7:85 | Broadcast | ARP | 42 | Who has 172.31.96.156? Tell 172.31.96.1 |
2 | 0.000209 | Microsof_3b:8a:05 | Microsof_ea:f7:85 | ARP | 42 | 172.31.96.156 is at 00:15:5d:3b:8a:05 |
在首次 telnet 连接请求发起时, 由于没有目标主机mac地址, 必须最先进行 ARP 请求获取, 其请求信息及对方应答信息如上, 某mac地址主机发送广播, 内容是 ARP请求, 长度42字节, 信息内容, 请求拥有某 IP 地址主机的 Mac 地址.
作为回复, 目的主机发回: 某mac地址主机发送给特定mac地址主机, 内容是 ARP 回复, 长度 42 , 某 IP 地址的mac 地址是某某某.
以上就是全部通信内容.
- 更底层的分析, 你会发现传输数据的内容: ARP请求有三行, 一共42个16进制数字, 这就是底层密码.
0000 ff ff ff ff ff ff 00 15 5d ea f7 85 08 06 00 01 ........].......
0010 08 00 06 04 00 01 00 15 5d ea f7 85 ac 1f 60 01 ........].....`.
0020 00 00 00 00 00 00 ac 1f 60 9c ........`.
其中开始6字节代表广播:
ff ff ff ff ff ff
其后6字节代表发送者mac
00 15 5d ea f7 85
随后两字节代表通信协议, 本例是 ARP
08 06
以上是以太网头部, 之后是ARP协议请求内容:
两字节 硬件类型 | 两字节 协议类型 | 一字节 硬件地址长度 | 一字节 协议地址长度 | 两字节 操作 | 六字节 发送端mac | 4字节 发送端IP | 6字节 目的端mac | 4字节 目的端IP |
---|---|---|---|---|---|---|---|---|
00 01 | 08 00 | 06 | 04 | 00 01 | 00 15 5d ea f7 85 | ac 1f 60 01 | 00 00 00 00 00 00 | ac 1f 60 9c |
mac | IPv4 | 6 | 4 | request | 发送mac | 172.31.96.1 | 接收mac均为0 | 172.31.96.156 |
而应答的ARP内容如下, 就是操作变为reply, 答复端将自己的mac填好, 掉个个发回去
0000 00 15 5d ea f7 85 00 15 5d 3b 8a 05 08 06 00 01 ..].....];......
0010 08 00 06 04 00 02 00 15 5d 3b 8a 05 ac 1f 60 9c ........];....`.
0020 00 15 5d ea f7 85 ac 1f 60 01 ..].....`.
两字节 硬件类型 | 两字节 协议类型 | 一字节 硬件地址长度 | 一字节 协议地址长度 | 两字节 操作 | 六字节 发送端mac | 4字节 发送端IP | 6字节 目的端mac | 4字节 目的端IP |
---|---|---|---|---|---|---|---|---|
00 01 | 08 00 | 06 | 04 | 00 02 | 00 15 5d 3b 8a 05 | ac 1f 60 9c | 00 15 5d ea f7 85 | ac 1f 60 01 |
mac | IPv4 | 6 | 4 | reply | 发送mac | 172.31.96.156 | 接收mac | 172.31.96.1 |
一旦双方通信完成, ARP会缓存映射, 可在wsl终端用如下命令调取:
$ arp -a
DESKTOP-0T82VB6.mshome.net (172.31.96.1) at 00:15:5d:ea:f7:85 [ether] on eth0
总结
ARP 可说是tcp/ip协议栈中最底层, 也最简单的协议了, 原理简单, 目的明确, 并且是局域网中必须用到的, 读者可自己进行操练包捕获, 熟悉它.