【翻译】数据包的旅程 - 主机之间通信
在讨论完 OSI 模型的组成以及数据包传输过程中的各关键概念之后,我们终于讨论可以在主机间通信时涉及的各个功能。
互联网的根本在于,两个计算机之间可以通信。尽管现实当中很难找到两个直接相连的主机,但理解这种简单模型下的情况,对于理解网络当中的主机通过交换机或者路由器进行相互通信至关重要。
因此,本文主要讨论主机间直接相连进行通信的情况。
主机间直接通信
在直接相连的两个主机之间,由于假设没有路由器存在,因此所有的通信都发生在同一个网络内。主机 A 和主机 B 具有同一网络内的 IP 地址。
每一个主机都有一个唯一的 IP 地址和 MAC 地址。由于每个主机同时也是 L3 设备,因此他们同时维护一个 ARP Table. 初始情况下,ARP Table 为空。
开始时,Host A 向 Host B 发送数据。Host A 知道数据发送的最终目的 IP 地址为10.10.10.20
(Host B)。Host A 同样知道自己的地址为10.10.10.10
, 因此可以创建一个包含源端 IP 和目标 IP 的 L3 报文头。
但根据前面我们了解到的,数据包的传送属于 L2 的职责,因此,尽管两个主机之间相连,还是必须要创建一个 L2 报文头。
L2 报文头的源端地址为 Host A 的 MAC 地址aaaa.aaaa.aaaa
。目标端地址应为 Host B 的 MAC 地址,但此时,Host A 的 ARP Table 中并没有 Host B 的 IP 地址和 MAC 地址的记录。
所以,Host A 目前不能创建完整的 L2 报文头。因此,Host A 必须发送一个 ARP 请求来获取缺失的信息。
该 ARP 请求可以理解为:是否有 IP 地址为 10.10.10.20 的主机,请发送给我你的 MAC 地址。
需要注意,此时 Host A 并不知道 Host B 是否存在。事实上,Host A 也并不知道 Host B 是否同处于一个网络中。因此,该请求会被发送到网络中的所有人。ARP 请求以广播的形式发送,所有处于当前网络中的其他主机,同样会收到该请求。
同样注意到,Host A 在 ARP 请求中写入了自己的 MAC 地址,这使得 Host B(如果存在的话) 可以非常容易地直接向 Host A 进行响应。
Host B 在收到 ARP 请求后会得到一些信息。即,Host A 的 IP 地址为10.10.10.10
,其对应的 MAC 地址为aaaa.aaaa.aaaa
,Host B 在 ARP Table 中会记录对应的信息。
Host B 可以利用该信息直接向 Host A 进行响应。ARP 响应以单播的方式,直接发送至 Host A,网络上的其他主机看不到该响应。
ARP 响应包含 Host A 所需要的信息:IP 地址10.10.10.20
对应的网卡 MAC 地址为bbbb.bbbb.bbbb
。Host A 将该信息添加至本机的 ARP Table:
当 Host A 完成 ARP Table 维护后,可以利用该条记录补充 L2 报文头并将对应的数据发送至 Host B。
当 Host B 收到数据后,可以立即进行响应,因为此时其 ARP Table 中已经有 Host A 对应的记录。
总结
如上所述,现实当中很难找到两台主机直接相连的情况。但理解这种两个主机之间直接通信的情况,对于理解通过交换机和路由器实现主机之间通信至关重要。接下两篇文章主要讨论这两种场景。
需要特别指出的是,主机并不知道其是与另一个主机直接相连,还是与交换机相连。不论如何,主机都会按照上述流程尝试与另外的主机进行通信。
版权声明: 本文为 InfoQ 作者【luojiahu】的原创文章。
原文链接:【http://xie.infoq.cn/article/e07acecf6250369f2e9bdbe98】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论