2022-12-18 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分析

下面需要本系列第一篇文章搭建的环境, 如未搭建成功, 请先搭建环境.

  1. 打开你的Windows终端CMD, shell也一样.
  2. 启动 WSL, 开启telnet服务:
$ sudo /etc/init.d/xinetd restart
[sudo] password for lhb: # 输入密码
Stopping internet superserver: xinetd.
Starting internet superserver: xinetd.
  1. 获取主机 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
  1. 开启 Wireshark, 捕获 vEthernet(WSL)
  2. 在Windows终端发起telnet请求
telnet 172.31.96.156 #通过ifconfig得到的wsl的ip
  1. 服务端要求登录:
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:~$ 
  1. 回到wireshark端, 在过滤栏中输入arp, 筛选出arp请求的捕获
No.TimeSourceDestinationProtocalLengthinfo
10.000000Microsof_ea:f7:85BroadcastARP42Who has 172.31.96.156? Tell 172.31.96.1
20.000209Microsof_3b:8a:05Microsof_ea:f7:85ARP42172.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 地址是某某某.

以上就是全部通信内容.

  1. 更底层的分析, 你会发现传输数据的内容: 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 0108 00060400 0100 15 5d ea f7 85ac 1f 60 0100 00 00 00 00 00ac 1f 60 9c
macIPv464request发送mac172.31.96.1接收mac均为0172.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 0108 00060400 0200 15 5d 3b 8a 05ac 1f 60 9c00 15 5d ea f7 85ac 1f 60 01
macIPv464reply发送mac172.31.96.156接收mac172.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协议栈中最底层, 也最简单的协议了, 原理简单, 目的明确, 并且是局域网中必须用到的, 读者可自己进行操练包捕获, 熟悉它.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不停感叹的老林_<C 语言编程核心突破>

不打赏的人, 看完也学不会.

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

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

打赏作者

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

抵扣说明:

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

余额充值