思维导图: https://www.mubu.com/doc/5kfptNvEsEA

一. 网络层概述

1.1 网络层概述

核心作用:网络层负责实现主机到主机的通信服务,将数据从发送端主机传输到接收端主机。

与其他层的不同:与只存在于端系统(主机)的应用层和传输层不同,网络层协议在网络中的所有主机和路由器上都有运行。这使得它成为协议栈中最复杂、最具挑战性的层次。

为了更好地理解网络层,可以将其分解为两个相互关联的部分:数据平面控制平面

  • 数据平面
    • 职责:处理路由器上的本地操作。它决定一个到达路由器的数据报(即网络层分组)如何从输入链路被转发到正确的输出链路。
    • 学习重点:本章(第4章)将详细讨论数据平面。内容包括传统的基于目的IP地址的转发、更通用的转发方式,以及IPv4和IPv6协议和寻址。
  • 控制平面
    • 职责:处理网络范围的逻辑。它决定了数据报从源主机到目的主机所经过的端到端路径
    • 学习重点:下一章(第5章)将重点讨论控制平面。内容包括路由选择算法以及如OSPF和BGP等路由协议。

1.2 转发与路由选择

网络层负责将分组从发送主机移动到接收主机,主要通过两个核心功能实现:转发路由选择

  • 转发
    • 定义:将单个分组从路由器的输入接口转移到适当的输出接口。
    • 工作方式:路由器检查分组首部的值,使用转发表进行查找,然后将分组发送到指定的输出链路。
    • 特点:这是一个本地的、每路由器的动作,时间尺度很短(纳秒级),通常由硬件实现,属于数据平面
  • 路由选择
    • 定义:计算分组从源到目的地所采取的端到端路径
    • 工作方式:运行在路由器中的路由选择算法(如路由协议)会与其他路由器通信,共同计算出最佳路径,并用这些信息来配置路由器的转发表。
    • 特点:这是一个网络范围的过程,时间尺度较长(秒级),通常由软件实现,属于控制平面

比喻:转发就像驾驶员在每个路口根据路牌指示转弯;路由选择就像驾驶员在出发前规划整个行程路线

1.3 控制平面的两种方法

控制平面负责决定转发表的内容,传统上和新兴的 SDN(软件定义网络)方法有所不同:

  • 传统方法:路由选择算法运行在每台路由器上,路由器之间通过路由协议交换信息来共同计算和维护各自的转发表。
  • SDN 方法:路由选择功能与路由器物理分离,由一个或多个位于远程数据中心的控制器来集中计算并分发转发表。这种方法使得网络控制更加灵活和可编程。

1.4 网络服务模型

网络层提供的服务模型定义了分组在端到端传输中的特性。

  • 可能的服务
    • 确保交付:保证分组能到达目的地。
    • 有时间限制的交付:保证在特定时延内交付。
    • 有序交付:保证分组按发送顺序到达。
    • 确保带宽:保证传输速率。
    • 安全性:提供数据加密等服务。
  • 因特网的网络层
    • 因特网的网络层提供了单一的服务,称位尽力而为服务
    • 特点:它不保证分组能按序到达、不保证交付、不保证时延、也不保证最小带宽。尽管听起来“无服务”,但结合适当的带宽供给,它被证明对于大多数应用(如流媒体、VoIP)是“足够好”的。

二.路由器工作原理

2.1 路由器总体结构


(1)路由器的4个组件

  1. 输入端口
    • 关键功能
      • 物理和链路层功能:终结物理链路,与上游设备进行数据链路层交互。
      • 查找功能:根据数据报首部(通常是目的IP地址),查询转发表来决定该数据报应该被发送到哪个输出端口。
      • 处理控制分组:将控制分组(如路由协议信息)转发给路由选择处理器。
  2. 交换结构
    • 职责:这是路由器的核心。它是一个内部网络,负责将输入端口接收到的数据报,高速地、无阻塞地传输到正确的输出端口。
  3. 输出端口
    • 职责:输出端口存储从交换结构接收的分组,并通过执行必要的链路层和物理层功能在输出链路上传输这些分组 。
  4. 路由选择处理器
    • 职责:执行路由器的控制平面功能
    • 关键功能
      • 在传统路由器中:运行路由协议,维护路由选择表,并计算和配置转发表。
      • 在 SDN 路由器中:与远程控制器通信,接收由控制器计算好的转发表项。
      • 此外,它还执行网络管理功能。

