Packet Traveling (四) -- Host to Host through a Router

packtravseriestitle.gif

翻译并转载于Packet Traveling

我们已经了解了两个主机直接连接到一起进行通信需要什么。我们还研究了一个主机通过交换机与另一个主机通信需要什么。现在我们添加另一个网络设备,看看通过路由器从一个主机传输到另一个主机需要什么。

我们将先看两个主要的路由器函数,然后再看它们在路由器操作中的作用。

为了讨论这些概念,我们将使用以下图像。我们将关注R1,以及它将数据包从主机A转发到主机B和主机C需要什么。

packtravhhrinitial1024x212.png

路由功能

前面我们提到过路由器的主要目的是促进网络之间的通信。因此,每个路由器都在两个网络之间创建了一个边界,它们的主要作用是将数据包从一个网络转发到另一个网络。

请注意,在上图中,R1在11.11.11.x之间和22.22.22.x创建了一个边界。R2在22.22.22.x和33.33.33.x之间创建了边界。

为了在网络之间转发报文,路由器必须执行两个功能:填充和维护路由表(Routing Table)和填充和维护ARP表(ARP Table)

填充路由表

从每个路由器的角度来看,路由表是所有现有网络的映射。路由表开始为空,当路由器学习到到每个网络的新路由时填充。

路由器可以通过多种方式学习到每个网络的路由。我们将在本节中讨论其中的两个。

最简单的方法是所谓的直接连接路由。本质上,当一个路由器接口配置了一个特定的IP地址时,路由器将知道它直接连接到的网络。

例如,在上图中,R1的左接口配置了IP地址11.11.11.1。这告诉R1 11.11.11.x的网络存在其左接口。

当然,路由器不能够直接连接到每一个网络中。上图中,R1并没有连接到33.33.33.x中,但是它很可能需要将包转发到该网络中。因此,必须存在另一种学习网络的方式,而不是简单的直接连接路由器。

另一种方式被称为静态路由。静态路由是由管理员手工配置的路由。就好像你明确告诉R1 33.33.33.x 在R2之后。为了到达33.33.33.x, R1必须向R2的接口发送数据包(配置为IP地址22.22.22.2)。

packtravhhrroutingtable300x130.png最后,在R1知道了两条直连路由之后,并且在R1配置了一条静态路由之后,R1将有一个类似于左图的路由表。路由表中填充了许多路由。每条路由都包含一个网络到接口或下一跳地址的映射。

每次路由器收到一个包,它就会参考它的路由表来决定如何转发这个包。

同样,路由表是每个存在的网络的映射(从每个路由器的角度来看)。如果一个路由器接收到一个它没有路由的网络的数据包,那么就路由器而言,这个网络一定不存在。因此,如果数据包的目的地不在路由表中,路由器就会丢弃数据包。

最后,还有第三种学习路由的方法称为动态路由。这涉及到路由器自动检测并相互通信,以通知彼此已知的路由。动态路由可以使用各种协议,每种协议代表不同的策略。

也就是说,路由表将告诉路由器将数据包转发到下一个IP地址。但正如我们之前所了解到的,数据包传递始终是第二层的工作。为了让路由器创建L2报头,将数据包发送到下一个L3地址,路由器必须维护一个ARP表。

填充ARP表

地址解析协议(ARP)是第三层和第二层之间的桥梁。当提供一个IP地址时,ARP解析相关的MAC地址。设备使用ARP来填充ARP表,有时也称为ARP缓存,它是IP地址到MAC地址的映射。

路由器将使用它的路由表来确定应该接收包的下一个IP地址。如果Route表示目的地址存在于直连网络中,则下一个IP地址为报文的最终一跳的目的IP地址。

无论哪种方式,路由器都将使用一个L2报头作为传递数据包到正确NIC。

与路由表不同,ARP表是根据需要填充的。这意味着,在上面的图像中,R1不会发起ARP请求,直到它有一个必须被发送到主机B的数据包。

但是正如我们之前讨论的,ARP表只是IP地址到MAC地址的映射。当R1的ARP表将被填满时,它将像下图所示。
packtravhhrarptable300x149.png

路由器操作

