跳转至

4 网络层

4.1 网络层概述

网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发路由选择两种重要的功能。

路由表与转发表

路由表

  • 存储的是“去往某个目标网络该走哪条路径”的信息。
  • 是由路由选择协议动态生成或手工配置得到的。
  • 例如:目标网络 B → 经过 R1 → R2

转发表

  • 是路由表的“简化版”,用于快速查找下一跳。
  • 通常只包含:目标地址 → 下一跳接口/下一跳IP
  • 用于实际的数据包转发。

网络层向其上层提供的两种服务

  • 面向连接的虚电路服务
  • 无连接的数据报服务

对于面向连接的虚电路服务来说,核心思想是 ”可靠通信应由网络自身来保证”,必须首先建立网络层连接—— 虚电路(Virtual Circuit,VC),以保证通信双方所需的一切网络资源。通信双方沿着已建立的虚电路发送分组。通信结束后,需要释放之前所建立的虚电路。

虚电路

虚电路(Virtual Circuit, VC)并不是物理线路,而是一条逻辑上的通信路径。分组的首部仅在连接建立阶段使用完整的目的主机地址,之后每个分组的首部只需要携带一条虚电路编号即可。

而对于无连接的数据报服务来说,核心思想是 “可靠通信应由用户主机来保证”,每个分组可走不同的路径。因此,每个分组的首部都必须携带目的主机的完整地址。通信结束后,没有需要释放的连接。

这种通信方式所传送的分组可能误码、丢失、重复和失序。但是由于网络自身不提供端到端的可靠传输服务,这就使得网络中的路由器可以做得比较简单,大大降低了网络造价。所以当今互联网(Internet)的网络层普遍使用的是无连接的数据报服务

4.2 网际协议 IP

网际协议(Internet Protocol,IP)是TCP/IP体系结构网际层中的核心协议。

不同的网络,它们的拓扑、性能以及所使用的网络协议都不尽相同,这是由用户需求的多样性造成的,没有一种单一的网络能够适应所有用户的需求。

当 IP网 上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节。

4.2.1 IPv4地址及其编址方法

IPv4地址是给因特网(Internet)上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。

由于IPv4地址由32比特构成,不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。

对于一个32比特的IPv4地址,其由两部分组成:网络号与主机号

  • 网络号标志主机(或路由器)的接口所连接到的网络,同一个网络中,不同主机(或路由器)的接口的IPv4地址的网络号必须相同,表示它们属于同一个网络。
  • 主机号标志主机(或路由器)的接口,同一个网络中,不同主机(或路由器)的接口的IPv4地址的主机号必须各不相同,以便区分各主机(或路由器)的接口。


IPv4地址的编址方法经历了三个历史阶段:

  • 分类编址
  • 划分子网
  • 无分类编址

其中前两者已经成为历史,无分类编址消除分类编址和划分子网的概念,但是我们仍然需要学习。

下图阐述的是IPv4地址的分类编址方法

其中

  • A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。
  • 主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。
  • 主机号为“全1”的地址是广播地址,不能分配给主机(或路由器)的各接口。

Note

一般不使用的特殊IPv4地址

Example

随着更多的中小网络加入因特网,IPv4分类编址方法不够灵活、容易造成大量IPv4地址资源浪费的缺点就暴露出来了。分类编址方法不够灵活且容易造成大量地址浪费,划分子网编址方法对其进行改进。


如果可以从 IPv4 地址的主机号部分借用一些比特作为子网号来区分不同的子网,就可以利用原有网络中剩余的大量 IPv4 地址,而不用申请新的网络地址了

我们可以通过子网掩码来表明分类 IPv4 地址的主机号部分被借用了几个比特作为子网号。

与IPv4地址类似,子网掩码也是由32比特构成的

  • 用左起多个连续的比特1对应IPv4地址中的网络号和子网号;
  • 之后的多个连续的比特0对应IPv4地址中的主机号。

IPv4 地址的划分子网编址方法在一定程度上缓解了因特网在发展中遇到的困难,但是数量巨大的C类网(\(2^{24}−3=2097152\) )由于其每个网络所包含的地址数量太小( \(2^8=256\) ),因此并没有得到充分使用,而因特网的 IPv4 地址仍在加速消耗,整个 IPv4 地址空间面临全部耗尽的威胁。