(2)硬件与软件的协同

  • 硬件实现(数据平面):输入端口、交换结构和输出端口通常由硬件实现,因为它们需要处理纳秒级的高速转发任务,软件无法满足这一性能要求。
  • 软件实现(控制平面):路由选择处理器执行的控制功能(如路由协议计算、响应网络变化)是在毫秒或秒级的时间尺度上运行,因此通常由软件实现。

(3)转发类型类比

  • 基于目的地转发:类似于在高速公路入口,根据汽车的最终目的地,工作人员指引它走向正确的出口。
  • 通用转发:更复杂,可以根据汽车的多种属性(如车牌、品牌、型号)来决定其出口,甚至可以阻止某些车辆进入。这体现了现代网络数据平面的灵活性和可编程性。

2.2 输入端口处理和基于目的地转发


(1)输入端口处理流程
输入端口是数据报进入路由器的第一站,它执行多项关键功能:

  • 物理层与链路层处理:首先,输入端口会执行物理层和数据链路层的功能,对传入的报文进行端接和协议处理,比如解封装。
  • 查找功能(最重要):这是输入端口的核心功能。它通过查询转发表,确定数据报应该被转发到哪个输出端口。
    • 转发表的来源:转发表由路由选择处理器(在传统路由器中)或远程控制器(在SDN网络中)计算和更新,并复制到每个输入端口的本地副本上。
    • 效率:这种本地查找方式避免了对中央路由选择处理器的频繁调用,从而消除了性能瓶颈,确保高速转发。
  • 其他功能:除了查找,输入端口还要执行其他任务,如:
    • 检查和更新数据报的版本号检验和寿命(TTL)字段。
    • 更新用于网络管理的计数器,例如接收到的数据报数量。

(2)基于目的地转发:前缀匹配
在处理 IPv4 地址时,由于地址数量庞大(超过40亿),不可能为每个地址都设置一个转发表项。因此,路由器采用了一种更高效的方式:前缀匹配

  • 工作方式:转发表不再包含完整的IP地址,而是由地址前缀和对应的输出链路接口组成。路由器会查找分组的目的地址,并将其与转发表中的前缀进行匹配。
  • 最长前缀匹配规则:一个目的地址可能匹配多个前缀。在这种情况下,路由器会遵循最长前缀匹配规则,即选择与目的地址匹配的最长的前缀,并将分组转发到该前缀对应的接口。这确保了分组被发送到最具体的、最接近的目的地。

(3)高速查找的实现
要在纳秒级完成查找,软件是无法胜任的。因此,查找功能必须由硬件实现,常用的技术包括:

  • 三态内容可寻址存储器(TCAM):这是一种特殊的内存,可以将IP地址作为输入,并在常数时间内返回匹配的转发表项。TCAM 极大地加快了查找速度,是现代高速路由器和交换机中常用的技术。

(4) 匹配 + 动作的抽象
输入端口的查找和转发过程是“匹配 + 动作”抽象的一个具体例子。

  • 匹配:路由器根据数据报首部中的某些字段(如目的IP地址)进行匹配
  • 动作:匹配成功后,路由器执行相应的动作,如将分组转发到特定输出端口。
    这种“匹配 + 动作”的抽象思想在许多网络设备中都存在,例如:
  • 链路层交换机:根据链路层地址进行匹配,并转发帧。
  • 防火墙:根据源/目的地址、端口号等进行匹配,并决定是否阻止或允许分组通过。
  • 网络地址转换器(NAT):根据端口号进行匹配,并重写端口号。

2.3 交换

交换结构位于一台路由器的核心部位,因为正是通过这种交换结构,分组才能实际地从一个输入端口交换(即转发)到一个输出端口中。交换可以用许多方式完成,如图所示。
(1)经内存交换

  • 工作方式:这是最简单、最古老的方式,类似一台传统的计算机。分组从输入端口到达后,会被复制到路由器的内存中。然后,路由选择处理器(CPU)查询转发表,找出正确的输出端口,再将分组从内存复制到输出端口的缓存
  • 主要瓶颈
    • 带宽限制:转发吞吐量受限于内存的读写带宽。
    • 无法并行:因为共享了内存总线,一次只能传输一个分组,即使它们的目的地不同。
  • 现代发展:现代路由器中,内存交换的效率有所提高,由输入线路卡处理查找和复制,而不是依赖中央处理器,这使得交换速度更快。

