Luckylau's Blog

你懂网络吗(5)

本文主要是基于学习《CCNA学习指南》总结网络必备的知识。

本篇章涉及以下内容:

IP路由

路由选择基础

​ 路由选择是指将分组从一个设备通过互联网络发往位于不同网络上的另一个设备的操作。路由器不关注网络中的主机,而只关注互联起来的网络以及通往各个网络的最佳路径。目标主机的逻辑网络地址用来获取通过可路由网络传送到指定网络中的分组,主机的硬件地址用来将分组从路由器投递到正确的目标主机上。

要实现对分组的路由,路由器至少必须了解以下内容:

目的地址;
借以获取远程网络信息的相邻路由器;
到达所有远程网络的可能路由;
到达每个远程网络的最佳路由;
维护并验证路由选择信息的方式。

IP 路由选择过程

Host_A 上的某个用户对 Host_B 的 IP 地址执行了 ping 操作。

(1) 因特网控制报文协议 (ICMP )将创建一个回应请求数据包(此数据包的数据域中只包含字母)。

(2) ICMP 会将这一有效负荷递交给因特网协议 (IP ),IP协议会用它创建一个分组 。 至少,源 IP地址、目标 IP 地址和值为 01h 的协议字段)将被封装到此分组中。当此分组到达目的方时,这些内容就会告诉接收方主机应该将这个有效负荷交付给哪个协议来处理。

(3) 一旦这个分组被创建, IP 协议就需要判断目标 IP 地址的位置,判断此目的方位于本地网络还是某个远程网络。

(4) 由于 IP 协议判定这是一个远程的跨网络请求,而要将这一分组路由到远程网络,就必须将它发送给默认网关。

(5) 主机 172.16.10.2 (Host_A) 的默认网关被配置为 172.16.10.1 。要将这一分组发送给此默认网关,我们就必须知道路由器的 Ethemet 0 ( 172.16.10.1 就是配置给它的 IP 地址)接口的硬件地址。为什么要这样?这是因为只有知道了接口的硬件地址,分组才可以向下递交给数据链路层,并在那里完成帧的组建,然后再将帧发送给与 172.16.10.0 网络相连接的路由器接口。

(6) 接下来,需要检查主机的 ARP 缓存,查看此默认网关的 IP 地址是否已被解析为一个硬件地址。

​ 如果已被解析,此分组就可被传送到数据链路层以组建成帧。

​ 如果在主机的 ARP 缓存中没有被解析的硬件地址,那么用于查找 172.16.10.1 硬件地址的 ARP广播将被发送到本地网络上。这时,示例中的路由器会响应这个请求,并提供 Ethemet0 的硬件地址,此后主机会接收并缓存这个地址。

(7) 一旦分组和目的方的硬件地址被交付给数据链路层,局域网驱动程序负责选用适合所在局域网类型(本例中为以太网)的介质访问方式。通过将控制信息封装到此分组上帧就被创建了。在这个帧中,附加有目的方硬件地址和源硬件地址,以及以太网类型字段,这个字段用于描述给数据链路层交付帧中分组的网络层协议,在本示例中,这个协议为IP。在帧的尾部是 FCS (Frame CheckSequence ,帧校验序列)字段,这个部分装载了 CRC (循环冗余校验)的计算结果。

(8) 一旦帧创建完成,这个帧将被交付给物理层,物理层会以一次一比特的方式将帧发送到物理介质上。

(9) 这时,此冲突域中的每台设备都会接收这些比特,并将它们重新组建成帧。每个设备都会对接收到的内容进行 CRC 运算,并与帧中 FCS 字段的内容进行比对。如果值不匹配,接收到的帧将被丢弃。

​ 如果这个 CRC 计算机结果与帧中 FCS 字段的内容匹配,接着将检查目的方的硬件地址与自己( 本示例中指的是路由器的 Ethemet 0 接口 )是否匹配。

​ 如果匹配,则接下来查看以太网类型字段,以获悉完成数据后续处理的网络层协议。

(10) 将分组从帧中取出,并将其他部分丢弃。然后分组被递交给以太网类型字段中列出的协议一示例中是 IP 。