提出了采用无分类编址的方法,来解决 IPv4 地址资源紧张的问题,同时还专门成立IPv6工作组负责研究新版本的IP,以彻底解决 IPv4 地址耗尽问题。

1993年,因特网工程任务组IETF发布了无分类域间路由选择(Classless Inter-Domain Routing,CIDR )的RFC文档[RFC1517~1519,RFC1520]。

  • CIDR消除了传统A类、B类和C类地址以及划分子网的概念。
  • CIDR可以更加有效地分配IPv4地址资源,并且可以在IPv6使用之前允许因特网的规模继续增长。

无分类编址方法使用的地址掩码与划分子网使用的子网掩码类似,由32比特构成。

  • 用左起多个连续的比特1对应IPv4地址中的网络前缀
  • 之后的多个连续的比特0对应IPv4地址中的主机号

为了简便起见,可以不明确给出配套的地址掩码的点分十进制形式,而是在无分类编址的IPv4地址后面加上斜线“/”,在斜线之后写上网络前缀所占的比特数量(也就是地址掩码中左起连续比特1的数量),这种记法称为斜线记法。

无分类域间路由选择 CIDR 是将网络前缀都相同的、连续的多个无分类 IPv4 地址,组成一个 CIDR 地址块,只要知道 CIDR 地址块中的任何一个地址,就可以知道该地址块的以下全部细节:

  • 地址块中的最小地址与最大地址及地址数量
  • 地址块中聚合某类网络(A类、B类、C类)的数量
  • 地址掩码

Example

使用无分类编址方法,可以根据客户的需要分配适当大小的CIDR地址块,因此可以更加有效地分配IPv4的地址空间。

Example

还是之前那个例子,使用无分类编址方法,就可以做到更细化的分配了

使用无分类编址方法的另一个好处是路由聚合(也称为构造超网)。

网络前缀越长,地址块越小,路由越具体,若路由器查表转发分组时发现有多条路由条目匹配,则选择网络前缀最长的那条路由条目,这称为最长前缀匹配,因为这样的路由更具体。


IPv4地址的应用规划是指将给定的IPv4地址块(或分类网络)划分成若干个更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网络,进而可以给各网络中的主机和路由器的接口分配IPv4地址。

  • 定长的子网掩码(Fixed Length Subnet Mask,FLSM)所划分出的每一个子网都使用同一个子网掩码,每个子网所分配的IP地址数量相同,容易造成地址资源的浪费
  • 变长的子网掩码(Variable Length Subnet Mask,VLSM)所划分出的每一个子网都使用同一个子网掩码,每个子网所分配的IP地址数量可以不同,尽可能减少对地址资源的浪费。

定长的子网掩码

变长的子网掩码

4.2.2 IPv4地址与MAC地址

在数据报传送过程中IPv4地址与MAC地址的变化如下

在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变;

在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或逐网络)改变。

如果仅使用MAC地址进行通信,则会出现以下主要问题:

  • 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。
  • 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。
  • 包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。

因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。

  • 路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发。

4.2.3 地址解析协议ARP

目的是在同一个局域网(LAN)内,通过已知的 IP 地址获取对应的 MAC 地址,以便在数据链路层正确封装帧并发送数据。

ARP 的基本流程:

  1. 查询缓存:主机先查本地 ARP 缓存,看是否已有目标 IP 对应的 MAC 地址。
  2. 广播请求:若没有,发送一个 ARP 请求广播帧(“谁有 192.168.1.100 的 MAC?”)。
  3. 单播响应:目标主机收到后,单播回复自己的 MAC 地址
  4. 更新缓存:发起方将 IP-MAC 映射存入 ARP 缓存,用于后续通信。

4.2.4 IP 数据报的发送和转发流程

IP 数据报的发送和转发过程包含以下两个过程:

  • 主机发送 IP 数据报
  • 路由器转发 IP 数据报

对于一个源主机来说,首先需要判断目的主机是否与自己处于同一个网络中(这个只需要将两者的 IP 地址分别取源主机子网的掩码比较即可)如果在同一网络中,直接交付即可;如果在不同的网络中,则需要通过路由器进行间接交付。那么这时对于源主机来说,应该交给哪个路由器呢?利用默认网关,我们可以知道下一条应该给谁。

