以下为个人学习笔记和习题整理
课程:哈尔滨工业大学 计算机网络
https://www.bilibili.com/video/BV1Up411Z7hC?share_source=copy_web

# 概述

我们在前一章中了解到, 传输层 依靠 网络层主机到主机 通信服务提供各种形式的 进程到进程 通信。我们还了解到,传输层在不了解网络层如何实际实现该服务的情况下这样做。也许您现在想知道,主机到主机通信服务的背后是什么,是什么使它运行?

网络层服务:提供 主机到主机(host-to-host) 的通信服务。

  • 发送主机:将 报文段(segment) 封装到 数据报(datagram) 中。
  • 接受主机:向 传输层 交付 报文段(segment)
  • 路由器:检验所有穿越它的 IP 数据报的 首部(header) ,决策 如何处理 IP 数据报。

Untitled_0

如图所示,与 传输层应用层 不同的是,在网络中的每个 主机路由器 中都有一部分 网络层

# 转发和路由

  1. 网络层可以分解为两个 相互作用 的部分: 数据平面控制平面

    • 在第四章中,我们将首先介绍网络层的数据平面功能
      • The per-router functions in the network layer that determine how a datagram (that is, a network-layer packet) arriving on one of a router’s input links is forwarded to one of that router’s output links .
      • 网络层中的 每个路由器的功能 ,它决定到达路由器的一个 输入链路 上的数据报如何被转发到路由器的一个 输出链路 上。
      • 我们将介绍传统的 IP 转发 (转发基于数据报的 目的地址 )和 通用转发 (转发和其他功能可以使用 数据报报头 中几个不同字段中的值来执行)。
      • 我们将详细学习 IPv4IPv6 协议及其 寻址(addressing)
    • 在第 5 章中,我们将讨论网络层的控制平面功能
      • The network-wide logic that controls how a datagram is routed among routers along an end-to-end path from the source host to the destination host.
      • 控制数据报如何沿 端到端路径 在从源主机到目标主机的路由器之间 路由网络范围的逻辑 (network-wide logic)
      • 我们将涵盖 路由算法 ,以及 路由协议 ,如 OSPF 和 BGP,在今天的 Internet 中广泛使用。

    传统上,这些 控制平面路由协议数据平面转发功能 是在一个 路由器 中一起整体实现的。

    • 软件定义网络(SDN) 通过将这些 控制平面的功能 作为一个 单独的服务 来显式地分离数据平面和控制平面,通常在一个远程 控制器(controller) 中。
  2. 由上述讨论可知,网络层的核心功能:

Untitled_8

  • 转发 (forwarding):将分组从路由器的 输入端口 转移到合适的 输出端口转发表 用于确定在本路由器如何转发分组。
  • 路由 (routing):确定分组 从源到目的 经过的 路径路由算法(协议) 用于确定通过网络的 端到端路径
  • 连接建立:某些网络的重要功能,并非所有网络均支持(如 ATM 网络 支持连接建立)。
    数据分组 传输之前 两端主机需要首先建立 虚拟(逻辑)连接 ,路径上的每个 网络设备(如路由器) 参与连接的建立。

    网络层连接与传输层连接的对比:

    • 网络层连接:两个 主机 之间(路径上的路由器等 网络设备参与
    • 传输层连接:两个 应用进程 之间(对中间网络设备 透明

# 网络服务模型

虚电路服务数据报服务 的对比:

对比的方面 虚电路网络(Virtual-circuit network) 数据报网络(Datagram network)
思路 可靠通信应当由 网络 来保证 可靠通信应当由 用户主机 来保证
连接的建立 连接服务 无连接服务
终点地址 仅在 连接建立阶段 使用,每个分组使用短的 虚电路号 每个分组都有终点的完整地址,即 IP地址
分组的转发(传输路径) 首先为系列分组的传输 确定从源到目的经过的路径 (建立连接),然后沿该路径(连接)传输系列分组,系列分组 传输路径相同 。传输结束后拆除连接。 不事先为系列分组的传输确定传输路径,每个分组 独立查找转发表 确定传输路径,不同分组可能传输路径不同。
节点出故障时 所有通过 出故障的节点 的虚电路均不能工作 出故障的节点可能会丢弃分组,一些路由可能会发生变化
分组的顺序 总是 按发送顺序 到达终点 到达终点的顺序 不一定按发送的顺序
端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责

# 路由器工作原理

# 路由器中各部分的功能

# 输入端口处理

基于目的地转发 (Destination-Based Forwarding)

# 交换 (Switching)

# 输出端口处理

# 何处出现排队

# 分组调度

现在让我们回到确定 排列的分组输出链路(outgoing link) 上传输的次序问题。当分组到达 链路输出队列 时,

  1. 如果链路当前正忙于传输另一个的分组,则该分组 排队等待 传输。
  2. 若路由器已经没有足够的缓存空间容纳该到达的分组,则队列的 分组丢弃策略 将决定是否 丢弃 (意味着丢失) 该分组,或者从队列中 移除其他分组 来为到达的分组腾出空间。

在接下来的讨论中,我们不考虑分组丢弃。当一个分组完全通过输出链路传输时,它将从队列中移除。

# 先进先出 (First-in-First-Out, FIFO)

  1. 先进先出 (FIFO) 也称为 先来先服务 (first-come-first-served, FCFS),它选择分组的次序与这些 分组到达 输出链路队列的 次序相同 。到达的分组加入到单一的等待队列的末尾,保持着次序,当分组到达队列的最前面时就接受服务。

    Untitled_1

  2. 如图所示,在先进先出的规则下,分组以和它们到达队列时 相同的次序 离开。

    Untitled_2

# 优先级排队 (Priority Queuing)

  1. 在优先级排队的规则下,到达输出链路的分组 到达队列时 将被分类为若干个 优先级类(priority classes) ,每个优先级类通常都有 自己的队列 ,如图所示。

    Untitled_3

    当选择一个分组进行传输时,优先级排队规则

    1. 从具有 非空队列最高优先级 的类中选择一个分组进行传输。
    2. 同一优先级类 中的分组之间的选择通常以 先进先出(FIFO) 的规则完成。

    在实践中,网络操作员 (network operator) 可以配置一个队列,以便让携带 网络管理信息 的分组相比 用户流量 拥有更高的优先级。此外,携带 实时的(real-time) VoIP (voice-over-IP) 分组相比 非实时(non-real-time) 的流量 (如携带 e-mail 的分组) 拥有更高的优先级。

  2. 如图所示,在分组 1 传输完成后,优先级较高的 分组 3 将先于 分组 2 传输,尽管分组 2 更早到达队列。在分组 2 传输过程中到达的 分组4 ,尽管它拥有更高的优先级,也只有在分组 2 传输完成后才能开始传输。

    Untitled_4

    非抢占式优先级排队 (non-preemptive priority queuing) 规则下,分组一旦开始传输就 不能被打断

# 轮询 (Round Robin) 和加权公平排队 (Weighted Fair Queuing, WFQ)

  1. 轮询排队 的规则下,分组如同优先级排队那样被分成 若干个类(classes) ,但是,类之间 并没有 严格的服务优先级,轮询调度程序在类之间 轮流提供服务 。一个 保持工作 的轮询排队规则,在寻找某个类的分组而发现其 队列为空 时,将立即检查轮询序列中的 下一个类 。最简单的拥有两个类的轮询规则如图所示。

    Untitled_5

    保持工作排队(work-conseving queuing) 规则将永远 不允许链路 在有 (任何类的) 分组排队等待传输时 保持空闲

  2. 路由器 中广泛应用的一种通用形式的 轮询排队 ,是所谓的 加权公平排队(Weighted Fair Queuing, WFQ)规则 ,如图所示。与轮询排队一样,WFQ 调度程序也是以 循环的方式 为各个类提供服务,同时它也使用 保持工作排队 的规则。

    Untitled_6

    WFQ 与轮询排队的不同之处在于,每个类在 任何时间间隔 内可能收到 不同数量的服务 。具体而言,对于一条传输速率为 RR 的链路,在分配有权 wiw_i 的类 ii 有分组要发送 的任何时间间隔中,第 ii 类总能获得至少为 Rwi/(wj)R \cdot w_{i} /\left(\sum w_{j}\right) 的吞吐量。(理想情况,没有考虑分组是离散的数据单元,以及分组的传输不能被打断)

# 网际协议 (Internet protocol, IP)

  • 到目前为止,我们在第 4 章中对网络层的研究:

    1. 网络层的数据平面控制平面组件的概念
    2. 转发和路由的区别
    3. 各种网络服务模型的识别
    4. 以及我们在路由器内部的观察,通常不涉及任何特定的 计算机网络架构协议
  • 在这一节中,我们将关注当今的 Internet 网络层 的关键方面和著名的 网际协议(IP) 。今天有两个版本的 IP 正在使用,

    • 广泛部署的 IPv4 (IP version 4)
    • 已经被提议替代 IPv4IPv6 (IP version 6)

# IPv4 数据报格式

Untitled_7

IPv4 数据报中的关键字段如下:

  • 版本号(Version number) :这 4 个比特指定了该数据报的 IP 协议版本 。通过查看版本号,路由器可以确定 如何解释 IP 数据报的剩余部分。

  • 首部长度(Header length) :因为 IPv4 数据报的首部可以包含 可变数量 的若干个 选项(options) ,所以这 4 个比特是必须的,用来确定 IP 数据报的 有效负载 (例如,封装在数据报中的传输层报文段) 实际上 从何处开始

    大多数 IP 数据报都不包含选项,所以典型的 IP 数据报有一个 20 字节 的报头。

  • 服务类型(Type of service)TOS 位 被包含在 IPv4 报头中,以使 不同类型的 IP 数据报 能够相互区分。例如,用于区分 实时数据报非实时的流量

    提供特定等级的服务是一种 策略 ,由该 路由器 的网络管理员决定和配置。

    • 我们之前学过,TOS 中的两个比特用于 ECN (显式拥塞通告)
  • 数据报长度(Datagram length) :整个数据报的长度 ( 首部 + 数据 ),用字节表示。

    由于这个字段占 16 比特,理论上 IP 数据报的最大长度是 65535 字节。

    • 然而数据报 很少超过 1500 字节 ,这使得 IP 数据报能够适应最大尺寸的 以太网帧 的有效荷载字段。
  • 标识(identifier)标志(flags)片偏移(fragmentation offset) :这三个字段用于 IP 分片 ,即由于 链路层帧 所能承载的最大数据量 最大传输单元(MTU) 的限制, 过大的IP数据报 将被分解为几个较小的 IP 数据报,然后各自独立地被转发到目的地,最后在负载的数据被传递到目的主机的传输层之前重组。有趣的是,新版本的 IP,即 IPv6 不允许分片。

  • 生存时间(Time-to-live) :TTL 字段用于确保数据报 不会永远在网络中 循环。每当一台路由器处理数据报时,该字段的值 减 1 。如果 TTL 字段达到 0 ,路由器必须丢弃该数据报。

    因此,TTL 可以视为 IP 数据报 在网络中可以通过的 路由器数 (或 跳步数 )。

  • 协议(Protocol) :该字段通常只在 IP 数据报到达其 最终目的地 时使用。该字段的值表示该 IP 数据报的数据部分应该传递到的特定 传输层协议

    注: IP数据报 中的 协议号 的作用类似于 传输层段 中的 端口号字段 的作用。协议号是将 网络层传输层 绑定在一起的胶水,而端口号是将 传输层应用层 绑定在一起的胶水。

    • 我们将在第 6 章中看到 链路层帧 也有一个特殊的字段,它将链路层绑定到网络层。
  • 首部校验和(Header checksum) :首部校验和用来帮助 路由器 检测接收到的 IP 数据报中的 比特错误 。计算方法是将首部中的 每 2 个字节 视为一个数字,并使用反码算术运算对这些数字 求和 ,这个 和的反码 (被称为 Internet checksum ) 最终存储在校验和字段中。注意,在 每台路由器 上必须 重新计算校验和 并再次存放到原处(逐跳计算、逐跳校验),因为 TTL 字段以及可能的选项字段将会改变。

    为什么 TCP/IP 在 传输层网络层 都执行差错检测?这种重复有几个原因。

    • 首先,注意到在 IP 层只对 IP首部 计算了校验和,而 TCP/UDP 校验和是对 整个TCP/UDP报文段 进行计算。
    • 其次,TCP/ UDP 和 IP 不 一定都属于相同的协议栈 。原则上,TCP 可以运行在不同的网络层协议上 (例如,ATM),而 IP 可以携带不会被传递到 TCP/UDP 的数据。
  • 源和目的IP地址 :当一个源创建一个数据报时,它将自己的 IP 地址插入到源 IP 地址字段中,将最终目的地址插入到目的 IP 地址字段中。通常源主机通过 DNS 查找 来确定目标地址。

  • 选项(options) :选项字段允许 IP 首部被 扩展 。首部选项这个名称意味着它 很少被使用 ,因此决定不包括可以让每个数据首部节省开销。然而,仅仅是选项的存在就使问题复杂化了。由于这样那样的原因,IP 选项不包括在 IPv6 首部中。

  • 数据(Data) :即数据负载 (payload),在 大多数情况 下,IP 数据报的数据字段包含要传送到目的地的 传输层报文段 (TCP 或 UDP)。但是,数据字段也可以携带其他类型的数据,例如 ICMP 消息

# IPv4 编址