(2) 经总线交换

  • 工作方式:输入端口通过一根共享总线直接将分组传送到输出端口,不需要中央处理器干预。每个分组会带有内部标签,指示其目的地输出端口。所有输出端口都能看到分组,但只有匹配标签的端口才会接收它。
  • 主要瓶颈
    • 总线速率限制:由于一次只能有一个分组通过总线,路由器的交换带宽受限于这根总线的速率。
    • 无法并行:与内存交换类似,多个分组同时到达时,只有一个能通过总线,其他必须等待。
  • 适用场景:这种方式在局域网和企业网中,对于中小型路由器来说通常是足够的。

(3)经互联网络交换

  • 工作方式:这种方法使用更复杂的网络结构来克服单一总线的带宽限制。最典型的例子是纵横式交换机(crossbar switch)
    • 纵横式交换机:它由一组水平总线(连接输入端口)和一组垂直总线(连接输出端口)构成。通过控制交叉点的开闭,可以同时建立多条输入到输出的连接。
  • 主要优势
    • 高并行性:它可以同时转发多个分组。例如,分组从输入端口A到输出端口Y,同时分组从输入端口B到输出端口X,这两者可以并行进行,因为它们使用的总线不同。
    • 非阻塞:只要输出端口没有被其他分组占用,分组就不会在交换结构中被阻塞。
  • 主要限制:如果多个分组要前往同一个输出端口,仍然会有一个分组需要等待,因为一个输出端口一次只能接收一个分组。
  • 更高级实现:更复杂的互联网络可以采用多级交换元素,甚至通过并行运行多个交换结构来进一步提高交换能力。

2.4 输出端口处理

输出端口处理取出已经存放在输出端口内存中的分组并将其发送到输出链路上 。
这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能 。

2.5 何处出现排队

(1)为什么会发生排队?
分组在路由器中会形成队列,这取决于流量负载交换结构的相对速率线路速率。当分组队列增长时,路由器的缓存最终会耗尽,导致新到达的分组被丢弃

(2)输入端口排队

  • 原因:当交换结构的处理速度低于输入线路的综合速率时,分组必须在输入端口排队,等待被交换结构转发。
  • HOL 阻塞(Head-of-the-Line Blocking):这是输入排队的一个重要问题。当一个分组(比如分组A)被阻塞,因为它想要前往的输出端口正在被其他输入端口的分组占用时,即使它后面的其他分组(比如分组B)的目的地端口是空闲的,分组B也必须等待。这种因为队列前端的分组被阻塞而导致整个队列都无法前进的现象,称为线路前部阻塞
  • 后果:HOL 阻塞会显著降低路由器的吞吐量。在某些条件下,它甚至可能导致输入队列无限制地增长,造成大量丢包。

(3)输出端口排队

  • 原因:即使交换结构的处理速度非常快,甚至比所有输入链路的总速率还快,排队仍然可能在输出端口发生。这是因为多个输入端口的分组可能同时要发往同一个输出端口。
  • 过程
    1. 在一个时间单位内,来自多个输入端口的多个分组同时到达同一个输出端口。
    2. 输出端口一次只能发送一个分组。
    3. 因此,这些同时到达的分组必须在输出端口的缓存中排队,等待被依次发送。
  • 丢包与管理
    • 当输出端口的缓存被填满时,新来的分组会被丢弃。常见的丢包策略是弃尾,即直接丢弃新到达的分组。
    • 为了更智能地管理队列和避免拥塞,可以使用主动队列管理算法,例如 随机早期检测。这些算法可以在缓存填满之前就主动丢弃或标记分组,从而向发送方发送拥塞信号,让发送方降低发送速率。

(4)路由器缓存的大小

  • 传统经验:过去,经验法则认为所需的缓存大小应等于平均往返时延(RTT)乘以链路容量(C),即 B = RTT × C
  • 现代观点:新的研究表明,当有大量 TCP 流(N 条)通过一条链路时,所需的缓存大小可以大大减小,为 B = RTT × C / √N。这说明对于大型骨干路由器来说,所需的缓存容量可能远低于传统估计。

2.6 分组调度

现在我们转而讨论确定次序的问题,即排队的分组如何经输出链路传输的问题 。
(1) 先进先出(FIFO)

  • 工作方式:又称先来先服务(FCFS)。这是最简单的调度规则。分组按照它们到达输出队列的顺序,依次被发送出去。
  • 特点
    • 简单、公平。
    • 不足:它不考虑分组的类型或优先级。例如,一个重要的实时语音分组可能会被一个先到达的普通文件传输分组阻塞,造成时延。

