以下为个人学习笔记和习题整理
课程:哈尔滨工业大学 计算机网络
https://www.bilibili.com/video/BV1Up411Z7hC?share_source=copy_web
# 概述
网络层服务:提供 主机到主机(host-to-host)
的通信服务。
- 发送主机:将
报文段(segment)
封装到数据报(datagram)
中。 - 接受主机:向
传输层
交付报文段(segment)
。 - 路由器:检验所有穿越它的 IP 数据报的
首部(header)
,决策如何处理
IP 数据报。
# 转发和路由
-
网络层可以分解为两个
相互作用
的部分:数据平面
和控制平面
。- 在第四章中,我们将首先介绍网络层的数据平面功能:
- 在第 5 章中,我们将讨论网络层的控制平面功能:
传统上,这些
控制平面路由协议
和数据平面转发功能
是在一个路由器
中一起整体实现的。软件定义网络(SDN)
通过将这些控制平面的功能
作为一个单独的服务
来显式地分离数据平面和控制平面,通常在一个远程控制器(controller)
中。
-
由上述讨论可知,网络层的核心功能:
- 转发 (forwarding):将分组从路由器的
输入端口
转移到合适的输出端口
。转发表
用于确定在本路由器如何转发分组。 - 路由 (routing):确定分组
从源到目的
经过的路径
。路由算法(协议)
用于确定通过网络的端到端路径
。 - 连接建立:某些网络的重要功能,并非所有网络均支持(如
ATM 网络
支持连接建立)。
数据分组传输之前
两端主机需要首先建立虚拟(逻辑)连接
,路径上的每个网络设备(如路由器)
参与连接的建立。
# 网络服务模型
虚电路服务
与 数据报服务
的对比:
对比的方面 | 虚电路网络(Virtual-circuit network) | 数据报网络(Datagram network) |
---|---|---|
思路 | 可靠通信应当由 网络 来保证 |
可靠通信应当由 用户主机 来保证 |
连接的建立 | 连接服务 |
无连接服务 |
终点地址 | 仅在 连接建立阶段 使用,每个分组使用短的 虚电路号 |
每个分组都有终点的完整地址,即 IP地址 |
分组的转发(传输路径) | 首先为系列分组的传输 确定从源到目的经过的路径 (建立连接),然后沿该路径(连接)传输系列分组,系列分组 传输路径相同 。传输结束后拆除连接。 |
不事先为系列分组的传输确定传输路径,每个分组 独立查找转发表 确定传输路径,不同分组可能传输路径不同。 |
节点出故障时 | 所有通过 出故障的节点 的虚电路均不能工作 |
出故障的节点可能会丢弃分组,一些路由可能会发生变化 |
分组的顺序 | 总是 按发送顺序 到达终点 |
到达终点的顺序 不一定按发送的顺序 |
端到端的差错处理和流量控制 | 可以由网络负责,也可以由用户主机负责 | 由用户主机负责 |
# 路由器工作原理
# 路由器中各部分的功能
# 输入端口处理
基于目的地转发 (Destination-Based Forwarding)
# 交换 (Switching)
# 输出端口处理
# 何处出现排队
# 分组调度
现在让我们回到确定 排列的分组
在 输出链路(outgoing link)
上传输的次序问题。当分组到达 链路输出队列
时,
- 如果链路当前正忙于传输另一个的分组,则该分组
排队等待
传输。 - 若路由器已经没有足够的缓存空间容纳该到达的分组,则队列的
分组丢弃策略
将决定是否丢弃
(意味着丢失) 该分组,或者从队列中移除其他分组
来为到达的分组腾出空间。
在接下来的讨论中,我们不考虑分组丢弃。当一个分组完全通过输出链路传输时,它将从队列中移除。
# 先进先出 (First-in-First-Out, FIFO)
-
先进先出 (FIFO) 也称为
先来先服务
(first-come-first-served, FCFS),它选择分组的次序与这些分组到达
输出链路队列的次序相同
。到达的分组加入到单一的等待队列的末尾,保持着次序,当分组到达队列的最前面时就接受服务。 -
如图所示,在先进先出的规则下,分组以和它们到达队列时
相同的次序
离开。
# 优先级排队 (Priority Queuing)
-
在优先级排队的规则下,到达输出链路的分组
到达队列时
将被分类为若干个优先级类(priority classes)
,每个优先级类通常都有自己的队列
,如图所示。当选择一个分组进行传输时,优先级排队规则
- 从具有
非空队列
的最高优先级
的类中选择一个分组进行传输。 同一优先级类
中的分组之间的选择通常以先进先出(FIFO)
的规则完成。
- 从具有
-
如图所示,在分组 1 传输完成后,优先级较高的
分组 3
将先于分组 2
传输,尽管分组 2 更早到达队列。在分组 2 传输过程中到达的分组4
,尽管它拥有更高的优先级,也只有在分组 2 传输完成后才能开始传输。
# 轮询 (Round Robin) 和加权公平排队 (Weighted Fair Queuing, WFQ)
-
在
轮询排队
的规则下,分组如同优先级排队那样被分成若干个类(classes)
,但是,类之间并没有
严格的服务优先级,轮询调度程序在类之间轮流提供服务
。一个保持工作
的轮询排队规则,在寻找某个类的分组而发现其队列为空
时,将立即检查轮询序列中的下一个类
。最简单的拥有两个类的轮询规则如图所示。 -
在
路由器
中广泛应用的一种通用形式的轮询排队
,是所谓的加权公平排队(Weighted Fair Queuing, WFQ)规则
,如图所示。与轮询排队一样,WFQ 调度程序也是以循环的方式
为各个类提供服务,同时它也使用保持工作排队
的规则。WFQ 与轮询排队的不同之处在于,每个类在
任何时间间隔
内可能收到不同数量的服务
。具体而言,对于一条传输速率为 的链路,在分配有权 的类有分组要发送
的任何时间间隔中,第 类总能获得至少为 的吞吐量。(理想情况,没有考虑分组是离散的数据单元,以及分组的传输不能被打断)
# 网际协议 (Internet protocol, IP)
-
到目前为止,我们在第 4 章中对网络层的研究:
- 网络层的数据平面和控制平面组件的概念
- 转发和路由的区别
- 各种网络服务模型的识别
- 以及我们在路由器内部的观察,通常不涉及任何特定的
计算机网络架构
或协议
。
-
在这一节中,我们将关注当今的
Internet 网络层
的关键方面和著名的网际协议(IP)
。今天有两个版本的 IP 正在使用,- 广泛部署的
IPv4 (IP version 4)
, - 已经被提议替代 IPv4 的
IPv6 (IP version 6)
。
- 广泛部署的
# IPv4 数据报格式
IPv4 数据报中的关键字段如下:
-
版本号(Version number)
:这 4 个比特指定了该数据报的IP 协议版本
。通过查看版本号,路由器可以确定如何解释
IP 数据报的剩余部分。 -
首部长度(Header length)
:因为 IPv4 数据报的首部可以包含可变数量
的若干个选项(options)
,所以这 4 个比特是必须的,用来确定 IP 数据报的有效负载
(例如,封装在数据报中的传输层报文段) 实际上从何处开始
。 -
服务类型(Type of service)
:TOS 位
被包含在 IPv4 报头中,以使不同类型的 IP 数据报
能够相互区分。例如,用于区分实时数据报
和非实时的流量
。 -
数据报长度(Datagram length)
:整个数据报的长度 ( 首部 + 数据 ),用字节表示。 -
标识(identifier)
、标志(flags)
和片偏移(fragmentation offset)
:这三个字段用于IP 分片
,即由于链路层帧
所能承载的最大数据量最大传输单元(MTU)
的限制,过大的IP数据报
将被分解为几个较小的 IP 数据报,然后各自独立地被转发到目的地,最后在负载的数据被传递到目的主机的传输层之前重组。有趣的是,新版本的 IP,即IPv6
不允许分片。 -
生存时间(Time-to-live)
:TTL 字段用于确保数据报不会永远在网络中
循环。每当一台路由器处理数据报时,该字段的值减 1
。如果 TTL 字段达到0
,路由器必须丢弃该数据报。 -
协议(Protocol)
:该字段通常只在 IP 数据报到达其最终目的地
时使用。该字段的值表示该 IP 数据报的数据部分应该传递到的特定传输层协议
。 -
首部校验和(Header checksum)
:首部校验和用来帮助路由器
检测接收到的 IP 数据报中的比特错误
。计算方法是将首部中的每 2 个字节
视为一个数字,并使用反码算术运算对这些数字求和
,这个和的反码
(被称为Internet checksum
) 最终存储在校验和字段中。注意,在每台路由器
上必须重新计算校验和
并再次存放到原处(逐跳计算、逐跳校验),因为 TTL 字段以及可能的选项字段将会改变。 -
源和目的IP地址
:当一个源创建一个数据报时,它将自己的 IP 地址插入到源 IP 地址字段中,将最终目的地址插入到目的 IP 地址字段中。通常源主机通过DNS 查找
来确定目标地址。 -
选项(options)
:选项字段允许 IP 首部被扩展
。首部选项这个名称意味着它很少被使用
,因此决定不包括可以让每个数据首部节省开销。然而,仅仅是选项的存在就使问题复杂化了。由于这样那样的原因,IP 选项不包括在IPv6
首部中。 -
数据(Data)
:即数据负载 (payload),在大多数情况
下,IP 数据报的数据字段包含要传送到目的地的传输层报文段
(TCP 或 UDP)。但是,数据字段也可以携带其他类型的数据,例如ICMP 消息
。