路由器收到 IP 数据报之后应该如何转发呢?

  • 首先检查收到的 IP 数据报是否正确:生存时间是否结束,首部是否误码。若不正确,则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送差错报告。
  • 基于 IP 数据报首部中的目的 IP 地址在路由表中进行查找若找到匹配的路由条目,则按该路由条目的指示进行转发,否则丢弃该 IP 数据报,并向发送该 IP 数据报的源主机发送差错报告。

路由器不转发广播 IP 数据报,即路由器隔离广播域

Example

(1)设备1和设备3均是交换机,设备2是路由器

(2)设备2需要配置 IP 地址,IF2: 192.168.1.1,IF3: 192.168.1.65

(3)广播帧,H3 和 H4 会收到数据报

4.2.5 IPv4数据报的首部格式

IPv4 数据报的首部格式及其内容是实现IPv4协议各种功能的基础。

在 TCP/IP 标准中,各种数据格式常常以32比特(即4字节)为单位来描述。

版本:长度为 4 个比特,用来表示 IP 协议的版本。通信双方使用的 IP 协议的版本必须一致。

首部长度:长度为 4 个比特,该字段的取值以4字节为单位,用来表示 IPv4 数据报的首部长度。最小取值为 5 【注意单位是 4 个字节】最大取值是 15

可选字段:长度从1字节到40字节不等,用来支持排错、测量以及安全措施等功能。实际上,可选字段很少被使用。

填充:用来确保IPv4数据报的首部长度是4字节的整数倍,使用全0进行填充。

总长度:长度为16个比特,该字段的取值以字节为单位,用来表示IPv4数据报的长度(首部长度+数据载荷长度)。最大取值是16个1

标识,标志,片偏移共同用于 IPv4 数据报分片

IPv4数据报分片的概念

Example

生存时间(Time To Live,TTL)长度为8个比特,最大取值为二进制的11111111,即十进制的255。该字段的取值最初以秒为单位。因此,IPv4数据报的最大生存时间最初为255秒。路由器转发IPv4数据报时,将其首部中该字段的值减去该数据报在路由器上所耗费的时间,若结果不为0就转发,否则就丢弃。

生存时间字段后来改为以“跳数”为单位,路由器收到待转发的IPv4数据报时,将其首部中的该字段的值减1,若结果不为0就转发,否则就丢弃。

生存时间TTL字段的作用 —— 防止被错误路由的IPv4数据报无限制地在因特网中兜圈

路由环路

协议:长度为8个比特,用来指明IPv4数据报的数据载荷是何种协议数据单元PDU。

协议名称 ICMP IGMP TCP UDP IPv6 OSPF
协议字段值 1 2 6 17 41 89

首部检验和:长度为16个比特,用于检测IPv4数据报在传输过程中其首部是否出现了差错。

上述检验和的计算方法不仅用于IP协议,还用于运输层的用户数据报协议UDP和传输控制协议TCP,常被称为因特网检验和(Internet Checksum)。这种检验和的检错性能虽然不如CRC,但更易用软件实现。

反码求和

  • 0和0相加是0
  • 0和1相加是1
  • 1和1相加是0,但要产生一个进位1,加到下一列
  • 若最高位相加后产生进位,则最后得到的结果要加1

IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。

由于网际层并不向其高层提供可靠传输的服务,并且计算首部检验和是一项耗时的操作,因此在IPv6中,路由器不再计算首部检验和,从而更快转发IP数据报。

4.3 静态路由配置

静态路由配置是指用户或网络运维人员使用路由器的相关命令给路由器人工配置路由表。人工配置方式简单、开销小、但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中采用。

这里人工配置下一跳 10.0.0.2,类型是静态。那么对于因特网中的每一个网络,需要给R1添加一条相应的路由条目吗?我们使用一条默认路由条目,替代了去往因特网中众多网络的海量路由条目。

默认路由条目中的目的网络0.0.0.0/0,其中0.0.0.0表示任意网络,而网络前缀“/0”(相应的地址掩码为0.0.0.0)是最短的网络前缀。路由器在查找转发表转发IP数据报时,遵循“最长前缀匹配”的原则,因此默认路由条目的匹配优先级最低。

特定主机路由:出于某种安全问题的考虑,同时为了使网络运维人员更方便地控制网络和测试网络,特别是在对网络的连接或路由表进行排错时,指明到某一台主机的特定主机路由是十分有用的。

网络前缀“/32”(相应地址掩码为255.255.255.255)是最长的网络前缀,特定主机路由条目的匹配优先级最高。