(2)优先权排队(Priority Queuing)

  • 工作方式:分组根据其类型(如由IP地址、端口号等决定)被划分到不同的优先权队列中。路由器会首先服务最高优先权的非空队列。只有当最高优先权的队列为空时,才会服务次高优先权的队列,以此类推。
  • 特点
    • 优先级服务:确保重要或对时延敏感的分组(如实时语音、网络管理数据)能够优先被传输。
    • 非抢占式:通常,一旦一个分组开始传输,即使有更高优先权的分组到达,正在传输的分组也不会被中断。
    • 同一队列内:同一优先权队列内的分组通常采用 FIFO 规则进行调度。

(3)循环排队(Round Robin)

  • 工作方式:分组同样被分类,但不同类别之间没有严格的优先权。调度器会按循环的方式依次服务每个类别的队列。
  • 特点
    • 公平性:与优先权排队相比,它提供了更好的公平性,确保每个类别都能得到服务,避免低优先权分组饥饿(starvation)。
    • 保持工作:一个“保持工作”的调度器在有任何分组等待时,不会让链路闲置。如果一个类别的队列为空,调度器会立即跳到下一个非空队列。

(4)加权公平排队(WFQ)

  • 工作方式:WFQ 是循环排队的一种更通用的形式。每个类别(或流)被分配一个权重(​)。调度器在循环服务时,会根据权重来分配链路带宽。
  • 特点
    • 加权服务:在任何时间段内,如果多个类别都有分组在排队,每个类别 i 获得的带宽份额是 ​。
    • 保证最小吞吐量:即使在最拥塞的情况下,每个类别也能够获得其权重所保障的最小带宽。这使得它能够同时满足不同流量的性能需求,比如保障实时流的带宽,同时允许其他流使用剩余带宽。
    • 复杂性:WFQ 的实现比简单的循环排队更复杂,因为它需要精确地计算和分配带宽。

三.网际协议: IPv4 、寻址、 IPv6 及其他

本节将转向因特网的具体实践,重点研究其网络层的核心——网际协议(IP)

3.1 IPv4 数据报格式

网络层的分组称为数据报。
一个 IPv4 数据报由首部和数据部分组成。首部包含了一系列关键字段,用于控制数据报的传输。

(1)IPv4 数据报格式核心字段

  • 版本:4 比特。标识 IP 协议的版本号,如 IPv4 或 IPv6,这决定了如何解析数据报的其余部分。
  • 首部长度:4 比特。由于 IP 首部可能包含可变长度的选项,该字段用于指示首部的总长度,以便接收方能确定数据部分的起始位置。通常情况下,没有选项的 IP 首部长度为 20 字节。
  • 服务类型:8 比特。允许对不同类型的数据报(如低时延、高吞吐量或高可靠性)进行区分,用于提供特定等级的服务质量。
  • 数据报长度:16 比特。整个 IP 数据报(首部 + 数据)的总长度,以字节为单位。理论最大长度为 65,535 字节。
  • 标识、标志、片偏移:这些字段与 IP 分片有关,用于将一个大的数据报分割成多个小的数据报进行传输,在目的地再重新组装。
  • 寿命(Time-to-Live, TTL):8 比特。用于防止数据报在网络中无限循环。每经过一个路由器,TTL 值会减 1。当 TTL 减到 0 时,该数据报会被丢弃。
  • 协议:8 比特。指示 IP 数据报的数据部分应该被交付给哪个上层(传输层)协议。例如,6 代表 TCP,17 代表 UDP。这个字段将网络层与传输层连接起来。
  • 首部检验和:16 比特。用于帮助路由器检测 IP 数据报首部中是否发生了比特错误。每经过一个路由器,TTL 字段会变化,因此每台路由器都必须重新计算并更新检验和。
  • 源 IP 地址:32 比特。发送数据报的主机的 IP 地址。
  • 目的 IP 地址:32 比特。接收数据报的主机的 IP 地址。
  • 选项:可选字段。允许 IP 首部扩展,但由于会增加处理复杂性,在大多数情况下不使用。在 IPv6 中,这个字段被移除。
  • 数据:数据报的有效载荷。通常包含一个传输层报文段(如 TCP 或 UDP 报文段),或 ICMP 等其他协议的数据。

