引言

​ 当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址来获取目的MAC地址的过程是由ARP(Address Resolution Protocol)协议来实现的。

ARP 协议

ARP的概念

ARP 地址解析(Address Resolution Protocol)协议用于将IP地址映射到对应的MAC地址,实现在网络中定位和通信设备的地址解析。

ARP 数据包格式

image-20240124203501714

ARP报文不能被路由器所转发,只能在当前广播域

ARP 的作用

当主机A向数据B进行他通信的时候,数据链路层在进行数据封装的时候,需要主机B的MAC地址,此时主机A并不知道主机B的MAC地址,只知道主机B的IP地址为192.168.1.200,则会进行ARP广播,ARP请求是一个广播消息,会被发送到本地网络的所有设备。这个广播消息包含了主机A正在寻找的目标IP地址。

image-20240124203240472

​ 在这种情况下,泛洪(Flooding)操作会发生在交换机上。当交换机收到主机A的ARP广播时,它并不知道主机B的确切位置(MAC地址),因此会将ARP请求广播到所有连接的端口,包括主机B所在的端口。这样,主机B就能接收到ARP请求,并能够回应主机A,将自己的MAC地址提供给主机A。

ARP 请求包

image-20240124202717691

此时 主机A 会发送ARP广播包,去问 IP 192.168.1.200 的MAC地址是多少,此时发送方的MAC地址为主机A的MAC地址,接收方的地址则为全F广播地址。

当主机192.168.1.200收到该数据包时,发现网络层的目的地址为自己时,则进行解封装,并给出响应。

ARP 响应包

image-20240124203009239

接着主机A就会在MAC地址表中记录 192.168.1.200 对应的MAC地址是 00:50:79:66:68:02,于是就会将主机B的MAC地址封装在数据链路层中的 Destination Mac 当中。

ARP 缓存

主机A收到主机B的ARP响应包时,则会将其MAC地址和IP地址保存到本机的MAC地址表当中。

image-20240124204054933

主机B也会将主机A的MAC地址保存到本机的MAC地址表当中。

image-20240124204148022

数据的封装和解封装

数据的封装

image-20240124205118621

假设 192.168.1.1 要使用 telnet 连接 192.168.1.2 服务器,数据的封装是按照OSI七层模型自上而下的,封装过程如下:

应用层省略..

表示层省略..

会话层省略..

传输层封装了来源端口和目的端口,来源端口则是随机生成的,而目的端口为telnet服务端口的23。

image-20240124205940473

网络层封装了来源IP和目的IP,来源IP为 192.168.1.1,而目的IP为 192.168.1.200

image-20240124210037632

现在,我们知道数据包要到具体哪个路由下,但是我们现在还不知道到具体哪个接口,于是这里就需要数据链链路层中的来源MAC和目的MAC。

数据链路层封装了 源MAC和目的MAC,源MAC则为 192.168.1.1 的MAC地址,而目的MAC则为 192.168.1.2 的地址。

image-20240124205248811

通过物理层连接的介质进行发送

以上就是一段数据的封装,接下来我们来看数据包的解封装。

数据的解封装

数据的解封装是参照OSI七层模型自下而上的。

物理层接收数据帧,并将其传给数据链路层,查看目的MAC是否是自己,如果是,则进行解封装,并将其传给网络层,查看目的地址是否是自己,如果是,则继续解封装,并传给传输层,传输层提取数据,交给应用层进行处理和显示。

数据的转发

image-202401240101