4.4 因特网的路由选择协议

静态路由选择 动态路由选择
采用人工配置的方式给路由器添加网络路由、默认路由和特定主机路由等路由条目。 路由器通过路由选择协议自动获取路由信息。
静态路由选择简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化。 动态路由选择比较复杂、开销比较大,但能较好地适应网络状态的变化。
静态路由选择一般只在小规模网络中采用。 动态路由选择适用于大规模网络。

因特网是全球最大的互联网,它所采取的路由选择协议具有以下三个主要特点:

  • 自适应:因特网采用动态路由选择,能较好地适应网络状态的变化。
  • 分布式:因特网中的各路由器通过相互间的信息交互,共同完成路由信息的获取和更新。
  • 分层次:将整个因特网划分为许多较小的自治系统(Autonomous System,AS)。在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。

4.4.1 路由信息协议 RIP

路由信息协议(Routing Information Protocol,RIP)是内部网关协议中最先得到广泛使用的协议之一

RIP要求自治系统AS内的每一个路由器,都要维护从它自己到AS内其他每一个网络的距离记录。这是一组距离,称为距离向量(Distance-Vector,D-V)。

RIP使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。

  • RIP将路由器到直连网络的距离定义为1。
  • RIP将路由器到非直连网络的距离定义为所经过的路由器数加1。
  • RIP允许一条路径最多只能包含15个路由器,距离等于16时相当于不可达。因此RIP只适用于小型互联网。

RIP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。

当到达同一目的网络有多条RIP距离相等的路由时,可以进行等价负载均衡,也就是将通信量均衡地分布到多条等价的路径上。

RIP 具有以下三个重要特点:

  • 和谁交换信息:仅和相邻路由器交换信息。
  • 交换什么信息:路由器自己的路由表。即本路由器到所在自治系统AS中各网络的最短RIP距离,以及到各网络应经过的下一跳路由器。
  • 何时交换信息:周期性交换(例如,每个约30秒)。为了加快RIP的收敛速度,当网络拓扑发生变化时,路由器要及时向相邻路由器通告拓扑变化后的路由信息,这称为触发更新


RIP的基本工作过程

  • 路由器刚开始工作时,只知道自己到直连网络的RIP距离为1。
  • 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
  • 若干次交换和更新后,每个路由器都知道到达本自治系统AS内各网络的最短距离和下一跳路由器, 称为收敛。

更新过程按照 RIP 的距离向量算法

更新时选择 RIP 距离更小的,一样的话看下一跳的位置,如果不一样,添加这一条(可以等价负载均衡)

除了上述RIP路由条目更新规则,在RIP的距离向量算法中还包含以下一些时间参数:

  • 路由器每隔大约30秒向其所有相邻路由器发送路由更新报文。
  • 若180秒(默认)没有收到某条路由条目的更新报文,则把该路由条目标记为无效(即把RIP距离设置为16,表示不可达),若再过一段时间(如120秒),还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除。

Example

Example


RIP 存在一个问题就是坏消息传播的慢,当网络中出现故障(如 R1 与 N1 之间的链路断开),R2 会先收到 R1 发送的更新报文,误以为可以通过 R1 到达 N1,而 R1 在后续更新中又从 R2 那里学到“通过 R2 到 N1 ”的路径,从而形成循环:R1 认为去 N1 要经过 R2,R2 又认为要去 N1 要经过 R1,导致距离不断递增(从3→4→5→…)。如果没有最大跳数限制,这种环路将无限持续下去;但RIP规定最大跳数为16,一旦距离达到16就标记为不可达,最终实现收敛。但是这样的故障信息传播的非常慢,需要几分钟

可以采取以下多种措施减少出现该问题的概率或减小该问题带来的危害

  • 当路由表发生变化时就立即发送路由更新报文(即“触发更新”),而不仅是周期性发送。
  • 让路由器记录收到某个特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。

总结一下 RIP 的优缺点

优点:

  • 实现简单,路由器开销小。
  • 如果一个路由器发现了RIP距离更短的路由,那么这种更新信息就传播得很快,即“好消息传播得快”。

缺点:

  • RIP限制了最大RIP距离为15,这就限制了使用RIP的自治系统AS的规模。
  • 相邻路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也随之增大。
  • “坏消息传播得慢”,使更新过程的收敛时间过长。因此,对于规模较大的自治系统AS,应当使用OSPF协议。