(2)为什么 IP 和 TCP/UDP 都需要检验和?
这是一个常见问题,原因是:

  1. 覆盖范围不同:IP 层的检验和只检查 IP 首部,而 TCP/UDP 的检验和检查整个报文段(包括首部和数据)。
  2. 协议栈独立性:TCP/UDP 不仅可以在 IP 上运行,也可以在其他网络层协议上运行。同样,IP 也可以承载非 TCP/UDP 的数据。这种设计使得各层协议能够独立运作。

3.2 IPv4数据报分片

(1)什么是 IP 分片?为什么需要它?

  • 最大传送单元(MTU):每个链路层协议都有一个能承载的最大数据量,称为 MTU。例如,以太网的 MTU 通常是 1500 字节。
  • 分片的原因:IP 数据报在从源到目的地的路径上可能会经过使用不同链路层协议的链路。如果一个 IP 数据报的长度超过了某个中间链路的 MTU,路由器就无法直接转发它。为了解决这个问题,路由器会把一个大的 IP 数据报分解成多个较小的 IP 数据报,每个小数据报都称为一个片(fragment),然后分别进行转发。

(2)分片与重组的机制

  • 工作原则:IP 协议的设计者遵循“网络内核保持简单”的原则,将数据报的重组工作交给了目的主机来完成,而不是在路由器上进行。
  • 目的主机的任务:当目的主机收到一系列来自同一源的数据报时,它需要:
    1. 识别出哪些数据报是同一个大报文的片段。
    2. 判断是否所有片段都已收到。
    3. 将收到的片段按正确的顺序重新拼接成原始的数据报。

(3)用于分片重组的 IPv4 首部字段
为了让目的主机能完成上述任务,IPv4 数据报首部中包含了三个关键字段:

  1. 标识
    • 作用:当一个发送主机生成一个数据报时,它会给该数据报分配一个标识号。
    • 机制:如果这个数据报被分片,所有生成的片段都将继承相同的标识号。目的主机可以通过这个标识号来判断哪些片段属于同一个原始数据报。
  2. 标志
    • 作用:用于指示一个片段是否是某个原始数据报的最后一个片段
    • 机制
      • 最后一个片段的标志位被设置为 0
      • 所有其他片段的标志位被设置为 1
      • 这使得目的主机能够确定何时收到了所有片段,并开始重组。
  3. 片偏移
    • 作用:用于指定一个片段在原始数据报中的相对位置
    • 机制:目的主机使用这个字段来正确地拼接各个片段,还原出原始数据报。

3.3 IPv4编址

(1)IPv4 编址与接口

  • IP 地址:每个 IP 地址长度为 32 比特(4 字节),总共有 2^32 个可能的地址。通常使用点分十进制格式书写,例如 193.32.216.9
  • 接口:一个 IP 地址是与接口相关联的,而不是与主机或路由器本身。主机通常有一个接口,而路由器因为要连接多条链路,因此有多个接口,每个接口都需要一个独立的 IP 地址。接口是指网络设备(如主机、路由器)与物理网络链路(如以太网线、光纤)相连接的硬件端口。
  • 唯一性:全球因特网中的每个接口(除了在 NAT 后面的接口)都必须有一个唯一的 IP 地址。

(2)子网

  • 子网(Subnet):一个子网是指一组通过不包含路由器的网络(如以太网交换机或无线接入点)互联的接口。这些接口的 IP 地址有一个共同的前缀
    • 假设你家有一个小网络,由一台路由器、两台电脑和一部打印机组成。
      • 路由器有一个接口,IP 地址是 192.168.1.1
      • 电脑 A 的接口,IP 地址是 192.168.1.2
      • 电脑 B 的接口,IP 地址是 192.168.1.3
      • 打印机的接口,IP 地址是 192.168.1.4
    • 这些设备的 IP 地址都有共同的前缀 192.168.1。这表示它们都属于同一个子网 192.168.1.0/24。它们通过家里的以太网交换机Wi-Fi 接入点直接连接在一起,不需要路由器转发就能互相通信。
  • 子网掩码:通常使用 /x 记法来表示子网,例如 223.1.1.0/24。这里的 /24 表示 IP 地址最左边的 24 个比特构成了子网地址,这部分是所有子网内设备共享的。
  • 子网的判断:判断子网最有效的方法是:将所有主机和路由器的接口断开,这样会形成一些“网络岛”,每个“岛”就是一个子网。