理解了路由器如何填充路由表和路由器打算如何填充ARP表之后,我们现在可以看看路由器如何实际地使用这两个表来促进网络之间的通信。

在上面的R1路由表中,你可以看到有两种类型的路由:一些指向一个接口,一些指向一个下一跳IP地址。我们将围绕这两种可能的路由器操作展开讨论。

但是首先,我们将讨论主机A如何将数据包发送到它的默认网关(R1)。然后我们将看看R1如何处理从主机A发送到主机B的数据包,以及从主机A发送到主机C的另一个数据包。

主机A到R1

packtravhhrroutefirsthop300x240.png

在这两种情况下,主机A都与外部网络上的两台主机通信。因此,主机A将需要将任何一个数据包发送到其默认网关R1。

主机A将创建源IP地址为11.11.11.77,目的IP地址为22.22.22.88(主机B)或33.33.33.99(主机C)的L3头,用于从端到端获取数据。

但是这个L3报头不足以将数据包发送给R1。必须用别的东西。

然后主机A将L3报头封装在L2报头中,其中包括源MAC地址aaaa.aaaa.aaaa和目的MAC地址aa11.aa11.aa11表示R1网卡的MAC地址。这个L2报头的作用是通过第一个跳发送数据包。

主机A已经配置了它的默认网关IP地址,并且希望主机A已经与外部主机通信。因此,主机A很可能已经有一个包含R1的MAC地址的ARP表项。相反,如果这是主机A与外部主机的第一次通信,那么形成L2报头之前就会有一个ARP请求来发现R1的MAC地址。

这时,R1收到了数据包。数据包的目的地IP地址将是22.22.22.88发送给主机B,或33.33.33.99发送到主机C。两个目的地存储在R1路由表中--不同的是一个路由指向一个接口,另一路由指向下一跳IP。

指向接口的路由

路由表中指向接口的路由通常是学习得到的,因为路由器是直接连接到网络的。如果数据包的目的IP地址在一个直接与路由器相连的网络中,路由器就知道它们负责将数据包发送到它的最后一跳。

这个过程与之前讨论过的类似。路由器使用L3报头信息来确定下一步要把包发送到哪里,然后创建一个L2报头将它送到那里。在这种情况下,这个包必须进行的下一跳(也是最后一跳)是到主机B上的网卡。

packtravhhrrouteinterface1024x214.png

L3头将保持不变,它与主机A创建的L3头相同。

不同的是,L2头。注意源MAC地址是bb11.bb11.bb11--R1的右接口MAC地址。主机A为将数据包发送给R1而创建的旧L2报头被剥离,而一个新的L2报头(由R1生成)将其发送到下一个网卡。

指向下一跳的路由

对于从主机A发送到主机C的数据包,目的IP地址是33.33.33.99。当R1查询它的路由表时,它将确定33.33.33.x的下一跳在IP地址22.22.22.2 R2的左接口IP地址处存在。

实际上,这告诉R1使用L2报头,它将数据包送到R2,以便继续沿着它的方式转发这个数据包。

由于当前一跳是在R1和R2之间,它们的MAC地址将构成源MAC地址和目的MAC地址:

packtravhhrroutenexthop11024x212.png

同样,L3报头保持不变,它包含由主机A最初设置的相同的源IP地址和目的IP地址,这些地址代表通信的两端。然而,L2报头在每一跳都完全重新生成。

如果R1没有R2的MAC地址,它将简单地发起一个ARP请求来获取路由中的IP地址:22.22.22.2. 。

随着过程的继续,R2最终将收到数据包,然后将面临与上面例子中R1相同的情况,将数据包发送到它的最后一跳。

这个过程可以根据需要继续进行。如果主机A一直试图与路径上有10台路由器的主机X通话,过程将是相同的。路径中的每一个传输路由器都有一个路由映射主机X的网络到路径中的下一跳IP。直到最终路由器直接连接到主机X所在的网络。最后的路由器将负责将数据包发送到它的最后一跳主机X本身。


标题:Packet Traveling (四) -- Host to Host through a Router
作者:reyren
地址:https://www.reyren.cn/articles/2021/07/19/1626684641961.html

    0 评论
avatar