Packet Traveling (二) -- Host to Host Comunication

packtravseriestitle.gif

翻译并转载于Packet Traveling

互联网的核心理念是两台计算机可以相互通信。虽然很少发现两台主机直接连在一起的情况,但通过了解果真如此的情况下会发生什么从而对于了解对台主机通过交换机或路由器进行通信时发生的其他事情至关重要。

因此,本文将重点讨论主机对主机的通信,以及该过程中涉及的每个单独步骤:

主机对主机通信

因为图中没有路由器,我们知道所有的通信都发生在同一个网络中,因此主机A和主机B都配置了属于同一个网络的IP地址。

packtravhth1.png

每个主机都有唯一的IP地址和MAC地址。因为每个主机也是L3设备,所以它们都有一个ARP表。目前,他们的ARP表是空的。

主机A首先为主机B生成一些数据 。主机A知道这个数据的最终目的地将IP地址10.10.10.20(主机B)。主机A也知道自己的地址(10.10.10.10),这样能够创造一个L3头与所需的源和目标IP地址。

但是正如我们之前所了解到的,数据包传送是第二层的工作,所以尽管这些主机彼此直接连接,但必须创建一个L2报头。

L2头的源将是主机A的MAC地址(aaaa)。L2报头的目的地址应该是主机B的MAC地址,但目前,主机A的ARP表中没有主机B的IP地址的表项,因此,不知道主机B的MAC地址。

因此,主机A此时无法创建适当的L2报头来将数据包发送到主机B的网卡。主机A将不得不发起一个ARP请求,以获取丢失的信息:

packtravhth21024x135.png

ARP请求是一个单独的数据包,本质上是问:如果有一个人的IP地址是10.10.10.20,请把你的MAC地址发给我。

记住,此时主机A不知道主机B是否存在。事实上,主机A并不知道自己与主机b直接相连。因此,这个问题是发给链接上的每个人的。ARP请求以广播的形式发送,如果有其他主机连接到这条链路,它们也会收到ARP请求。

还要注意,主机A在ARP请求中包含了自己的MAC地址。这允许主机B(如果存在的话)轻松地用请求的信息直接响应主机A。

packtravhth31024x133.png

接收到ARP请求后,主机B可以学到一些东西。即主机A的IP地址为10.10.10.10,对应的MAC地址为aaaa.aaaa.aaaa。注意,这一项现在被添加到主机B的ARP表中。

主机B可以使用这个新信息直接响应主机A。ARP响应以单播消息的形式发送,直接发送给主机A。如果这条链路上有其他主机,它们就不会看到ARP响应。

ARP响应将包含主机A请求的信息:IP地址10.10.10.20正在由MAC地址bbbb.bbbb.bbbb的网卡提供服务。主机A将使用这些信息来填充它的ARP表:

packtravhth41024x129.png

在主机A的ARP表填充后,主机A现在可以成功地将适当的L2报头组合在一起,从而将数据包发送给主机B。

当主机B获得数据时,它将能够毫不费力地做出响应,因为它在其ARP表中已经有了主机A的映射。

总结

同样,很少发现两个主机直接连接在一起。但是,要理解交换机如何实现多主机通信,或者路由器如何实现多网络通信,就必须了解从一台主机到另一台主机的数据包需要什么条件。这两者都将是本系列下一篇文章的主题。

需要注意的关键是主机不知道它是连接到交换机还是直接连接到另一个主机。在任何一种情况下,主机在尝试与另一个主机通信时都将遵循上述过程。


标题:Packet Traveling (二) -- Host to Host Comunication
作者:reyren
地址:https://www.reyren.cn/articles/2021/07/16/1626423846131.html

    0 评论
avatar