(3)无类别域间路由(CIDR)

  • 无类别域间路由(CIDR)是一种现代的 IP 地址分配策略,它将 32 比特的 IP 地址划分为两个部分:
    • 网络前缀:地址最左边的 x 个比特,表示一个组织的网络。
    • 主机部分:剩余的 32−x 个比特,用于区分组织内部的各个设备。
  • 这种地址格式通常写作 a.b.c.d/x
  • CIDR 的核心优势在于简化了路由和提高了地址利用率:
    • 简化外部路由:当一个数据报从组织外部进入时,外部路由器只需要检查其目的 IP 地址的网络前缀就能确定路由,大大减少了路由表的规模。一个组织的所有内部地址都可以用一个简单的表项来代表。
    • 高效利用地址空间:与过时的分类编址(A、B、C 类网络)不同,CIDR 允许根据组织的实际需求分配任意大小的地址块,避免了大量地址浪费。例如,过去一个拥有 2000 台主机的组织可能被分配一个能容纳 65534 台主机的 B 类地址块,造成地址资源严重闲置。
  • 内部子网划分:虽然外部只看网络前缀,但组织内部的路由器会使用剩余的比特来进一步划分子网,从而更精细地管理内部网络结构。
  • 特殊地址255.255.255.255 是一个特殊的 IP 广播地址,当数据报发往此地址时,它将被交付给同一网络中的所有主机。

(4)获取IP地址
接下来解释了设备如何获取 IP 地址,分为两个层面:组织如何获取地址块,以及组织内的设备如何获取具体地址。
1.组织如何获取 IP 地址块
一个组织首先需要获取一个 IP 地址块,供其内部网络使用。

  • 向 ISP 申请:最常见的方法是向其 ISP(互联网服务提供商)申请。ISP 会从其自身拥有的更大地址块中,根据需要分出一部分地址给该组织。

    • 例如 : ISP 也许自己已被分配了地址块 200.23.16.0/20 该 ISP 可以依次将该地址块分成 8 个长度相等的连续地址 块,为本 ISP 支持的最多达 8 个组织中的一个分配这些地址块中的一块。如下所示 :
  • 全球管理机构:IP 地址由一个非营利组织 ICANN(互联网名称与数字地址分配机构)管理。ICANN 将地址分配给区域性注册机构,这些机构再负责向 ISP 和其他组织进行地址分配。

2.主机如何获取 IP 地址:DHCP
在组织获得地址块后,其内部的设备需要被分配具体的 IP 地址。

  • 手动配置:系统管理员可以手动为路由器和主机配置 IP 地址。
  • 动态主机配置协议(DHCP):这是目前更普遍的方式。DHCP 是一种客户-服务器协议,它允许新加入网络的主机自动获取 IP 地址及其他网络配置信息(如子网掩码、默认网关和 DNS 服务器地址)。由于其自动配置的能力,DHCP 常被称为 “即插即用”“零配置” 协议。

DHCP 广泛应用于各种网络环境,如家庭、企业和无线网络,特别适合那些设备频繁加入和离开的网络。它解决了管理员手动为每台设备分配 IP 地址的繁琐问题。

  • DHCP 的工作流程
    当一台新设备加入网络时,DHCP 协议会通过以下四个步骤为其分配地址:
    1. DHCP 发现 (Discover) 新设备广播一个 DHCP 发现 报文,目的是找到网络中的 DHCP 服务器。由于设备此时还没有 IP 地址,该报文的源 IP 地址为 0.0.0.0,目的 IP 地址为广播地址 255.255.255.255
    2. DHCP 提供 (Offer) 网络中的 DHCP 服务器收到发现报文后,会向该设备广播一个 DHCP 提供 报文,其中包含一个可用的 IP 地址、子网掩码、默认网关和地址租用期等信息。
    3. DHCP 请求 (Request) 设备从一个或多个服务器提供的地址中选择一个,并向服务器发送一个 DHCP 请求 报文,确认它将使用该地址。
    4. DHCP 确认 (ACK) 服务器收到请求后,发送一个 DHCP ACK 报文来最终确认地址分配。设备在收到确认后,便可以在租用期内使用该 IP 地址。
  • DHCP 的优点与局限
    • 优点
      • 自动化:简化了网络管理,无需手动配置 IP 地址。
      • 灵活性:能够为临时连接的设备分配地址,并支持地址的动态更新和续租。
    • 局限性
      • 移动性问题:当设备在不同子网间移动时,会获得新的 IP 地址,导致无法维持现有的 TCP 连接。为了解决这个问题,需要更复杂的协议(如移动 IP)。