(11) IP 将接收这个分组,并检查它的 IP 目的地址。由于分组的目的地址与配置到此接收路由器上的各个地址均不匹配,此路由器会在其路由选择表中查找目的方的 IP 网络的地址。

(12) 在此路由选择表中需要包含网络 172.16 .2 0.0 的相关表项,否则路由器会立即将收到的分组丢弃,并同时向发送数据源方设备回送一个携带有目标网络不可达信息的 ICMP 报文。
(13) 如果路由器在路由选择表中查找到了关于目的方网络的内容,则分组将被交换到指定的输出接口一在本示例中为接口 Ethernet 1 。
(14) 路由器将此分组交换到 Ethernet 1 的缓冲区内。
(15) 此 Ethernet 1 的缓冲需要获得目的方主机的硬件地址,因此会首先查看 ARP 缓存。

​ 如果 Host-B 的硬件地址已经被解析并保存在路由器的 ARP 缓存中,那么此分组和硬件地址将被递交到数据链路层,用于帧的组建。

​ 如果此硬件地址没有被解析,则路由器将从 Ethernet 1 发出一个 ARP 请求,用以查找 172.16.20.2 的硬件地址。Host-B 将用它的硬件地址进行响应,随后此分组和目的方的硬件地址都会被传递给数据链路层,用以组装成帧。
(16) 数据链路层将使用目标硬件地址和源硬件地址、以太网类型字段及帧尾部的 FCS 字段创建帧。随后这个帧将被递交到物理层,并由物理层以逐比特发送的方式发送到物理介质上。
(17) Host_B 将接收此帧,并立即运行 CRC。如果运算的结果与 FCS 字段中的内容匹配,则检查帧中的目标硬件地址。如果主机认定地址也是匹配的,则检查帧中以太网类型字段的值,判断将分组向上递交的网络层协议一一本示例中为 IP 。
(18) 在网络层,IP会接收这个分组,并对 IP 报头运行 CRC 。如果校验通过, IP 随后将检查分组中目标地址。由于它们最终是匹配的,接下来要检查的就是分组的协议字段,并据此了解分组有效负荷的交付对象。
(19) 此有效负荷将被递交给 ICMP ,后者知道这是一个回应请求数据。 ICMP 将负责应答这个请求,它首先立即丢弃这个接收到的分组然后产生一个新的有效负荷作为回应应答数据。
(20) 这样一个包含有源方地址、目的方地址、协议字段和有效负荷的一个新分组就被创建出来了。而该分组的目的方设备就是 Host A。
(21) 在递交给 IP 后,它将对这个目的方 IP 地址的位置进行判断,判断这一地址指向的是一个本地局域网中的设备,还是一个位于远程网络上的设备。由于示例中的目的方设备位于远程网络,此分组将首先被发送给默认网关。
(22) 默认网关的 IP 地址可以在 Windows 主机的注册表中找到。此外,为了实现 IP 地址到硬件地址的解析还需要查看 ARP 的缓存。
(23) 一旦找到默认网关的硬件地址,则目的方的硬件地址会随分组一起被递交给数据链路层,以便完成帧的创建。
(24) 数据链路层会将收到的分组内容封装起来,并在帧头中包含下列内容:
​ 目的方硬件地址和源方的硬件地址;
​ 值为 Ox0800 (IP) 的以太网类型字段;
​ 值为 CRC 运算结果的 FCS 字段。
(25) 之后,帧将向下递交给物理层,以逐比特的方式发送到网络介质上。
(26) 路由器的 Ethemet 1 接口将接收这些比特位,并将它们重新组建为帧。然后进行 CRC 运算,帧中的 FCS 字段被用于验证计算结果是否匹配。
(27) 当 CRC 通过后,路由器将检查帧中携带的硬件目的地址。由于路由器的接口地址与这一地址是匹配的,于是帧中封装的分组将被取出,随后路由器会查看帧的以太网类型字段,以确定应接收此数据包的网络层协议。
(28) 由于以太网类型字段中指定的是 IP ,于是分组被递交给了网络层的 IP。 IP 将首先对其 IP报头运行 CRC ,然后检查帧中的目的方 IP 地址。

