共计 3555 个字符,预计需要花费 9 分钟才能阅读完成。
咱们曾经钻研了两个间接相连的主机进行通信须要什么。咱们曾经钻研了主机通过交换机与另一台主机通信须要什么。当初咱们增加另一个网络设备,看看流量通过路由器从主机传递到主机须要什么。
本文将是咱们将路由器视为数据包旅行中的要害参与者时所探讨的所有内容的理论利用。在持续之前,可能值得查看该局部。
咱们将首先查看两个次要的路由器性能,而后在查看路由器操作时查看它们的运行状况。
通过这些概念探讨的形式,咱们将应用下图。咱们将关注 R1,以及它将数据包从主机 A 转发到主机 B 和主机 C 须要什么。
为简略起见,每个 NIC 的 MAC 地址将缩写为 4 个十六进制数字。
路由器性能
后面咱们提到路由器的次要目标是促成网络之间的通信。因而,每个路由器都会在两个网络之间创立一个边界,它们的次要作用是将数据包从一个网络转发到另一个网络。
请留神,在上图中,咱们让 R1 在 11.11.11.x 网络和 22.22.22.x 网络之间创立了一个边界。咱们让 R2 在 22.22.22.x 和 33.33.33.x 网络之间创立边界。两个路由器在 22.22.22.x 网络中都有一个接口。
为了在网络之间转发数据包,路由器必须执行两项性能:填充和保护路由表,以及填充和保护 ARP 表。
填充路由表
从每个路由器的角度来看,路由表是存在的所有网络的映射。路由表开始时为空,并在路由器获知到每个网络的新路由时填充。
路由器能够通过多种形式学习每个网络的路由。咱们将在本节中探讨其中的两个。
最简略的办法是所谓的 直连路由 。实质上,当路由器接口配置了特定的 IP 地址时, 路由器将晓得它间接连贯到的网络。
例如,在上图中,R1 的左侧接口配置了 IP 地址 11.11.11.1。这通知 R1 11.11.11.x 网络的地位存在于其左侧接口之外。同样,R1 获知 22.22.22.x 网络位于其右侧接口。
当然,路由器不能间接连贯到每个网络。请留神,在上图中,R1 未连贯到 33.33.33.x,但很可能有一天它必须将数据包转发到该网络。因而,必须存在另一种学习网络的形式,而不仅仅是路由器直连。
另一种形式称为 动态路由 。 动态路由是由管理员手动配置的路由。就如同你明确通知 R1 33.33.33.x 网络存在于 R2 之后,为了达到它,R1 必须将数据包发送到 R2 的接口(配置了 IP 地址 22.22.22.2)。
最初,在 R1 获悉两条直连路由后,并在 R1 配置了一条动态路由后,R1 将有一个相似于下图的路由表。
路由表 中填充了许多路由。每个路由都蕴含 网络到接口或下一跳地址的映射。
路由器每次收到数据包时,都会查问其路由表以确定如何转发数据包。
同样,路由表是存在的每个网络的映射(从每个路由器的角度来看)。如果路由器接管到发往它,没有路由的网络的数据包,那么就该路由器而言,该网络肯定不存在。因而,如果数据包的目的地不在路由表中,则路由器将抛弃该数据包。
最初,还有第三种学习路由的办法,称为 动静路由。这波及路由器自动检测并互相通信,以互相告诉它们已知的路由。有多种协定可用于动静路由,每种协定代表不同的策略,但遗憾的是它们的复杂性超出了本系列文章的范畴。它们无疑将成为将来文章的主题。
也就是说,路由表将通知路由器接下来将数据包转发到哪个 IP 地址。但正如咱们之前理解到的,数据包传递始终是 L2 的工作。为了让路由器创立 L2 报文头,将数据包送到下一个 L3 地址,路由器必须保护一个 ARP 表。
填充 ARP 映射表
地址解析协定 (ARP) 是 L3 和 L2 之间的桥梁。当提供 IP 地址时,ARP 会解析相干的 MAC 地址。设施应用 ARP 来填充 ARP 表,有时也称为 ARP 缓存,它是 IP 地址到 MAC 地址的映射。
路由器将应用其路由表来确定应接管数据包的下一个 IP 地址。如果路由表明目的地存在于间接连贯的网络上,那么“下一个 IP 地址”就是数据包的目的地 IP 地址——该数据包的最初一跳。
无论哪种形式,路由器都将应用 L2 报文头作为容器将数据包传送到正确的 NIC。
与路由表不同,ARP 表是按需填充的。这意味着在上图中,R1 不会向主机 B 的 MAC 地址发动 ARP 申请,直到它有一个必须传送到主机 B 的数据包。
但正如咱们之前所探讨的,ARP 表只是 IP 地址到 MAC 地址的映射。当 R1 的 ARP 表将被齐全填充时,它看起来像下图。
再一次,为简略起见,本文中的图片仅应用 4 个十六进制数字作为 MAC 地址。实际上,MAC 地址的长度为 12 个十六进制数字。如果更简略,你能够简略地将四位十六进制 MAC 地址反复三遍,从而为 R2 的左侧接口提供一个“实在”的 MAC 地址 bb22.bb22.bb22。
路由器操作
理解了路由器如何填充其路由表以及路由器打算如何填充其 ARP 表后,咱们当初能够看看这两个表如何理论用于路由器以促成网络之间的通信。
在下面 R1 的路由表中,你能够看到有 两种类型的路由:一些指向接口,另一些指向下一跳 IP 地址。咱们将围绕这两种可能性围绕路由器的操作进行探讨。
但首先,咱们将探讨主机 A 如何将数据包传送到其默认网关 (R1)。而后咱们将看看从主机 A 发送数据包到主机 B 以及从主机 A 发送另一个数据包到主机 C 时 R1 做了什么。
主机 A 将数据包发送到默认网关 R1
在这两种状况下,主机 A 都在与内部网络上的两台主机通信。因而,主机 A 须要将任一数据包发送到其默认网关 — R1。
主机 A 将创立 L3 报文头,其源 IP 地址为 11.11.11.77,指标 IP 地址为 22.22.22.88(对于主机 B)或 33.33.33.99(对于主机 C)。此 L3 报文头将用于从“端到端”获取数据。
然而 L3 报文头不足以将数据包传送到 R1。必须应用其余货色。
而后,主机 A 将 L3 报文头封装在 L2 报文头中,其中包含 aaaa.aaaa.aaaa 的源 MAC 地址和 aa11.aa11.aa11 的指标 MAC 地址——标识 R1 网卡的 MAC 地址。该 L2 报文头将用于第一跳传送数据包。
主机 A 曾经配置了默认网关的 IP 地址,心愿主机 A 曾经与内部主机通信。因而,主机 A 很可能曾经有一个带有 R1 的 MAC 地址的 ARP 表条目。相同,如果这是主机 A 与内部主机的第一次通信,则在造成 L2 报文头之前将有一个 ARP 申请来发现 R1 的 MAC 地址。
此时,R1 将有数据包。数据包的指标 IP 地址要么是发送到主机 B 的通信的 22.22.22.88,要么是发送到主机 C 的通信的 33.33.33.99。这两个目的地都存在于 R1 的路由表中——区别在于一个路由指向 一个接口和另一个路由指向下一跳 IP。
指向接口的路由
因为路由器间接连贯到网络,路由表中指向接口的路由通常是学习的。如果数据包的指标 IP 地址位于间接连贯到路由器的网络中,则路由器晓得它们负责将数据包传送到其最初一跳。
该过程相似于之前探讨过的过程。路由器应用 L3 报文头信息来确定下一步将数据包发送到哪里,而后创立一个 L2 报文头以将其送到那里。在这种状况下,此数据包必须通过的下一个(也是最初一个)跃点是达到主机 B 上的网卡。
L3 报文头将放弃不变——它与主机 A 创立的 L3 报文头雷同。
不同的是 L2 报文头。留神源 MAC 地址是 bb11.bb11.bb11——R1 的右接口 MAC 地址。主机 A 为将数据包发送到 R1 而创立的旧 L2 报文头被剥离,并生成一个新的 L2 报文头(由 R1)以将其传送到下一个网卡。
指标 MAC 地址当然是 bbbb.bbbb.bbbb — 主机 B 的 MAC 地址。
指向下一跳地址的路由
对于从主机 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 地址:
同样,L3 报文头放弃不变,它包含最后由主机 A 设置的雷同源和指标 IP 地址——这些地址代表通信的两个“端”。然而,L2 报文头在每一跳都齐全从新生成。
如果 R1 没有 R2 的 MAC 地址,它会简略地向路由中的 IP 地址发动 ARP 申请:22.22.22.2。从那时起,创立正确的 L2 报文头将没有问题,该 L2 报文头将从 R1 获取数据包到 R2。
随着过程的持续,R2 将最终接管到数据包,而后面临与 R1 在上例中雷同的状况——将数据包传送到其最初一跳。
这个过程能够依据须要持续。如果主机 A 试图与门路中具备 10 个路由器的主机 X 通信,则该过程将是雷同的。门路中的每个直达路由器都有一个路由,将主机 X 的网络映射到门路中的下一跳 IP。直到间接连贯到主机 X 所在网络的最初一个路由器。最初一个路由器将负责将数据包传送到它的最初一跳——主机 X 自身。
翻译
Host to Host through a Router