4.4.2 开放最短路径优先协议 OSPF

开放最短路径优先(Open Shortest Path First,OSPF)协议是为了克服路由信息协议RIP的缺点在1989年开发出来的。

“开放”表明OSPF协议不是受某一厂商控制,而是公开发表的。

“最短路径优先”是因为使用了Dijkstra提出的最短路径算法(Shortest Path First,SPF)。

OSPF是基于链路状态的,而不像RIP是基于距离向量的。下面介绍一下链路状态的概念

链路状态(Link State,LS)是指本路由器都和哪些路由器相邻,以及相应链路的“代价(cost)”。【“代价”用来表示费用、距离、时延和带宽等,这些都由网络管理人员来决定。】

Example

OSPF相邻路由器之间通过交互问候(Hello)分组建立和维护邻居关系

问候(Hello)分组封装在 IP 数据报中,发往组播地址 224.0.0.5。IP 数据报首部中的协议号字段的取值为89,表明 IP 数据报的数据载荷为 OSPF 分组。

  • 问候(Hello)分组的发送周期为10秒。
  • 若40秒未收到来自邻居路由器的问候(Hello)分组,则认为邻居路由器不可达。

Note

OSPF分组直接使用网际层的IP数据报进行封装,而不像RIP报文需要使用运输层用户数据报协议UDP封装。从数据包按网络体系结构逐层封装的角度看,OSPF属于网际层协议,而RIP属于应用层协议(但其核心功能是路由选择,属于网际层)。

使用OSPF的每个路由器都会产生链路状态通告(Link State Advertisement,LSA)。包含以下两类链路状态信息:

  • 直连网络的链路状态信息
  • 邻居路由器的链路状态信息

链路状态通告 LSA 被封装在链路状态更新(Link State Update,LSU)分组中,采用可靠的洪泛法(Flooding)进行发送。

  • 洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推。
  • 可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认。

通过各路由器洪泛发送封装有各自链路状态通告 LSA 的链路状态更新分组 LSU,各路由器的链路状态数据库LSDB 最终将达到一致

使用 OSPF 的各路由器,基于链路状态数据库 LSDB 进行最短路径优先计算,构建出各自到达其他各路由器的最短路径,即构建各自的路由表。

OSPF 有五种分组类型

  • 问候(Hello):用来发现和维护邻居路由器的可达性。
  • 数据库描述(Database Description):用来向邻居路由器给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
  • 链路状态请求(Link State Request):用来向邻居路由器请求发送某些链路状态项目的详细信息。
  • 链路状态更新(Link State Update):路由器使用链路状态更新分组将其链路状态信息进行洪泛发送,即用洪泛法对整个系统更新链路状态
  • 链路状态确认(Link State Acknowledgement):对链路状态更新分组的确认分组。

在多点接入网络中 OSPF 路由器邻里关系复杂, 每个路由器需要向其他 (\(n−1\)) 个路由器发送问候分组和链路状态更新分组。为了减少洪泛发送问候分组和链路状态更新分组的数量,OSPF采用以下措施:

  • 选举指定路由器(Designated Router,DR)备用的指定路由器(Backup Designated Router,BDR)
  • 所有的非 DR/BDR 只与 DR/BDR 建立邻居关系

为了使OSPF协议能够用于规模很大的网络,OSPF 把一个自治系统 AS 再划分为若干个更小的范围,称为区域(area)。划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域,而不是整个自治系统AS,这样就减少了整个网络上的通信量

自治系统边界路由器(AS Border Router,ASBR):R6

主干路由器(Backbone Router,BBR):R3、R4、R5、R6和R7 (至少有一个接口属于 OSPF 骨干区域的路由器)

区域内路由器(Internal Router,IR):区域1内的R1和R2,区域2内的R8,区域3内的R9

区域边界路由器(Area Border Router,ABR):R3、R4和R7

Example

4.4.3 边界网关协议 BGP

边界网关协议(Border Gateway Protocol,BGP)属于外部网关协议 EGP 这个类别,用于自治系统 AS 之间的路由选择协议。

由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于AS之间的路由选择,使用统一的“代价”作为度量来寻找最佳路由是不行的。AS之间的路由选择还必须考虑相关策略(政治、经济、安全等)。【比如有些网络不安全,即使快也不采用】

