在互联网中有各种各样的设备,它们之间的通信方式也多种多样。两个直接相连的主机之间的通信最简单,也是所有其他通信方式的基础。理解了两个直接相连的主机之间的通信,就能快速理解经过路由器、交换机等设备的通信。

主机到主机的通信

直接相连的两个主机处在同一个网络中,主机 A 和主机 B 的 IP 地址属于同一个网络。

主机到主机的通信

每个主机都分配有唯一的 IP 地址和 MAC 地址,同时,因为主机也是第三层设备,因此主机也有一个 ARP 表。在初始时刻,ARP 表是空的。

现在,主机 A 要像主机 B 发送一些数据。它知道主机 B 的 IP 地址,也知道自己的 IP 地址,可以正常的生成 第三层的数据头。

我们前面说过,第二层要传递数据包,必须要有 MAC 地址。主机 A 是知道自己的 MAC 地址的,但是不知道主机 B 的 MAC 地址。主机 A 的 ARP 表里也没有关于主机 B 的 IP 地址的记录。现在主机 A 要如何才能知道主机 B 的 MAC 地址呢?

主机 A 需要发起一个 ARP 请求,来寻求主机 B 的 MAC 地址。

ARP 请求

这个 ARP 请求就是一个单个数据包,数据包里面包含的信息是,“如果谁的 IP 地址是 10.10.10.20,请将你的 MAC 地址发给我。”。

直到现在,主机 A 依然不知道主机 B 是否存在,因此 ARP 请求是以广播的形似发出去的。所有与主机 A 同一个网络的主机都会接收到这个请求。

在 ARP 请求中,主机 A 写入了自己的 MAC 地址,因此,接收到 ARP 请求的主机 B 是可以轻松的将自己的 MAC 地址定向发送给主机 A 的。

ARP 响应

主机 B 接收到主机 A 的 ARP 请求以后,它就知道了主机 A 的 IP 地址和 MAC 地址,这些信息就会被添加到主机 B 的 ARP 表中。

同时,主机 B 将自己的 IP 地址和 MAC 地址以单播的形式发送给主机 A,网络中的其他主机不会收到这个 ARP 响应。

主机 A 在接收到 ARP 响应以后,将主机 B 的 IP 地址和 MAC 地址添加到自己的 ARP 表中。

之后,主机 A 就可以与主机 B 正常通信了。

主机 A 和主机 B 的通信

总结

网络中的通信方式多种多样,主机与主机间直接通信的方式非常少见,但是这种通信方式确实整个互联网中设备间相互通信的基础。

了解了主机间相互通信的原理,我们就可以理解交换机、路由器等是如何实现网络间的通信了。

比较关键的一点是,主机是不知道它是直接与一个交换机相连还是与目标主机相连的,它需要借助于 ARP 协议来确定要目标主机或者下一跳的 MAC 地址。

参考资料

关注微信公众号,获取最新推送~