(5)IP地址类型
单播(Unicast)地址
单播地址用于点对点通信,即一个发送方将数据发送给一个特定的接收方。这是最常见的通信类型。

  • 工作方式: 就像寄一封普通的信件,您在信封上写上唯一的收件人地址,邮递员就会将信件准确地送到这个人手中。
  • 地址范围: 大部分我们日常使用的 IP 地址都属于单播地址。

多播(Multicast)地址
多播地址用于点对多点通信,即一个发送方将数据发送给一组特定的接收方。

  • 工作方式: 就像一个订阅了特定杂志的群体。发行方(发送方)只需寄送一次杂志,邮局(网络路由器)就会自动识别哪些人订阅了这份杂志,并将杂志的副本分别投递给他们。
  • 地址范围: IPv4 中,多播地址的范围是 224.0.0.0 到 239.255.255.255
  • 应用场景: 视频会议、在线直播、网络游戏、股票信息分发等,这些应用需要将相同的数据高效地发送给多个感兴趣的接收者,而不是一个个单独发送。

广播(Broadcast)地址
广播地址用于点对所有通信,即一个发送方将数据发送给本地网络中的所有设备。

  • 工作方式: 就像在封闭的房间里大喊一声,房间里的所有人都能听到。
  • 地址范围: 广播地址通常是本地网络地址中的一个特殊地址,例如,在一个以 192.168.1.0/24 为网络地址的子网中,192.168.1.255 就是广播地址。
  • 应用场景: 当设备需要找到网络中的某个服务或设备时(比如 DHCP 获取 IP 地址),会发送一个广播消息,本地网络中的所有设备都会接收到这个消息。

3.4 网络地址转换(NAT)

(1)为什么需要NAT?
NAT 的出现主要是为了解决一个核心问题:IPv4 地址的短缺

IPv4 地址只有 32 比特,这意味着全球最多只能有大约 40 亿个唯一 IP 地址。然而,随着智能手机、平板电脑、物联网设备等爆炸式增长,我们很快发现 40 亿个地址远远不够用。
如果每个设备都需要一个全球唯一的 IP 地址来连接互联网,那地址很快就会用完。而 NAT(网络地址转换)就是这个问题的解决方案。它让你的所有设备可以共享同一个公共 IP 地址来访问互联网。

(2)什么是网络地址转换(NAT)?
网络地址转换(NAT) 是一种广泛应用于家庭和小型办公室的技术。它允许一个专用网络(也称私有网络)中的所有设备共享同一个公共 IP 地址来访问因特网,从而解决了 IPv4 地址短缺的问题。专用网络内的 IP 地址只在该网络内部有效,不能在全球因特网上直接路由。

专用网络(也称私有网络)指的是一个在局域网内部使用的、与全球互联网隔离的网络。

(3)NAT 如何工作?
NAT 路由器对外部网络来说就像一个单一的设备,拥有一个唯一的公共 IP 地址。它通过维护一个 NAT 转换表来实现内部网络和外部网络之间的通信:

  1. 出站通信(内部到外部)
    • 内部主机(如 10.0.0.1)向外部服务器发送数据报。
    • NAT 路由器接收到数据报后,会修改数据报的源地址和源端口号。
    • 源 IP 地址被替换为路由器的公共 IP 地址(例如 138.76.29.7)。
    • 源端口号被替换为 NAT 路由器为其分配的一个新端口号(例如 5001)。
    • NAT 路由器在NAT 转换表中记录下 (新端口, 新IP)(原始端口, 原始IP) 的映射关系。
    • 数据报被发送到因特网上。
  2. 入站通信(外部到内部)
    • 外部服务器将响应数据报发送回 NAT 路由器的公共 IP 地址和新端口号。
    • NAT 路由器收到数据报后,查找其转换表,根据目的端口号找到对应的内部主机 IP 地址和端口号。
    • 路由器重写数据报的目的地址,将其发往正确的内部主机。

(4)NAT 的优缺点

  • 优点
    • 节约 IP 地址:允许多个内部设备共享一个公共 IP 地址,有效缓解了 IPv4 地址短缺问题。
    • 增强安全性:对外部网络隐藏了内部网络的结构和具体设备,起到了一定的防火墙作用。
  • 缺点
    • 违反端到端原则:NAT 路由器在传输过程中修改了数据报的 IP 地址和端口号,违反了“主机应直接通信”的设计原则。这给一些需要建立入站连接的应用程序(如服务器或 P2P 协议)带来了困难。
    • 解决方法:为了解决 NAT 带来的问题,出现了 NAT 穿越UPnP(通用即插即用) 等协议,允许内部设备发现并配置 NAT 路由器。