在配置 BGP 时,每个AS的管理员要选择至少一个路由器作为该 AS 的 “BGP发言人”。一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器。

使用TCP连接交换路由信息的两个 BGP 发言人,彼此称为对方的邻站(neighbor)或对等站(peer)。

BGP发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议IGP,例如RIP或OSPF。

当BGP发言人相互交换了网络可达性的信息后,各BGP发言人就根据所采用的策略,从收到的路由信息中找出到达各自治系统的较好的路由,也就是构造出树形结构且不存在环路的自治系统连通图

4.4.4 路由器的基本工作原理

路由器是一种具有多个输入端口和输出端口的专用计算机,其任务是转发分组

路由器首先需要知道“如何到达各个网络”,这个任务由路由选择处理机完成。它运行路由选择协议(如 RIP、OSPF、BGP 等),通过与相邻路由器交换信息,动态或静态地学习网络拓扑结构,并将这些信息整理成一张关键的数据结构——路由表

一旦路由表建立完成,路由器就进入分组转发阶段。当数据包从输入端口进入路由器时,经过物理层和链路层解封装后,提取出 IP 数据报的目的地址,然后交给分组处理模块进行查找。该模块使用转发表)快速匹配目的网络,确定应从哪个输出端口发送出去。

4.5 网际控制报文协议 ICMP

为了更有效地转发 IP 数据报以及提高 IP 数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)

4.5.1 ICMP报文类型

主机或路由器使用 ICMP 来发送差错报告报文询问报文

  • 差错报告报文:用来向主机或路由器报告差错情况。
  • 询问报文:用来向主机或路由器询问情况。

ICMP 报文被封装在 IP 数据报中发送。


常见的 ICMP 差错报告报文有以下五种:

  • 终点不可达:当路由器或主机不能交付IP数据报时,就向源点发送重点不可达报文。具体可再根据ICMP的代码字段细分为目的网络不可达、目的主机不可达、目的协议不可达、目的端口不可达、目的网络未知、目的主机未知等13种。

  • 源点抑制:当路由器或主机由于拥塞而丢弃 IP 数据报时,就向发送该 IP 数据报的源点发送源点抑制报文,使源点知道应当把 IP 数据报的发送速率放慢。

  • 时间超过(超时):当路由器收到一个目的 IP 地址不是自己的 IP 数据报时,会将其首部中生存时间TTL 字段的值减1。若结果不为0,则路由器将该数据报转发出去;若结果为0,路由器不但要丢弃该数据报,还要向发送该 IP 数据报的源点发送时间超过(超时)报文。另外,当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文。

  • 参数问题:当路由器或目的主机收到IP数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文。

  • 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机。

以下情况不应发送ICMP差错报告报文

  • 以下情况不应发送ICMP差错报告报文
  • 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文。
  • 对具有多播地址的IP数据报都不发送ICMP差错报告报文。
  • 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告报文。

常用的ICMP询问报文有以下两种:

  • 回送请求和回答:由主机或路由器向一个特定的目的主机或路由器发出。收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送ICMP回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
  • 时间戳请求和回答:用来请求某个主机或路由器回答当前的日期和时间。在ICMP时间戳回答报文中有一个32比特的字段,其中写入的整数代表从1900年1月1日起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间。

4.5.2 ICMP的典型应用

分组网间探测 PING 用来测试主机或路由器之间的连通性。

  • PING是TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP。
  • PING应用所使用的ICMP报文类型为回送请求和回答。

跟踪路由应用 traceroute,用于探测IP数据报从源主机到达目的主机要经过哪些路由器。

Note

在不同操作系统中,traceroute应用的命令和实现机制有所不同:

  • 在UNIX版本中,具体命令为“traceroute”,其在运输层使用UDP协议,在网络层使用ICMP报文类型只有差错报告报文。
  • 在Windows版本中,具体命令为“tracert”,其应用层直接使用网际层的ICMP协议,所使用的ICMP报文类型有回送请求和回答报文以及差错报告报文。

4.6 虚拟专用网和网络地址转换

4.6.1 虚拟专用网 VPN

利用公用的因特网作为本机构各专用网之间的通信载体,这样形成的网络又称为虚拟专用网。

给专用网内各主机配置的IP地址应该是该专用网所在机构可以自行分配的IP地址,这类IP地址仅在机构内部有效,称为专用地址(Private Address),不需要向因特网的管理机构申请。

规定的专用地址