IP 并不会像数据链珞层那样对分组运行完全的 CRC ,它只对 IP 报头进行校验,只关注报头可能出现的错误。

​ 由于分组中携带的 IP 目的方地址与该路由器各个接口的 IP 地址不匹配,于是路由器需要查看路由选择表,以找出一条通往 172.16.10.0 网络的路由。如果表中没有关于目的网络的路由,则路由器会将该分组立即丢弃。
​ 有一点需要简要说明,当(如果)分组是在返回源主机的途中被丢弃,由于这是一个不知原因的错误,我们通常看到的会是请求超时这样的信息。如果出现的错误是由某种已知原因导致的,比如在前往目的主机的途中,某路由器的路由选择表里没有可用的路由,这时得到的信息将会是目标主机不可达一类的信息。根据这些提示内容,我们就可以判断问题是发生在前往目的主机的途中,还是出现在返回源主机的过程中。
(29) 在这里,路由器是知道如何到达网络 172.16.10.0 的,用于输出的接口就是 Ethernet 0 ,于是分组被交换到接口 Ethernet 0 上。
(30) 路由器将检查 ARP 缓存,以确定 172.16.10.2 的硬件地址是否已经被解析。
(31) 由于在完成将分组发送给 Host B 的过程中, 172.16.10.2 的硬件地址已经被缓存起来,因此这一硬件地址将随分组一起被递交给数据链路层。
(32) 数据链路层将使用这个目的方的硬件地址和源方的硬件地址以及类型为 IP的以太网类型字段完成帧的创建。随后对这个帧进行 CRC 运算,并将运算结果放入 FCS 字段中。
(33) 接下来这个帧将被递交给物理层,以逐比特的方式发送到本地网络中。
(34) 目标主机将会接收这个帧,然后运行 CRC ,验证目的方的硬件地址,并查看以太网类型字段中的内容,以认定处理这个分组的上层协议。
(35) IP 是指定的接收者,随后这个分组将被递交给网络层的 IP ,它将检查帧中的协议字段,以确定下一步的操作。 IP 发现需要将此有效负荷交给 ICMP ,之后 ICMP 将确定此分组是一个 ICMP 应答回复。
(36) ICMP 通过向用户界面发送一个惊叹号( ! )表明已经接收到一个回复。随后, ICMP 将尝试继续发送后续的 4 个应答请求给目的方的主机。

​ 这里的 36 个简单步骤可以帮助我们理解整个IP路由选择过程。这里的关键性问题是,即使对于大型的网络,路由选择的实现过程也是如此。只是在非常大的互联网络中,分组在到达目标主机之前需要经过更多的路由转发。
需要重点记忆的是,当 Host A 向 Host B 发送分组时,所采用的目标硬件地址是默认网关的以太网接口地址。之所以会这样,是因为数据帧只在本地网络中有效,它不可以被直接发送到远程网络中。因此,发往远程网络的分组必须通过默认网关进行转发。

测试认知:

在主机 4 发出的数据帧中,目的地址字段中应该放置哪个地址?

主机 4 将使用的目标地址是 Lab B 路由器的 Fa0/0 接口的 MAC 地址。

当分组到达主机 1 时,在分组报头中的 OSI 第 3 层协议的源地址可能是什么?

在第 3 层,源 IP地址就是主机 4 的地址,并且分组中的目标地址就是主机1 的IP地址。

主机 4 正在向连接到 Lab A 路由器上的电子邮件服务器传输文件。由主机 4 发出的数据中所携带的第 2 层目的方地址应该是什么?

主机 4 发出的数据中携带的第 2 层目的方地址将是 Lab B 路由器 Fa0/0接口的 MAC 地址。

当数据帧被电子邮件服务器接收时,它所携带的源 MAC 地址将会是什么?

电子邮件服务器接收的数据帧携带的源 MAC 地址将是 Lab A 路由器的 Fa0/0接口地址。

Luckylau wechat
如果对您有价值,看官可以打赏的!