3.5 IPv6


(1)IPv6 的起源与主要动机

  • 动机:IPv6 的开发主要是为了解决 IPv4 地址即将耗尽的问题。IPv4 只有 32 比特地址,而随着联网设备数量的爆炸式增长(如家庭网络、移动设备等),地址空间很快就不够用了。虽然有预测 IPv4 地址在 2018 年左右用完,但实际通过 NAT 等技术延长了其寿命。
  • 改进:IPv6 的设计者也利用这次机会,基于 IPv4 的运行经验,对协议进行了多项改进。

(2)IPv6 数据报格式与特性
IPv6 将 IP 地址长度从 32 比特扩展到了 128 比特,这确保了全球有足够的地址。除了单播和多播地址,IPv6 还引入了新的任播地址,允许数据报被交付到一组主机中的任意一个。

与 IPv4 相比,IPv6 的数据报格式更简单、更高效,主要变化包括:

  • 更大的地址容量:128 比特地址空间。
  • 简化的首部:定长的 40 字节首部,使得路由器可以更快地处理数据报。
  • 流标签:IPv6有 一个难以捉摸的流定义。 RFC2460 中描述道,该字段可用于“给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流”。例如,音频与视频传输就可能被当作 一个流 。

IPv6 删除了 IPv4 中的三个主要功能,以提高转发速度:

  • 分片与重组:IPv6 不允许在中间路由器上进行分片,该操作只能在源端和目的端完成。如果数据报太大,路由器会直接丢弃并通知发送方。
  • 首部检验和:由于传输层和数据链路层已经有检验功能,IP 层中的首部检验被移除,以加快处理速度。
  • 选项字段:该字段不再是标准首部的一部分,而是被移到了“下一个首部”中,从而使首部成为定长。

(3)从 IPv4 到 IPv6 的迁移
将全球因特网从 IPv4 迁移到 IPv6 是一个极其困难和缓慢的过程。

  • 不可能的“标志日”:由于涉及数十亿台设备,宣布一个所有机器同时升级的“标志日”是不可行的。
  • 隧道(Tunneling)技术:这是最常见的迁移方法。它允许 IPv6 数据报在 IPv4 网络中传输。具体做法是,将整个 IPv6 数据报封装在一个 IPv4 数据报的数据部分中,然后在 IPv4 网络中像普通数据报一样传输。当到达隧道末端时,IPv6 数据报会被取出并继续其旅程。

四.通用转发和SDN

1.传统网络设备与通用转发的起源
传统的网络设备(如路由器、交换机)功能单一,各自负责特定的网络层级任务。路由器主要基于目的 IP 地址进行转发,而其他功能(如NAT、防火墙、负载均衡)则由各种“中间盒”设备实现。这种设备激增导致网络管理复杂,维护困难。

为了解决这一问题,通用转发应运而生。它提出了一种统一的、现代化的“匹配-动作(match-action)”范式,将不同网络设备的功能整合到一个概念中,并由远程控制器集中管理。

2.什么是通用转发?
通用转发的核心思想是,分组交换机(不同于传统的路由器或交换机)根据到达分组的多个协议首部字段进行匹配,然后执行相应的动作

  • 匹配(Match): 不仅仅是目的 IP 地址,还可以是来自多个协议层(如链路层、网络层、传输层)的字段,包括:
    • 源/目的 MAC 地址
    • 源/目的 IP 地址
    • 传输层源/目的端口号
    • 入端口ID等
  • 动作(Action): 当匹配成功后,分组交换机可以执行多种操作,而不仅仅是简单的转发:
    • 转发: 将分组发送到特定端口、广播或多播。
    • 丢弃: 像防火墙一样阻止分组。
    • 修改字段: 像 NAT 一样重写首部值。
    • 复制: 将分组复制并发送到多个端口。

2.OpenFlow:实现通用转发的成功案例
OpenFlow 是一个广泛采用的标准,它率先将通用转发的概念变为现实。在 OpenFlow 中,这种“匹配-动作”表被称为流表(flow table),它由一个远程控制器计算、安装和更新。

  • 流表: 每个流表项包含三个核心部分:
    1. 匹配规则: 一组用于匹配分组首部字段的值。
    2. 计数器: 记录匹配到的分组数量等信息。
    3. 动作集合: 当分组匹配成功时要执行的操作。

远程控制器通过编程方式配置这些流表,从而实现各种复杂的网络功能。