[RFC 1918]规定了以下三个CIDR地址块中的地址作为专用地址:

  • 10.0.0.0~10.255.255.255(CIDR地址块10/8)
  • 172.16.0.0~172.31.255.255(CIDR地址块172.16/12)
  • 192.168.0.0~192.168.255.255(CIDR地址块192.168/16)

很显然,全世界可能有很多不同机构的专用网具有相同的专用IP地址,但这并不会引起麻烦,因为这些专用地址仅在机构内部使用。

在这个例子中,在北京的部门A专用网的主机 H1(IP 地址为 10.1.0.3)要向上海的部门B专用网中的主机 H2(IP 地址为 10.2.0.3)发送数据。

H1 首先生成一个 内部 IP 数据报,其源地址为 10.1.0.3,目的地址为 10.2.0.3。这个数据报只在公司内部有意义,不直接暴露在互联网上。

当数据报到达路由器 R1(位于北京)时,需要将整个内部 IP 数据报进行加密,以防止数据在公网上传输时被窃取或篡改;我们在在外层添加一个新的 IP 首部,形成一个“外部 IP 数据报”,其中:

  • 源地址为 R1 的公网 IP 106.38.0.1
  • 的地址为 R2 的公网 IP 101.80.0.1

封装后的数据报(即“加密的内部IP数据报 + 外部IP首部”)被发送到互联网。在整个传输过程中:

  • 数据内容是加密的,即使被截获也无法读取;
  • 外层 IP 地址仅用于路由,隐藏了内部网络结构;
  • 该数据包像普通 IP 报一样在互联网中转发,但只有目标端能解密。

当数据包到达上海的路由器 R2(VPN 的“隧道出口”)时:

  • R2 根据外层 IP 地址识别出这是发给自己的 VPN 流量;
  • 使用共享密钥对数据进行 解密
  • 去掉外层 IP 首部,恢复原始的内部 IP 数据报;
  • 将该数据报转发至目标主机 H2(10.2.0.3

本例所示的是同一机构内不同部门的内部网络所构成的VPN,又称为内联网VPN

有时,一个机构的虚拟专用网VPN需要某些外部机构(通常是合作伙伴)参加进来,这样的VPN就称为外联网VPN

4.6.2 网络地址转换

尽管因特网采用了无分类编址方法来减缓 IPv4 地址空间耗尽的速度,但由于因特网用户数量的急剧增长,特别是大量小型办公室和家庭网络接入因特网的需求不断增加,IPv4 地址空间即将耗尽的危险然仍没有解除(实际上,因特网号码分配管理局 IANN 于2011年2月3日宣布,IPv4 地址已经分配完毕)。

网络地址转换(Network Address Translation,NAT)技术于1994年被提出,用来缓解IPv4地址空间即将耗尽的问题。由于目前绝大多数基于TCP/IP协议栈的网络应用,都使用运输层的传输控制协议TCP或用户数据报协议UDP,为了更加有效地利用NAT路由器中的全球IP地址,现在常将NAT转换和运输层端口号结合使用。

这样就可以使内部专用网中使用专用地址的大量主机,共用NAT路由器上的1个全球 IP 地址,因而可以同时与因特网中的不同主机进行通信。

将NAT和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation,NAPT)

内网主机 A 和 B 如何通过 NAPT 路由器共享一个公网 IP 访问外网,NAPT 将各自的源端口映射为不同的公网端口并记录在转换表中

外网主机 C 的响应如何通过 NAPT 路由器查表还原目标地址,将数据包正确转发回对应的内网主机。

尽管NAT(和NAPT)的出现在很大程度上缓解了IPv4地址资源紧张的局面,但NAT(和NAPT)对网络应用并不完全透明,会对某些网络应用产生影响。

NAT(和NAPT)的一个重要特点就是通信必须由专用网内部发起,因此拥有内部专用地址的主机不能直接充当因特网中的服务器。外网主机不能首先发起通信。

4.7 IP 多播

多播(Multicast,也称为组播)是一种实现“一对多”通信的技术,与传统单播“一对一”通信相比,多播可以极大地节省网络资源。

在因特网上进行的多播,称为IP多播

当多播组的成员数量很大时,采用多播方式可以显著地减少网络中各种资源的消耗。

评论区

对你有帮助的话请给我个赞和 star => GitHub stars
欢迎跟我探讨!!!