计算机网络
1.1 计算机网络在信息时代的作用
- 计算机网络已由一种通信基础设施发展成为一种重要的信息服务基础设施。
- 计算机网络已经像水、电、煤气这些基础设施一样,成为我们生活中不可或缺的一部分。
1.2 因特网概述
网络、互连网(互联网)和因特网
- 网络(Network)由若干**结点(Node)和连接这些结点的链路(Link)**组成。
- 多个网络还可以通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因此,互联网是“网络的网络(Network of Networks)”。
- 因特网(Internet)是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。
internet(互联网或互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。
Internet(因特网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用TCP/IP协议簇作为通信的规则,其前身是美国的ARPANET。
因特网发展的三个阶段
- 从单个网络ARPANET向互联网发展
- 1969年,第一个分组交换网ARPANET;
- 70年代中期,研究多种网络之间的互连;
- 1983年,TCP/IP协议成为ARPANET的标准协议(因特网诞生时间)
- 逐步建成三级结构的因特网
- 1985年,NSF围绕六个大型计算机中心建设NSFNET(主干网、地区网和校园网);
- 1990年,ARPANET任务完成,正式关闭;
- 1991年,美国政府将因特网主干网交给私人公司经营,并开始对接入因特网的单位收费;
- 逐步形成了多层次ISP结构的因特网
- 1993年,NSFNET逐渐被若干个商用因特网主干网替代;政府机构不再负责因特网运营,让各种因特网服务提供者ISP来运营。
- 1994年,万维网WWW技术促使因特网迅猛发展;
- 1995年,NSFNET停止运作,因特网彻底商业化。
因特网的组成
- 边缘部分
- 由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
- 核心部分
- 核心部分 由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
1.3 三种交换方式
电路交换
- 电话交换机接通电话线的方式称为电路交换;
- 从通信资源的分配角度来看,交换(Switching)就是按照某种方式动态地分配传输线路的资源;
- 电路交换的三个步骤:
- 建立连接(分配通信资源)
- 通话(一直占用通信资源)
- 释放连接(归还通信资源)
- 当使用电路交换来传送计算机数据时,其线路的传输效率往往很低。
分组交换
- 通常我们把表示消息的整块数据称为一个报文,在发送报文之前,先把较长的报文划分成为一个个更小的等长数据段。在每一个数据段前面,加上一些由必要的控制信息组成的首部后,就构成了一个分组,也可简称为“包”,相应地,首部也可叫作“包头”。
- 分组交换机收到一个分组后,先将分组暂时存储下来,再检查其首部,按照首部中的目的地址进行查表转发,找到合适的转发接口,通过该接口将分组转发给下一个分组交换机。各分组经过途中各分组交换机的存储转发,最终达到目标主机。
- 目标主机收到这些分组后,去掉它们的首部,将各数据段组合还原出原始报文。
电路交换、报文交换、分组交换的对比

电路交换
优点 缺点 通信时延小 建立连接时间长 有序传输 线路独占,使用效率低 没有冲突 灵活性差 适用范围广 难以规范化 实时性强 控制简单 报文交换
优点 缺点 无需建立连接 引起了转发时延 动态分配线路 需要较大存储缓存空间 提高线路可靠性 需要传输额外的信息量 提高线路利用率 提供多目标服务 分组交换
优点 缺点 无需建立连接 引起了转发时延 线路利用率高 需要传输额外的信息量 简化了存储管理 对于数据报服务,存在失序、丢失或重复分组的问题;对于虚电路服务,存在呼叫建立、数据传输和虚电路释放三个过程 加速传输 减少出错概率和重发数据量
1.4 计算机网络的定义和分类
计算机网络的定义
- 计算机网络的精确定义并未统一
- 计算机网络的最简单的定义是:一些互相连接的、自治的计算机的集合。
- 互连 是指计算机之间可以通过有线或无线的方式进行数据通信;
- 自治 是指独立的计算机,它有自己的硬件和软件,可以单独运行使用;
- 集合 是指至少需要两台计算机;
- 计算机网络的较好的定义是:计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。
计算机网络的分类
| 分类方式 | |
|---|---|
| 按交换技术分类 | 电路交换网络、报文交换网络、分组交换网络 |
| 按使用者分类 | 公用网、专用网 |
| 按传输介质分类 | 有线网络、无线网络 |
| 按覆盖范围分类 | 广域网WAN、城域网MAN、局域网LAN、个域网PAN |
| 按覆盖范围分类 | 总线型网络、星型网络、环型网络、网状型网络 |
1.5 计算机网络的性能指标
速率
- 计算机中数据量的单位,也是信息论中信息量的单位。一个比特就是二进制数字中的一个1或0。
- 常用数据量单位:
$8 bit = 1 Byte$
$KB = 2^{10} B$
$MB = K·KB = 2^{10}·2^{10} B = 2^{20} B$
$GB = K·MB = 2^{10}·2^{20} B = 2^{30} B$
$TB = K·GB = 2^{10}·2^{30} B = 2^{40} B$
- 连接在计算机网络上的主机在数字信道上传送比特的速率,也称为比特率或数据率。
- 常用数据率单位:
bit/s (b/s, bps)
$k b/s = 10^3 b/s$ (bps)
$M b/s = k \cdot k b/s = 10^3 \cdot 10^3 b/s = 10^6 b/s$ (bps)
$G b/s = k \cdot M b/s = 10^3 \cdot 10^6 b/s = 10^9 b/s$ (bps)
$T b/s = k \cdot G b/s = 10^3 \cdot 10^9 b/s = 10^{12} b/s$ (bps)
带宽
- 用来表示网络的通信线路所能传送数据的能力,因此网络带宽表示在单位时间内从网络中的某一点到另一点所能通过的“最高数据率”;
- 单位:b/s(kb/s, Mb/s, Gb/s, Tb/s)和速率相同
吞吐量
- 吞吐量表示在单位时间内通过某个网络(或信道、接口)的数据量。
- 吞吐量被经常用于对现实世界中的网络的一种测量,以便知道实际上到底有多少数据量能够通过网络。
- 吞吐量受网络的带宽或额定速率的限制。
时延

时延带宽积
- $时延带宽积 = 传播时延 \times 带宽 $
- 若发送端连续发送数据,则在所发送的第一个比特即将到达终点时,发送端就已经发送了时延带宽积$B \cdot W$个比特;
- 链路的时延带宽积又称为以比特为单位的链路长度。
往返时间
- 在许多情况下,因特网上的信息不仅仅单方向传输,而是双向交互;
- 我们有时很需要知道双向交互一次所需的时间;因此,往返时间RTT(Round-Trip Time)也是一个重要的性能指标。
利用率
- 信道利用率:用来表示某信道有百分之几的时间是被利用的(有数据通过)。
- 网络利用率:全网络的信道利用率的加权平均。
- 根据排队论,当某信道的利用率增大时,该信道引起的时延也会迅速增加; 因此,信道利用率并非越高越好;
- 如果令$D_0$表示网络空闲时的时延,$D$表示网络当前的时延,那么在适当的假定条件下,可以用下面的简单公式来表示$D$、$D_0$和利用率$U$之间的关系: $D = \frac{D_0}{1 - U}$
- 当网络的利用率达到50%时,时延就要加倍;
- 当网络的利用率超过50%时,时延急剧增大;
- 当网络的利用率接近100%时,时延就趋于无穷大。
- 因此,一些拥有较大主干网的ISP通常会控制它的信道利用率不超过50%。如果超过了,就要准备扩容,增大线路的带宽。
- 也不能使信道利用率太低,这会使宝贵的通信资源输白白浪费。应该使用一些机制,可以根据情况动态调整输入到网络中的通信量,使网络利用率保持在一个合理的范围内。
丢包率
- 丢包率即分组丢失率,是指在一定的时间范围内,传输过程中丢失的分组数量与总分组数量的比率。
- 丢包率具体可分为接口丢包率、结点丢包率、链路丢包率、路径丢包率、网络丢包率等。
- 丢包率是网络运维人员非常关心的一个网络性能指标,但对于普通用户来说往往并不关心这个指标,因为他们通常意识不到网络丢包。
- 分组丢失主要有两种情况:
- 分组在传输过程中出现误码,被结点丢弃;
- 分组到达一台队列已满的分组交换机时被丢弃;在通信量较大时就可能造成网络拥塞。
- 因此,丢包率反映了网络的拥塞情况:
- 无拥塞时路径丢包率为0
- 轻度拥塞时路径丢包率为1%~4%
- 严重拥塞时路径丢包率为5%~15%
1.6 计算机网络体系结构
常见的计算机网络体系结构
- 原理参考模型,从下到上以此为:物理层、数据链路层、网络层、运输层、应用层

分层的必要性
| 应用层 | 解决通过应用进程的交互来实现特定网络应用的问题 |
| 运输层 | 解决进程之间基于网络的通信问题 |
| 网络层 | 解决数据包在多个网络之间传输和路由的问题 |
| 数据链路层 | 解决数据包在一个网络或一段链路上传输的问题 |
| 物理层 | 解决使用何种信号来表示比特0和1的问题 |
分层思想举例

专用术语
- 实体
- 实体是指任何可发送或接收信息的硬件或软件进程。
- 对等实体是指通信双方相同层次中的实体。
- 协议
- 协议是控制两个对等实体在“水平方向”进行“逻辑通信”的规则的集合。
- 协议的三要素:
- 语法 定义所交换信息的格式
- 语义 定义通信双方所要完成的操作
- 同步 定义通信双方的时序关系
- 服务
- 在协议的控制下,两个对等实体在水平方向的逻辑通信使得本层能够向上一层提供服务。
- 要实现本层协议,还需要使用下面一层所提供的服务。
- 协议是“水平”的,而服务是“垂直”的。
- 实体看得见下层提供的服务,但并不知道实现该服务的具体协议。下层的协议对上层的实体是“透明”的。
- 在同一系统中相邻两层的实体交换信息的逻辑接口称为服务访问点SAP,它被用于区分不同的服务类型。
- 帧的“类型”字段、IP数据报的“协议”字段,TCP报文段或UDP用户数据报的“端口号”字段都是SAP。
- 上层要使用下层所提供的服务,必须通过与下层交换一些命令,这些命令称为服务原语。
- 对等层次之间传送的数据包称为该层的协议数据单元(Protocol Data Unit,PDU)。
- 同一系统内层与层之间交换的数据包称为服务数据单元(Service Data Unit,SDU)。
- 在协议的控制下,两个对等实体在水平方向的逻辑通信使得本层能够向上一层提供服务。
2.1 物理层概述
物理层要实现的功能
- 数据链路层“看不见”(也无需看见)物理层究竟使用的是什么方法来传输比特流。数据链路层**只管“享受”**物理层提供的比特流传输服务即可。
- 物理层之间“透明”传输比特流。
物理层接口特性
- 机械特性
- 形状和尺寸
- 引脚数目和排列
- 固定和锁定装置
- 电气特性
- 信号电压的范围
- 阻抗匹配的情况
- 传输速率
- 距离限制
- 功能特性
- 规定接口电缆的各条信号线的作用
- 过程特性
- 规定在信号线上传输比特流的一组操作过程,包括各信号间的时序关系
2.2 传输媒体
- 传输媒体是计算机网络设备之间的物理通路,也称为传输介质或传输媒介。
- 传输媒体并不包含在计算机网络体系结构中。
- 导向型传输媒体(固体媒体)
- 同轴电缆
- 双绞线
- 光纤
- 非导向型传输媒体(自由空间)
- 无线电波
- 微波
- 红外线
- 大气激光
- 可见光
2.3 传输方式
串行运输和并行运输

同步传输和异步传输


单向通信、双向交替通信和双向同时通信

2.4 编码与调制
基本概念
- 基带调制(编码)
- 以太网采用的曼彻斯特编码、4B/5B、8B/10B
- 数字基带信号 -> 数字信道
- 带通调制
- Wi-Fi采用的CCK/DSSS/OFDM调制
- 数字基带信号 -> 模拟信道
- 码元
- 在使用时间域的波形表示信号时,代表不同离散数值的基本波形称为码元。
常用编码方式
- 双极性不归零编码
- 编码效率高,但存在同步问题
- 双极性归零编码
- 自同步,但编码效率低
- 曼彻斯特编码
- 自同步,10Mb/s传统以太网
- 码元中间时刻的电平跳变既表示时钟信号,也表示数据。正跳变表示1还是0,负跳变表示0还是1,可以自行定义。
- 差分曼彻斯特编码
- 码元中间时刻的电平跳变仅表示时钟信号,而不表示数据。 数据的表示在于每一个码元开始处是否有电平跳变:无跳变表示1,有跳变表示0。
差分曼彻斯特编码对比曼彻斯特编码
- 在传输大量连续1或连续0的情况下,差分曼彻斯特编码信号比曼彻斯特编码信号的变化少。
- 在噪声干扰环境下,检测有无跳变比检测跳变方向更不容易出错,因此差分曼彻斯特编码信号比曼彻斯特编码信号更易于检测。
- 在传输介质接线错误导致高低电平翻转的情况下,差分曼彻斯特编码仍然有效。

带通调制方法和混合调制方法

2.5 信道的极限容量
造成信号失真的主要因素
传输速率越高,信号经过传输后的失真就越严重。
传输距离越远,信号经过传输后的失真就越严重。
噪声干扰越大,信号经过传输后的失真就越严重。
传输媒体质量越差,信号经过传输后的失真就越严重。
信道上传输的数字信号,可以看做是多个频率的模拟信号进行多次叠加后形成的方波。
如果数字信号中的高频分量在传输时受到衰减甚至不能通过信道,则接收端接收到的波形前沿和后沿就变得不那么陡峭,每一个码元所占的时间界限也不再明确。这样,在接收端接收到的信号波形就失去了码元之间的清晰界限,这种现象称为码间串扰。
如果信道的频带越宽,则能够通过的信号的高频分量就越多,那么码元的传输速率就可以更高,而不会导致码间串扰。
然而,信道的频率带宽是有上限的,不可能无限大。因此,码元的传输速率也有上限。
奈氏准则
理想低通信道的最高码元传输速率 = $2W Baud=2W(码元/秒)=2Wlog_2X(比特/秒)$
W:信道的频率带宽(单位为Hz) Baud:波特,即码元/秒
- 使用奈氏准则给出的公式,就可以根据信道的频率带宽,计算出信道的最高码元传输速率。
- 只要码元传输速率不超过根据奈氏准则计算出的上限,就可以避免码间串扰。
- 奈氏准则给出的是理想低通信道的最高码元传输速率,它和实际信道有较大的差别。因此,一个实际的信道所能传输的最高码元传输速率,要明显低于奈氏准则给出的上限值。
- 码元传输速率又称为波特率、调制速率、波形速率或符号速率。
- 波特率与比特率有一定的关系:
- 当1个码元只携带1比特的信息量时,波特率(码元/秒)与比特率(比特/秒)在数值上是相等的。
- 当1个码元携带n比特的信息量时,波特率(码元/秒)转换成比特率(比特/秒)时,数值要乘以n。

香农公式
带宽受限且有高斯白噪声干扰的信道的极限信息传输速率
$$ C=Wlog_2(1+\frac{S}{N})(b/s) $$C:信道的极限信息传输速率(单位为b/s)
W:信道的频率带宽(单位为Hz)
S:信道内所传信号的平均功率
N:信道内的高斯噪声功率
S/N:信噪比,常用分贝(dB)表示
信噪比(dB)=$10log_{10}(\frac{S}{N})(dB)$
- 信道的频率带宽W或信道中的信噪比S/N越大,信道的极限信息传输速率C就越高。
- 实际信道不可能无限制地提高频率带宽W或信道中的信噪比S/N。
- 实际信道中能够达到的信息传输速率,要比香农公式给出的极限传输速率低不少。这是因为在实际信道中,信号还要受到其他一些损伤,例如各种脉冲干扰和信号衰减等,这些因素在香农公式中并未考虑。


2.6 信道复用技术
基本原理
- 复用(Multiplexing)就是在一条传输媒体上同时传输多路用户的信号。
- 当一条传输媒体的传输容量大于多条信道传输的总容量时,就可以通过复用技术,在这条传输媒体上建立多条通信信道,以便充分利用传输媒体的带宽。
- 尽管实现信道复用会增加通信成本(需要复用器、分用器以及费用较高的大容量共享信道),但如果复用的信道数量较大,还是比较划算的。
常见技术
- 频分复用 FDM
- 所有用户同时占用不同的频带资源并行通信
- 时分复用 TDM
- 所有用户在不同的时间占用同样的频带
- 波分复用 WDM
- 根据频分复用的设计思想,可在一根光纤上同时传输多个频率(波长)相近的光载波信号,实现基于光纤的频分复用技术。
- 目前可以在一根光纤上复用80路或更多路的光载波信号。因此,这种复用技术也称为密集波分复用DWDM。
- 码分复用 CDM
- 如果有两个或多个站同时发送数据,则信道中的信号就是这些站各自所发送一系列码片序列或码片序列反码的叠加。为了从信道中分离出每个站的信号,给每个站指派码片序列时,必须遵循以下规则:
- 分配给每个站的码片序列必须各不相同,实际常采用伪随机码序列。
- 分配给每个站的码片序列必须相互正交,即各码片序列相应的码片向量之间的规格化内积为0。
- 令向量A表示站A的码片向量,向量B表示站B的码片向量。两个不同站A和B的码片序列相互正交,就是向量A与向量B的规格化内积为0,如下式所示。 $A\cdot B=\frac{1}{m}A_iB_i=0$
- 假设知道各手机的码片序列,给手机A发送比特1,给手机B发送比特0,各手机用自己的码片向量与收到的叠加后的码片向量,做规格化内积运算:
- $(A + \overline{B}) \cdot A = A \cdot A + A \cdot \overline{B} = 1 + 0 = 1$ 运算结果为1,表明收到的是比特1
- $(A + \overline{B}) \cdot B = A \cdot B + \overline{B} \cdot B = 0 + (-1) = -1$ 运算结果为-1,表明收到的是比特0
- $(A + \overline{B}) \cdot C = A \cdot C + \overline{B} \cdot C = 0 + 0 = 0$ 运算结果为0,表明没有收到信息
- 如果有两个或多个站同时发送数据,则信道中的信号就是这些站各自所发送一系列码片序列或码片序列反码的叠加。为了从信道中分离出每个站的信号,给每个站指派码片序列时,必须遵循以下规则:

3.1 数据链路层概述
在网络体系中的地位

链路、数据链路和帧
- 链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
- 数据链路(Data Link)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
- 计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
- 帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。

3.2 数据链路层的三个重要问题
封装成帧和透明传输
- 数据链路层给上层交付下来的协议数据单元PDU添加帧首部和帧尾部,这称为封装成帧。
- 如果能够采取措施,使得数据链路层对上层交付的PDU的内容没有任何限制,就好像数据链路层不存在一样,就称其为透明传输。
差错检测
- 帧在传输的过程中可能出现误码。
- 接收方根据发送方添加在帧尾部中的检错码,可以检测出帧是否出现了误码。
可靠传输
- 不可靠传输服务:收到有误码的帧,直接丢弃,其他什么也不做;未收到发送方发送的帧,也不进行任何处理。
- 可靠传输服务:实现发送方发送什么,接收方最终都能正确收到。
3.2.1 封装成帧和透明传输
封装成帧
封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。
帧的首部和尾部中有包含一些重要的控制信息。
帧首部和尾部的作用之一就是帧定界。
但帧首部和尾部不一定有帧定界标志。
为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。
考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(Maximum Transfer Unit,MTU)。例如,以太网的MTU为1500个字节。
透明传输
- 透明传输是指数据链路层对上层交付的PDU的内容没有任何限制,就好像数据链路层不存在一样。
- 如果传输的内容中有和定界符完全一样的内容,那么就会误判帧结束,但是如果限制了内容,就不是透明传输。
- 面向字节的物理链路使用字节填充的方法实现透明传输。即在把帧交给物理层之前,要在和定界符相同的内容前加入转义字符,或者在和转义字符相同的内容前加入转义字符
- 面向比特的物理链路使用比特填充的方法实现透明传输。即在内容中连续遇到5个1时,在后面加0(因为01111110就是帧定界符了)


3.2.2 差错检测
误码
实际的通信链路都不是理想的,受到噪声干扰、传输媒体质量等因素影响,比特在传输过程中可能会产生差错(称为比特差错):
- 比特1可能变成比特0
- 比特0可能变成比特1
在一段时间内,传输错误的比特数量占所传输比特总数的比率称为误码率(Bit Error Rate, BER)。
提高链路的信噪比,可以降低误码率。但在实际的通信链路上,不可能使误码率下降为零。
奇偶校验
- 奇校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为奇数。
- 偶校验是在待发送的数据后面添加1个校验位,使得添加该校验位后的整个数据中比特1的个数为偶数。
- 如果在数据位产生了1位误码,1的个数的奇偶性发生改变,可检出错误。校验位同理。但是若数据位和校验位各出现1位误码,那么1个数的奇偶性不变,检验不到错误
循环冗余校验
- 数据链路层广泛使用漏检率极低的循环冗余校验(Cyclic Redundancy Check,CRC)检错技术。
生成多项式
$$ G(X) = X^4 + X^2 + X + 1= \boxed{1} \cdot X^4 + \boxed{0} \cdot X^3 + \boxed{1} \cdot X^2 + \boxed{1} \cdot X^1 + \boxed{1} \cdot X^0 $$生成多项式各项系数构成的比特串:10111(计算冗余码时作为除数)
生成多项式必须包含最低此项,即"1"
CRC操作
- 发送方CRC操作


- 接收方CRC操作


总结
奇偶校验、循环冗余校验等差错检测技术,只能检测出传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
要想纠正传输中的差错,可以使用冗余信息更多的纠错码(例如海明码)进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
在计算机网络中,通常采用后续课程中将要介绍的检错重传方式来纠正传输中的差错,或者仅仅丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。
循环冗余校验CRC具有很好的检错能力(漏检率极低),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
3.2.3 可靠传输
可靠传输的相关概念
- 可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么
- 传输差错包括:分组重复、分组失序、分组丢失和误码(比特差错)。其中分组重复、分组失序、分组丢失出现在数据链路层的上层,误码出现在数据链路层的下层
- 可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输。
- 可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。

停止-等待 (SW) 协议
实现原理
- 发送方发送DATA,接收方的差错检测若检测无误码,则接受并发送确认分组ACK。
- 发送方发送DATA,接收方的差错检测若检测有误码,则丢弃并发送否认分组NAK。那么然后发送方要重传之前有误码的数据分组,再去经过接收方的差错检测。
- 发送方发送DATA,若是传输中途丢失,接收方就不会返回分组,发送方需要设置超时重传时间RTO,而且要略大于收发双方的平均往返时间RTT。然后进行重新传输。
- 在数据链路层,点对点的往返时间 RTT 比较固定,RTO 就比较好设定。
- 在运输层,由于端到端往返时间非常不确定,设置合适的超时重传时间 RTO 有时并不容易。
- 接收方发送ACK,若是传输中途丢失,结合上一条,发送方就会超时重传,但这样接收方就重复接收了同一个DATA。为解决该问题,引入数据分组编号,分组编号即0和1,DATA就该叫做DATA0/1。接收方丢弃重复的数据分组,再发送一个确认分组。
- 更复杂的情况会出现ACK被发送方重复接收,同理需要给ACK分组编号。

停止-等待协议属于自动请求重传(Automatic Repeat reQuest, ARQ)协议。 即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。
信道利用率

说明:
- $T_D$:发送方发送数据分组所耗费的发送时延。
- $RTT$:收发双方之间的往返时间。
- $T_A$:接收方发送确认分组所耗费的发送时延。
由于确认分组的长度通常远小于数据分组的长度,即 $T_A \ll T_D$,公式可以简化为:
$$ U \approx \frac{T_D}{T_D + RTT} $$简化后的利用率主要受 $RTT$ 与 $T_D$ 比例关系的影响:
- 当 $RTT \gg T_D$ 时:
- 结果:信道利用率 $U$ 很低。
- 典型案例:卫星链路(由于距离极远,往返时延很大)。
- 当 $RTT \ll T_D$ 时:
- 结果:信道利用率 $U$ 比较高。
- 典型案例:无线局域网(往返时间远小于数据发送时间)。

回退N帧 (GBN) 协议

- 在使用流水线传输方式时,发送方不能无限制地连续发送数据分组,否则可能会导致网络中的路由器或接收方来不及处理这些数据分组,进而导致数据分组的丢失,这实际上是对网络资源的浪费。因此,必须采取措施来限制发送方连续发送数据分组的数量。
- 回退N帧协议采用流水线传输方式,并且利用发送窗口来限制发送方连续发送数据分组的数量,这属于连续ARQ协议。
发送方
- 发送窗口 $W_T$ 的取值范围是 $1 < W_T \leq (2^n - 1)$,其中,$n$ 是构成分组序号的比特数量。
- 如果 $W_T = 1$:变成了停止-等待协议。
- 如果 $W_T > (2^n - 1)$:接收方无法分辨新旧数据分组。
- 可在未收到接收方确认分组的情况下,将序号落入发送窗口内的多个数据分组全部发送出去。
- 只有收到对已发送数据分组的确认分组时,发送窗口才能向前滑动到相应位置。
- 收到多个重复确认时,可在重传计时器超时前尽早开始重传,由具体实现决定(即确定收到几个重复确认进行重传)。
- 发送窗口内某个已发送的数据分组产生超时重传时,发送窗口内该数据分组的后续已发送的数据分组也必须全部重传,这就是回退N帧 (Go-back-N, GBN) 协议名称的由来。

接收方
- 接收窗口 $W_R = 1$ 的,因此只能按序接收数据分组。
- 只接收序号落入接收窗口内且无误码的数据分组,并且将接收窗口向前滑动一个位置,与此同时给发送方发送相应的确认分组。
- 为了减少开销,接收方不必每收到一个按序到达且无误码的数据分组就给发送方发送一个相应的确认分组。
- 可以在连续收到多个按序到达且无误码的数据分组后(数量由具体实现决定),才针对最后一个数据分组发送确认分组,这称为累积确认。
- 或者可以在自己有数据分组要发送时才对之前按序接收且无误码的数据分组进行捎带确认。
- 接收方收到未按序到达的数据分组后,除丢弃外,还可对之前最后一个按序到达的数据分组进行重复确认,以便发送方尽快重传。

选择重传协议
用 $n (n > 1)$ 个比特给分组编号,发送窗口 $W_T$ 与接收窗口 $W_R$ 的关系如下:
$$ \begin{cases} 1 < W_R \leq W_T \\ W_T + W_R \leq 2^n \end{cases} \implies 1 < W_R \leq 2^{(n-1)} $$- 当 $W_R$ 取最大值 $2^{(n-1)}$ 时,$W_T$ 能取到的最大值也为 $2^{(n-1)}$。
- $W_R$ 超过 $W_T$ 没有意义
- 确保接收窗口向前滑动后,落入接收窗口内的新序号与之前的旧序号没有重叠,避免无法分辨新旧数据分组。
发送方
- 可在未收到接收方确认分组的情况下,将序号落入发送窗口内的多个数据分组全部发送出去。
- 只有按序收到对已发送数据分组的确认分组时,发送窗口才能向前滑动到相应位置。
- 如果收到未按序到达的确认分组,应对其进行记录,以防止其相应数据分组的超时重发,但发送窗口不能向前滑动。
接收方
- 可接收未按序到达但没有误码并且序号落入接收窗口内的数据分组。
- 为了使发送方仅重传出现差错的分组,接收方不再采用累积确认,而需要对每一个正确接收的数据分组进行逐一确认。
- 只有在按序接收数据分组后,接收窗口才能向前滑动到相应位置。
3.3 点对点协议 (PPP)
概述
- 点对点协议(Point-to-Point Protocol, PPP)是目前使用最广泛的点对点数据链路层协议。
- 点对点协议PPP主要有两种应用:
- 用户到 ISP 的连接:例如通过拨号或 ADSL 接入互联网。
- 路由器之间的点对点链路:用于连接核心网络中的两个节点。
- 从网络体系结构的角度看点对点协议 PPP 的组成
- 一套网络控制协议 NCPs
- 一个网络层 PDU 封装到串行链路的方法
- 一个链路控制协议 LCP
帧格式

- 标志(Flag)字段:PPP帧的定界符,取值为 0x7E。
- 地址(Address)字段:取值为 0xFF,预留(目前没有什么作用)。
- 控制(Control)字段:取值为 0x03,预留(目前没有什么作用)。
- 协议(Protocol)字段:其值用来指明帧的数据载荷应向上交付给哪个协议处理。
- 帧检验序列(Frame Check Sequence, FCS)字段:其值是使用循环冗余校验CRC计算出的检错码。
透明传输
面向字节的异步链路

发送方的处理:
- 将数据载荷中出现的每一个 0x7E 减去 0x20(相当于异或 0x20),然后在其前面插入转义字符 0x7D。
- 若数据载荷中原来就含有 0x7D,则把每一个 0x7D 减去 0x20,然后在其前面插入转义字符 0x7D。
- 将数据载荷中出现的每一个 ASCII 码控制字符(即数值小于 0x20 的字符),加上 0x20(相当于异或 0x20,将其转换成非控制字符),然后在其前面插入转义字符 0x7D。
接收方的处理:
- 进行与发送方相反的变换,就可以正确地恢复出未经字节填充的原始数据载荷。
面向比特的同步链路

发送方的处理:
- 对帧的数据载荷进行扫描(一般由硬件完成),每出现 5 个连续的比特 1,则在其后填充一个比特 0。
接收方的处理:
- 对帧的数据载荷进行扫描,每出现 5 个连续的比特 1 时,就把其后的一个比特 0 删除。
差错检测

- 帧检验序列FCS字段:其值是使用循环冗余校验CRC计算出的检错码。
- CRC采用的生成多项式为:
工作状态
以用户主机拨号接入因特网服务提供者ISP的拨号服务器的过程为例

3.4 共享式以太网
| 年份 | 里程碑事件 | 关键细节 |
|---|---|---|
| 1975年 | 以太网诞生 | Robert Metcalfe (1946-),美国Xerox公司,速率 2.94Mb/s |
| 1976年 | 以太网里程碑论文 | Robert Metcalfe 与助手 David Boggs 发表论文《以太网:局域计算机网络的分布式包交换技术》 |
| 1979年 | 3Com公司成立 | Robert Metcalfe 离开 Xerox 成立 3Com;游说 DEC、Intel 和 Xerox 共同将以太网标准化 |
| 1980年 | 以太网标准V1 | DIX Ethernet V1,速率 10Mb/s |
| 1982年 | 以太网标准V2 | DIX Ethernet V2:第一个局域网产品的标准,被大量使用 |
| 1983年 | IEEE 以太网标准 | IEEE 802.3 以太网标准:对 DIX Ethernet V2 的帧格式做了很小的改动,当时没有被广泛使用 |
- 以太网目前已经从传统的共享式以太网发展到交换式以太网,传输速率已经大幅提高。
3.4.1 网络适配器和MAC地址
网络适配器
- 要将计算机连接到以太网,需要使用相应的网络适配器(Adapter),网络适配器一般简称为“网卡”。
- 在计算机内部,网卡与CPU之间的通信,一般是通过计算机主板上的I/O总线以并行传输方式进行的。
- 网卡与外部以太网(局域网)之间的通信,一般是通过传输媒体(同轴电缆、双绞线电缆、光纤)以串行方式进行的。
- 网卡除要实现物理层和数据链路层功能,其另外一个重要功能就是要进行并行传输和串行传输的转换。由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。
- 在确保网卡硬件正确的情况下,为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。

MAC地址
- 在点对点信道,数据链路层不需要使用地址。而在广播信道,数据链路层必须使用地址来区分各主机。
- MAC地址一般被固化在网卡的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址,有时被称为物理地址(和物理层无关,属于数据链路层范畴)
- MAC地址是对网络上各接口的唯一标识,而不是各设备的唯一标识。
地址格式

其中第 1 字节的 b1 位:G/L (Global/Local)
- $G/L = 0$:全球管理
- $G/L = 1$:本地管理
第 1 字节的 b0 位:I/G (Individual/Group)
- $I/G = 0$:单播地址
- $I/G = 1$:多播地址
| 第 1 字节 b1 位 | 第 1 字节 b0 位 | MAC 地址类型 | 地址占比 |
|---|---|---|---|
| 0 | 0 | 全球单播(由厂商生产网络设备时固化在设备中) | 1/4 |
| 0 | 1 | 全球多播(交换机、路由器等标准网络设备所支持的多播地址) | 1/4 |
| 1 | 0 | 本地单播(由网络管理员分配,优先级高于网络接口的全球单播地址) | 1/4 |
| 1 | 1 | 本地多播(可由用户对网卡编程实现,以表明其属于哪些多播组) | 1/4 |
- 其字节发送顺序是从第1字节开始,到第6字节。字节内的比特发送顺序是从b0到b7。
网卡对无误码帧的处理
网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的 MAC 地址,按以下情况处理:
- 如果目的 MAC 地址是广播地址(FF-FF-FF-FF-FF-FF),则接受该帧。
- 如果目的 MAC 地址与网卡上固化的全球单播 MAC 地址相同,则接受该帧。
- 如果目的 MAC 地址是网卡支持的多播地址,则接受该帧。
- 除上述 (1)、(2) 和 (3) 情况外,丢弃该帧。
网卡还可被设置为一种特殊的工作方式:混杂方式。工作在混杂方式的网卡,只要收到共享媒体上传来的帧就会收下,而不管帧的目的 MAC 地址是什么。
- 用途: 对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施。
- 工具示例: 嗅探器 (Sniffer) 就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络。
- 风险提示: 混杂方式就像一把“双刃剑”,黑客常利用这种方式非法获取网络用户的口令。
3.4.2 以太网在共享信道下的运作机制
CSMA/CD协议
- 在以太网的发展初期,人们普遍认为“无源的电缆线比有源器件可靠”,因此将多个站点连接在一条总线上来构建共享总线以太网。
- 共享总线以太网具有天然的广播特性,即使总线上某个站点给另一个站点发送单播帧,表示帧的信号也会沿着总线传播到总线上的其他各站点。
- 当某个站点在总线上发送帧时,总线资源会被该站点独占。此时,如果总线上的其他站点也要在总线上发送帧,就会产生信号碰撞。
- 当两个或多个站点同时使用总线发送帧时,就会产生信号碰撞。
- 为了解决各站点争用总线的问题,共享总线以太网使用了一种专用协议 CSMA/CD,它是载波监听多址接入/碰撞检测 (Carrier Sense Multiple Access/Collision Detection) 的英文缩写词。
协议组成
多址接入 MA:
- 多个站点连接在一条总线上,竞争使用总线。
载波监听 CS:
- 每个站点在发送帧之前,先要检测一下总线上是否有其他站点在发送帧(“先听后说”):
- 若检测到总线空闲 96 比特时间(发送 96 比特所耗费的时间,也称为帧间最小间隔),则发送这个帧;
- 若检测到总线忙,则继续检测并等待总线转为空闲 96 比特时间,然后发送这个帧。
碰撞检测 CD:
- 每个正在发送帧的站点边发送边检测碰撞(“边说边听”):
- 一旦发现总线上出现碰撞,立即停止发送,退避一段随机时间后再次从载波监听开始进行发送(“一旦冲突,立即停说,等待时机,重新再说”)。
协议局限
- 载波监听检测到总线空闲,但总线并不一定空闲。
- 使用CSMA/CD协议的共享总线以太网上的各站点,只是尽量避免碰撞并在出现碰撞时做出退避后重发的处理,但不能完全避免碰撞。
- 在使用CSMA/CD协议时,由于正在发送帧的站点必须“边发送帧边检测碰撞”,因此站点不可能同时进行发送和接收,也就是不可能进行全双工通信,而只能进行半双工通信(双向交替通信)。
共享式以太网的争用期

站点从发送帧开始,最多经过时长 $2\tau$(即 $\delta \to 0$)就可检测出所发送的帧是否遭遇了碰撞。
因此,共享总线以太网的端到端往返时间 $2\tau$ 被称为争用期(Contention Period)或碰撞窗口(Collision Window),它是一个非常重要的参数。
- 站点从发送帧开始,经过争用期 $2\tau$ 这段时间还没有检测到碰撞,就可以肯定这次发送不会产生碰撞。
从争用期的概念可以看出,共享总线以太网上的每一个站点从发送帧开始,到之后的一小段时间内,都有可能遭遇碰撞,而这一小段时间的长短是不确定的,它取决于另一个发送帧的站点与本站点的距离,但不会超过总线的端到端往返传播时延,即一个争用期 $2\tau$。
- 很显然,总线的长度越长(单程端到端传播时延越大),网络中站点数量越多,发生碰撞的概率就越大。
- 因此,共享以太网的总线长度不能太长,接入的站点数量也不能太多。
10Mb/s 共享总线以太网参数规定:争用期 $2\tau$ 的值为 512 比特的发送时间,即 $51.2\mu s$。也称为512 比特时间:这是传统以太网的一个基石参数。 由于 $10Mb/s$ 下 512 比特等于 64 字节,这也就是以太网最短帧长为 64 字节的物理由来:为了确保在发送完 64 字节之前,信号一定能完成一个来回(争用期),从而检测出是否发生了碰撞。
$$ 2\tau = \frac{512\ b}{10\ Mb/s} = \frac{512\ b}{10 \times 10^6\ b/s} = 51.2\mu s $$除考虑了信号传播时延外,还考虑到网络中可能存在转发器所带来的时延以及产生碰撞时继续发送 32 比特或 48 比特人为干扰信号所持续的时间等。
假设信号的传播速率为:$2 \times 10^8\ m/s$
则总线长度为:$2 \times 10^8\ m/s \times 25.6\mu s = 5120m$

共享式以太网的最小/最大帧长
最小帧长
为了确保共享总线以太网上的每一个站点在发送完一个完整的帧之前,能够检测出是否产生了碰撞,帧的发送时延就不能少于共享总线以太网端到端的往返时间,即一个争用期 $2\tau$。
$$ \frac{帧长度 (bit)}{发送速率 (b/s)} \ge 2\tau $$对于 $10Mb/s$ 的共享总线以太网,其争用期 $2\tau$ 的值规定为 $51.2\mu s$,因此其最小帧长为 $512b$,即 $64B$。
$$ 10Mb/s \times 51.2\mu s = 512b = 64B $$- 当某个站点在发送帧时,如果帧的前 $64B$ 没有遭遇碰撞,那么帧的后续部分也就不会遭遇碰撞。也就是说,如果遭遇碰撞,就一定是在帧的前 $64B$ 之内。
- 由于发送帧的站点边发送帧边检测碰撞,一旦检测到碰撞就立即中止帧的发送,此时已发送的数据量一定小于 $64B$。因此,接收站点收到长度小于 $64B$ 的帧,就可判定这是一个遭遇了碰撞而异常中止的无效帧,将其丢弃即可。

最大帧长
- 一般来说,帧的数据载荷的长度应远大于帧首部和尾部的总长度,这样可以提高帧的传输效率。
- 然而,如果不限制数据载荷的长度上限,就可能使得帧的长度太长,这会带来一些问题。

- 以太网V2的MAC帧,最大长度为1518B。其中数据载荷最大为1500B,最小为46B。其它的部分:目的地址、源地址、类型和FCS共占了18B
退避算法
$$ \text{退避时间} = \text{基本退避时间(争用期 } 2\tau\text{)} \times \text{随机数 } r $$- 随机数 $r$ 的取值规则:$r$ 从离散的整数集合 $\{0, 1, \dots, (2^k - 1)\}$ 中随机选出一个数。
- 参数 $k$ 的定义:$k = \min[\text{重传次数}, 10]$。
| 重传次数 | k | 离散整数集合 {0,1,…,(2k−1)} | 可能的退避时间 |
|---|---|---|---|
| 1 | 1 | $\{0, 1\}$ | $0 \times 2\tau, 1 \times 2\tau$ |
| 2 | 2 | $\{0, 1, 2, 3\}$ | $0 \times 2\tau, 1 \times 2\tau, 2 \times 2\tau, 3 \times 2\tau$ |
| 12 | 10 | $\{0, 1, 2, 3, 4, 5, \dots, 1023\}$ | $0 \times 2\tau, 1 \times 2\tau, 2 \times 2\tau, \dots, 1023 \times 2\tau$ |
- 如果连续多次发生碰撞,表明可能有较多的站点参与竞争信道。使用上述退避算法可使重传需要推迟的平均时间随重传次数而增大(即动态退避),从而减小产生碰撞的概率。
- 当重传达 16次仍不能成功时,表明同时打算发送帧的站点太多,以至于连续产生碰撞。此时应放弃重传并向高层报告。
信道利用率

- 参数 $a$ 的定义:$a = \frac{\tau}{T_0}$
- 参数 $a$ 的值应尽量小,以提高信道利用率。
- $\tau \downarrow$(分子减小):共享总线以太网端到端的距离不应太长。
- $T_0 \uparrow$(分母增大)**:**帧的长度应尽量大。
3.4.3 使用集线器的共享式以太网
若总线上的某个机械连接点接触不良或断开,则整个网络通信就不稳定或彻底断网。
在使用细同轴电缆的共享总线以太网之后,以太网发展出来了一种使用大规模集成电路来替代总线、并且可靠性非常高的设备,叫做集线器 (Hub)。
站点连接到集线器的传输媒体也转而使用更便宜、更灵活的双绞线电缆。
- 补充:双绞线电缆两端为 RJ-45 插头,连接至集线器的 RJ-45 插座。
集线器的一些主要特点如下:
- 使用集线器的以太网虽然物理拓扑是星型的,但在逻辑上仍然是一个总线网。总线上的各站点共享总线资源,使用的还是 CSMA/CD 协议。
- 集线器只工作在物理层。它的每个接口仅简单地转发比特,并不进行碰撞检测。碰撞检测的任务由各站点中的网卡负责。
- 集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个站点的网卡出现了故障而不停地发送帧,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网能正常工作。
“传统总线型以太网”向“集线器星型以太网”的异同点:
- 物理拓扑不相同
- 但工作逻辑相同
- 网络中的各站点都使用
- CSMA/CD协议来共享
- (争用)网络资源
10BASE-T
BASE:采用基带信号进行传输,10:传输速率为 10Mb/s,T:采用双绞线作为传输媒体
IEEE于1990年制定了10BASE-T星型以太网的标准802.3i,这种以太网是局域网发展史上的一座非常重要的里程碑,它为以太网在局域网中的统治地位奠定了牢固的基础。
10BASE-T以太网的通信距离较短,每个站点到集线器的距离不能超过100m。
IEEE 802.3以太网还可使用光纤作为传输媒体,相应的标准为10BASE-F,“F”表示光纤。光纤主要用作集线器之间的远程连接。
3.4.4 在物理层扩展以太网
扩展站点与集线器之间的距离
共享总线以太网中两站点之间的距离不能太远,否则它们之间所传输的信号就会衰减到使CSMA/CD协议无法正常工作。
在早期广泛使用粗同轴电缆或细同轴电缆共享总线以太网时,为了提高网络的地理覆盖范围,常用的是工作在物理层的转发器。
IEEE 802.3标准规定,两个网段可用一个转发器连接起来,任意两个站点之间最多可以经过三个网段。
随着使用双绞线和集线器的10BASE-T星型以太网成为以太网的主流类型,扩展网络覆盖范围就很少使用转发器了。10BASE-T星型以太网中每个站点到集线器的距离不能超过100m,因此两站点间的通信距离最大不能超过200m。
在10BASE-T星型以太网中,可使用光纤和一对光纤调制解调器来扩展站点与集线器之间的距离。
- 这种扩展方法比较简单,所需付出的代价是:为站点和集线器各增加一个用于电信号和光信号转换的光纤调制解调器,以及它们之间的一对通信光纤。
信号在光纤中的衰减和失真很小,因此使用这种方法可以很简单地将站点与集线器之间的距离扩展到1000m以上。
扩展共享式以太网的覆盖范围和站点数量
- 以太网集线器一般具有8~32个接口,如果要连接的站点数量超过了单个集线器能够提供的接口数量,就需要使用多个集线器,这样就可以连接成覆盖更大范围、连接更多站点的多级星型以太网。
- 采用多个集线器连接而成的多级星型以太网,在扩展了网络覆盖范围和站点数量的同时,也带来了一些负面因素。
- 在物理层扩展的共享式以太网仍然是一个碰撞域,不能连接太多的站点,否则可能会出现大量的碰撞,导致平均吞吐量太低。
3.4.5 在数据链路层扩展以太网
网桥的基本工作原理
- 网桥 (bridge) 工作在数据链路层 (包含其下的物理层),因此网桥具备属于数据链路层范畴的相关能力。
- 网桥可以识别帧的结构。
- 网桥可以根据帧首部中的目的MAC地址和网桥自身的帧转发表来转发或丢弃所收到的帧。

透明网桥的自学习和转发帧的流程
透明网桥 (Transparent Bridge) 通过自学习算法建立转发表。
透明网桥中的“透明”,是指以太网中的各站点并不知道自己所发送的帧将会经过哪些网桥的转发,最终到达目的站点。也就是说,以太网中的各网桥对于各站点而言是看不见的。
透明网桥的标准是IEEE 802.1D,它通过一种自学习算法基于以太网中各站点间的相互通信逐步建立起自己的转发表。
- 网桥收到帧后进行登记(即自学习),登记的内容为帧的源MAC地址和进入网桥的接口号。
- 网桥根据帧的目的MAC地址和网桥的转发表对帧进行转发,包含以下三种情况:
- 明确转发:网桥知道应当从哪个接口转发帧。
- 盲目转发:网桥不知道应当从哪个接口转发帧,只能将其通过除进入网桥的接口外的其他所有接口转发。
- 丢弃:网桥知道不应该转发该帧,将其丢弃。
- 需注意:
- 如果网桥收到有误码的帧则直接丢弃。
- 如果网桥收到一个无误码的广播帧,则不用进行查表,而是直接从除接收该广播帧的接口的其他接口转发该广播帧。
- 转发表中的每条记录都有其有效时间,到期自动删除!这是因为各站点的MAC地址与网桥接口的对应关系并不是永久性的,例如某个站点更换了网卡,其MAC地址就会改变。
透明网桥的生成树协议STP
为了提高以太网的可靠性,有时需要在两个以太网之间使用多个透明网桥来提供冗余链路。
在增加冗余链路提高以太网可靠性的同时,却给网络引入了环路。
网络中的广播帧将在环路中永久兜圈,造成广播帧充斥整个网络,网络资源被白白浪费,而网络中的主机之间无法正常通信!
为了避免广播帧在环路中永久兜圈,透明网桥使用生成树协议(Spanning Tree Protocol, STP),可以在增加冗余链路提高网络可靠性的同时,又避免环路带来的问题。
- 不管网桥之间连接成了怎样复杂的带环拓扑,网桥之间通过交互网桥协议单元(Bridge Protocol Data Unit, BPDU),找出原网络拓扑的一个连通子集(即生成树),在这个子集里整个连通的网络中不存在环路。
- 当首次连接网桥或网络拓扑发生变化时(人为改变或出现故障),网桥都会重新构造生成树,以确保网络的连通。
3.5 交换式以太网
- 网桥的接口数量很少,通常只有2~4个,一般只用来连接不同的网段。
- 1990年面世的交换式集线器(Switching Hub),实质上是具有多个接口的网桥,常称为以太网交换机(Switch)或二层交换机。
- “二层”是指以太网交换机工作在数据链路层(包括物理层)。
- 与网桥相同,交换机内部的转发表也是通过自学习算法,基于网络中各主机间的通信,自动地逐步建立起来的。
- 另外,交换机也使用生成树协议STP,来产生能够连通全网但不产生环路的通信路径。
- 仅使用交换机(而不使用集线器)的以太网就是交换式以太网。
3.5.1 以太网交换机
- 以太网交换机(以下简称交换机)本质上就是一个多接口的网桥:
- 交换机自学习和转发帧的流程与网桥是相同的。
- 另外,交换机也使用生成树协议STP,来产生能够连通全网但不产生环路的通信路径。
- 交换机的每个接口可以连接计算机,也可以连接集线器或另一个交换机。
- 当交换机的接口与计算机或交换机连接时,可以工作在全双工方式,并能在自身内部同时连通多对接口,使每一对相互通信的计算机都能像独占传输媒体那样,无碰撞地传输数据,这样就不需要使用CSMA/CD协议了。
- 当交换机的接口连接的是集线器时,该接口就只能使用CSMA/CD协议并只能工作在半双工方式。
- 现在的交换机和计算机中的网卡都能自动识别上述两种情况,并自动切换到相应的工作方式。

| 主机间的通信 | 交换机1的操作 | 交换机2的操作 |
|---|---|---|
| A $\rightarrow$ B | 登记 转发(盲目) | 登记 转发(盲目) |
| H $\rightarrow$ A | 登记 转发(明确) | 登记 转发(明确) |
| E $\rightarrow$ X | 登记 转发(盲目) | 登记 转发(盲目) |
| X $\rightarrow$ E | 登记 丢弃 | 收不到 |

- 交换机一般都具有多种速率的接口,例如10Mb/s、100Mb/s、1Gb/s甚至10Gb/s的接口,大部分接口支持多速率自适应。
- 一般的交换机都采用“存储转发”方式,为了减小交换机的转发时延,某些交换机采用了直通(Cut-Through)交换方式。
- 采用直通交换方式的交换机,在接收帧的同时就立即按帧的目的MAC地址决定该帧的转发接口,然后通过其内部基于硬件的交叉矩阵进行转发,而不必把整个帧先缓存后再进行处理。
- 直通交换的时延非常小。
- 直通交换不检查差错就直接将帧转发出去,有可能会将一些无效帧转发给其他主机。

3.5.2 对比共享式以太网与交换式以太网
- 交换机能识别帧的信息,因此信息传输通过交换机本身过滤,可以精准转发。而集线器只工作在物理层,只能全部转发,然后由终端来过滤。对于广播帧也是同理。
- 交换机的域中不会出现碰撞现象,交换机能自己存储转发信息。
- 通过集线器连接,既扩大了广播域也扩大了碰撞域。通过交换机连接,只扩大广播域而不扩大碰撞域,碰撞域仍保持独立。通过路由器连接,广播域和碰撞域都保持独立。
3.6 以太网的MAC帧格式

3.7 虚拟局域网 VLAN
3.7.1 虚拟局域网概述
背景
- 将多个站点通过一个或多个以太网交换机连接起来就构建出了交换式以太网。
- 交换式以太网中的所有站点都属于同一个广播域。
- 随着交换式以太网规模的扩大,广播域也相应扩大。巨大的广播域会带来一系列问题。
- 广播风暴 广播风暴会浪费网络资源和各主机的CPU资源
- 难以管理和维护,带来潜在的安全问题。
- 网络中会频繁出现广播信息
- TCP/IP协议栈中的很多协议都会使用广播(例如地址解析协议ARP,路由信息协议RIPv1,动态主机配置协议DHCP)
- NetBEUI:Windows下使用的广播型协议
- IPX/SPX:Novell网络的协议栈
- Apple Talk:Apple公司的网络协议栈
概述
- 虚拟局域网(Virtual Local Area Network,VLAN)是一种将局域网内的站点划分成与物理位置无关的逻辑组的技术,一个逻辑组就是一个VLAN,VLAN中的各站点具有某些共同的应用需求。
- 属于同一VLAN的站点之间可以直接进行通信,而不同VLAN中的站点之间不能直接通信。
- 网络管理员可对局域网中的各交换机进行配置来建立多个逻辑上独立的VLAN。
- 连接在同一交换机上的多个站点可以属于不同的VLAN,而属于同一VLAN的多个站点可以连接在不同的交换机上。
- 虚拟局域网VLAN并不是一种新型网络,它只是局域网能够提供给用户的一种服务。
3.7.2 虚拟局域网实现机制
虚拟局域网VLAN有多种实现技术,最常见的就是基于以太网交换机的接口来实现VLAN。这就需要以太网交换机能够实现以下两个功能:
能够处理带有VLAN标记的帧,也就是IEEE 802.1Q帧。
交换机的各接口可以支持不同的接口类型,不同接口类型的接口对帧的处理方式有所不同。
IEEE 802.1Q帧
- IEEE 802.1Q帧也称为Dot One Q帧,它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4字节的VLAN标签(tag)字段。

- 标签协议标识符TPID:长度为16比特,其值固定为0x8100,表示该帧是IEEE 802.1Q帧。
- 优先级PRI:长度为3比特,取值范围是0~7,值越大优先级越高。当网络阻塞时,设备优先发送优先级高的802.1Q帧。
- 规范格式指示符CFI:长度为1比特,取值为0表示MAC地址以规范格式封装,取值为1表示MAC地址以非规范格式封装。对于以太网,CFI的取值为0。
- 虚拟局域网标识符VID:长度为12比特,取值范围是0~4095,其中0和4095保留不使用。
- VID是802.1Q帧所属VLAN的编号,设备利用VID来识别帧所属的VLAN。
- 广播帧只在同一VLAN内转发,这样就把广播域限制在了一个VLAN内。
- 802.1Q帧一般不由用户主机处理,而是由以太网交换机来处理:
- 当交换机收到普通的以太网MAC帧时,会给其插入4字节的VLAN标签使之成为802.1Q帧,该处理简称为“打标签”。
- 当交换机转发802.1Q帧时,可能会删除其4字节的VLAN标签使之成为普通的以太网MAC帧,该处理简称为“去标签”。交换机转发802.1Q帧时也有可能不进行“去标签”处理,是否进行“去标签”处理取决于交换机的接口类型。
交换机接口类型
Access 接口
- Access接口一般用于连接用户计算机,由于其只能属于一个VLAN,因此Access接口的PVID值与其所属VLAN的ID相同,其默认值为1。
- 接收处理 一般只接受“未打标签”的普通以太网MAC帧,根据接收帧的接口的PVID给帧“打标签”,即插入4字节的VLAN标签字段,VLAN标签字段中的VID取值就是接口的PVID值。
- 转发处理 若帧中的VID值与接口的PVID值相等,则给帧“去标签”后再进行转发,否则不转发帧。因此,从Access接口转发出的帧,是不带VLAN标签的普通以太网MAC帧。
Truck 接口
- Trunk接口一般用于交换机之间的互连。Trunk接口可以属于多个VLAN,即Trunk接口可以通过属于不同VLAN的帧。Trunk接口的默认PVID值为1,一般不建议用户修改,若互连的Trunk接口的PVID值不相等,则可能出现转发错误。
- 接收处理 既可以接收“未打标签”的普通以太网MAC帧,也可以接收“已打标签”的802.1Q帧。若接收到普通以太网MAC帧时,根据接收帧的接口的PVID给帧“打标签”,这与Access接口的处理相同。
- 转发处理 对于帧的VID值等于接口的PVID值的802.1Q帧,将其“去标签”转发;对于帧的VID值不等于接口的PVID值802.1Q帧,将其直接转发。因此,从Trunk接口转发出的帧,可能是普通以太网MAC帧,也可能是802.1Q帧。
3.8 以太网的发展

- 都使用IEEE 802.3的帧格式
- 都遵守IEEE 802.3的最小帧长和最大帧长的规定
- 10吉比特以太网(10GE)和40/100吉比特以太网(40GE/100GE)只工作在全双工方式而不存在争用媒体的问题,因此不需要使用CSMA/CD协议,这样传输距离就不再受碰撞检测的限制。
- 都有多种不同的物理层标准,10吉比特以太网(10GE)和40/100吉比特以太网(40GE/100GE)还增加了支持城域网和广域网的物理层标准。
4.1 网络层概述
分组转发和路由选择
- 网络层的主要任务就是将分组从源主机经过多个网络和多段链路传输到目的主机,可以将该任务划分为分组转发和路由选择两种重要的功能。

网络层向其上层提供的两种服务
| 对比方面 | 虚电路服务 | 数据报服务 |
|---|---|---|
| 核心思想 | 可靠通信应当由网络自身来保证 | 可靠通信应当由用户主机来保证 |
| 连接 | 必须建立网络层连接 | 不需要建立网络层连接 |
| 目的地址 | 仅在连接建立阶段使用,之后每个分组使用短的虚电路号 | 每个分组都必须携带完整的目的地址 |
| 分组转发 | 属于同一条虚电路的分组均按同一路由进行转发 | 每个分组可走不同的路由 |
| 节点故障 | 所有通过出故障的节点的虚电路均不能工作 | 出故障的节点可能会丢失分组,一些路由可能会发生变化 |
| 分组顺序 | 总是按发送顺序到达目的主机 | 到达目的主机时不一定按发送顺序 |
| 服务质量 | 可以将通信资源提前分配给每一个虚电路,因此容易实现 | 很难实现 |
4.2 网际协议 IP
- 网际协议(Internet Protocol, IP)是TCP/IP体系结构网际层中的核心协议。
- 网际协议IP、传输控制协议TCP、TCP/IP体系结构是由“因特网之父”Robert Kahn和Vint Cerf二人共同研发的,1974年5月发布了TCP/IP第一个版本。
4.2.1 异构网络互连
网络的拓扑、性能以及所使用的网络协议都不尽相同,这是由用户需求的多样性造成的,没有一种单一的网络能够适应所有用户的需求。
要将众多的异构型网络都互连起来,并且能够互相通信,则会面临许多需要解决的问题。
- 不同的网络接入机制
- 不同的差错恢复方法
- 不同的路由选择技术
- 不同的寻址方案
- 不同的最大分组长度
- 不同的服务(面向连接服务和无连接服务)
当IP网上的主机进行通信时,就好像在一个单个网络上通信一样,它们看不见互连的各网络的具体异构细节。
网络层都使用相同的IP协议,即所有接入互联网的设备都支持IP协议。
4.2.2 IPv4地址及其编址方法
概述
IPv4地址是给因特网(Internet)上的每一个主机(或路由器)的每一个接口分配的一个在全世界范围内唯一的32比特的标识符。
IPv4地址由因特网名字和数字分配机构(Internet Corporation for Assigned Names and Numbers, ICANN)进行分配。
- 我国用户可向亚太网络信息中心(Asia Pacific Network Information Center, APNIC)申请IP地址,需要缴纳相应的费用,一般不接受个人申请。
- 2011年2月3日,因特网号码分配管理局(Internet Assigned Numbers Authority, IANA)(由ICANN行使职能)宣布,IPv4地址已经分配完毕。
- 我国在2014至2015年也逐步停止了向新用户和应用分配IPv4地址,同时全面开展商用部署IPv6。
IPv4地址的编址方法经历了三个历史阶段:分类编址->划分子网->无分类编址,无分类编址消除了分类编址和划分子网的概念。
表示方法
- 由于IPv4地址由32比特构成,不方便阅读、记录以及输入等,因此IPv4地址采用点分十进制表示方法以方便用户使用。

分类编址
- 32比特的IPv4地址由网络号和主机号组成:
| 网络号 | 主机号 |
|---|---|
| ● 标志主机(或路由器)的接口所连接到的网络 | ● 标志主机(或路由器)的接口 |
| ● 同一个网络中,不同主机(或路由器)的接口的IPv4地址的网络号必须相同,表示它们属于同一个网络。 | ● 同一个网络中,不同主机(或路由器)的接口的IPv4地址的主机号必须各不相同,以便区分各主机(或路由器)的接口。 |
A类、B类和C类地址都是单播地址,只有单播地址可以分配给网络中的主机(或路由器)的各接口。
主机号为“全0”的地址是网络地址,不能分配给主机(或路由器)的各接口。
主机号为“全1”的地址是广播地址,不能分配给主机(或路由器)的各接口。
各类地址详情
- A类网络数量的$-2$是因为要去掉最小网络号$0$表示"本网络",最大网络号$127$作为本地环回测试地址。两者都不能指派。
- 地址数量的$-2$是因为要去掉主机号全$0$的网络地址和全$1$的广播地址
| 网络类别 | 最小可指派网络号 | 最大可指派网络号 | 可指派网络数量 | 每个网络中最大可分配地址数量 | 不能指派的网络号 | 占总地址空间 |
|---|---|---|---|---|---|---|
| A | 1 | 126 | 126 ($2^{8-1}-2$) | 16777214 ($2^{24}-2$) | 0和127 | 50% ($2^{32-1}/2^{32}$) |
| B | 128.0 | 191.255 | 16384 ($2^{16-2}$) | 65534 ($2^{16}-2$) | 无 | 25% ($2^{32-2}/2^{32}$) |
| C | 192.0.0 | 223.255.255 | 2097152 ($2^{24}-3$) | 254 ($2^{8}-2$) | 无 | 12.5% ($2^{32-3}/2^{32}$) |
| 网络类别 | 作用 | 第一个地址 | 最后 一个地址 | 地址数量 | 占总地址空间 |
|---|---|---|---|---|---|
| D | 多播地址 | 224.0.0.0 | 239.255.255.255 | 268435456 ($2^{28}$) | 6.25% ($2^{32-4}/2^{32}$) |
| E | 保留 | 240.0.0.0 | 255.255.255.255 | 268435456 ($2^{28}$) | 6.25% ($2^{32-4}/2^{32}$) |

一般不使用的特殊IPv4地址
| 网络号 | 主机号 | IP地址 | 作为源地址 | 作为目的地址 | 表示的意思 |
|---|---|---|---|---|---|
| 0 | 0 | 0.0.0.0 | 可以 | 不可以 | 在本网络上的本主机(例如,DHCP协议) |
| 0 | host-id | 0.host-id | 可以 | 不可以 | 在本网络上的某台主机host-id |
| 全1 | 全1 | 255.255.255.255 | 不可以 | 可以 | 只在本网络上进行广播(各路由器均不转发) |
| net-id | 全1 | A类:net-id.255.255.255 B类:net-id.255.255 C类:net-id.255 | 不可以 | 可以 | 对网络net-id上的所有主机进行广播 |
| 127 | 非全0或全1的任何数 | 127.0.0.1~127.255.255.254 | 可以 | 可以 | 用于本地软件环回测试 |


划分子网
随着更多的中小网络加入因特网,IPv4分类编址方法不够灵活、容易造成大量IPv4地址资源浪费的缺点就暴露出来了。
为新增网络申请新的网络号存在以下弊端:
- 需要等待时间和花费更多的费用
- 会增加其他路由器中路由条目的数量
- 浪费原有网络号中剩余的大量地址
子网掩码
子网掩码可以表明分类IPv4地址的主机号部分被借用了几个比特作为子网号。
与IPv4地址类似,子网掩码也是由32比特构成的。
- 用左起多个连续的比特1对应IPv4地址中的网络号和子网号;
- 之后的多个连续的比特0对应IPv4地址中的主机号。
将划分子网的IPv4地址与相应的子网掩码进行逐比特的逻辑与运算,就可得到该IPv4地址所在子网的网络地址。
给定一个分类的IPv4地址和其相应的子网掩码,就可得出子网划分的细节:
- 划分出的子网数量
- 每个子网可分配的地址数量
- 每个子网的网络地址和广播地址
- 每个子网可分配的最小地址和最大地址
默认子网掩码是指在未划分子网的情况下使用的子网掩码。
- A类:255.0.0.0
- B类:255.255.0.0
- C类:255.255.255.0


无分类编址
无分类编址结构是包含网络前缀和主机号的两级结构
网络前缀是不定长的,仅从IPv4地址自身是无法确定其网络前缀和主机号的,需要配合使用32比特的地址掩码。
无分类编址方法使用的地址掩码与划分子网使用的子网掩码类似,由32比特构成。
- 用左起多个连续的比持1对应IPv4地址中的网络前缀;
- 之后的多个连续的比特0对应IPv4地址中的主机号。
为了简便起见,可以不明确给出配套的地址掩码的点分十进制形式,而是在无分类编址的IPv4地址后面加上斜线“/”,在斜线之后写上网络前缀所占的比特数量(也就是地址掩码中左起连续比特1的数量),这种记法称为斜线记法。
- 比如$128.14.35.7/20$ 代表网络前缀是20比特,主机号是12比特
CIDR
实际上,无分类域间路由选择CIDR是将网络前缀都相同的、连续的多个无分类IPv4地址,组成一个CIDR地址块,只要知道CIDR地址块中的任何一个地址,就可以知道该地址块的以下全部细节:
- 地址块中的最小地址
- 地址块中的最大地址
- 地址块中的地址数量
- 地址块中聚合某类网络(A类、B类、C类)的数量
- 地址掩码
使用CIDR的一个好处是,可以根据客户的需要分配适当大小的CIDR地址块,因此可以更加有效地分配IPv4的地址空间。

路由聚合
使用CIDR的另一个好处是路由聚合(也称为构造超网)。

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


【2021年 题35】现将一个IP网络划分为3个子网,若其中一个子网是192.168.9.128/26,则下列网络中。不可能是另外两个子网之一的是( ) A. 192.168.9.0/25 B. 192.168.9.0/26 C. 192.168.9.192/26 D. 192.168.9.192/27
题干子网的192.168.9.128/26,即主机号用6位来表示,代表地址范围为192.168.9.128~192.168.9.192。
A选项的192.168.9.0/25代表地址范围为192.168.9.0
192.168.9.128,然后和C选项的192.168.9.192/26代表的192.168.9.192192.168.9.255,加上题干,这三者可以聚合成地址块192.168.9.0/24。D选项的192.168.9.192/27代表地址范围为192.168.9.192~192.168.9.223,加上题干,再结合一个192.168.9.224/27,这三者就可聚合成地址块192.168.9.128/25。
那么按照同样的逻辑,选项B的CIDR和题干结合,可见中间缺少64个地址,但是这三者合成是192.168.9.0~192.168.9.191,这聚合不成一个完整的网络,需要再引入第四个CIDR,和题干要求的三个不符,故答案是B。
4.2.3 IPv4地址的应用规划
- IPv4地址的应用规划是指将给定的IPv4地址块(或分类网络)划分成若干个更小的地址块(或子网),并将这些地址块(或子网)分配给互联网中的不同网络,进而可以给各网络中的主机和路由器的接口分配IPv4地址。
| 定长的子网掩码 (Fixed Length Subnet Mask, FLSM) | 变长的子网掩码 (Variable Length Subnet Mask, VLSM) |
|---|---|
| ● 所划分出的每一个子网都使用同一个子网掩码。 | ● 所划分出的每一个子网可以使用不同的子网掩码。 |
| ● 子网划分方式不灵活:只能划分出 $2^n$ 个子网(n是从主机号借用的、用来作为子网号的比特数量)。 | ● 子网划分方式灵活:可以按需分配。 |
| ● 每个子网所分配的IP地址数量相同,容易造成地址资源的浪费。 | ● 每个子网所分配的IP地址数量可以不同,尽可能减少对地址资源的浪费。 |
使用定长子网掩码划分子网
【举例】假设申请到的C类网络为218.75.230.0,使用定长的子网掩码给下图所示的小型互联网中的各设备分配IPv4地址。
应用需求:网络1需要IP地址数量为9,网络2需要IP地址数量为28,网络3需要IP地址数量为15,网络4需要IP地址数量为13,网络5需要IP地址数量为4。
申请到的C类网络地址 218.75.230 . 0 从主机号借用3比特作为子网号 子网数量:$2^3 = 8$(满足应用需求) 每个子网上的地址数量:$2^{8-3} = 32$(满足应用需求)
子网掩码 255.255.255 . 224 (下图的子网掩码是错误的) 24个连续的比特1对应网络号
3个连续的比特1表示从主机号借用3个比特作为子网号

使用变长子网掩码划分子网
【举例】假设申请到的C类网络为218.75.230.0/24,使用变长的子网掩码给下图所示的小型互联网中的各设备分配IPv4地址。
应用需求:从地址块218.75.230.0/24中取出5个地址块:/30, /28, /28, /28, /27, 按需分配给图中的5个网络。
在地址块中选取子块的原则
每个子块的起点位置不能随便选取,只能选取主机号部分是块大小整数倍的地址作为起点。
建议先为大的子块选取。


4.2.4 IPv4地址与MAC地址
IPv4地址与MAC地址的封装位置

数据报传送过程中IPv4地址与MAC地址的变化情况
- 在数据包的传送过程中,数据包的源IP地址和目的IP地址保持不变。
- 在数据包的传送过程中,数据包的源MAC地址和目的MAC地址逐链路(或网络)改变。

IPv4地址与MAC地址的关系
- 如果仅使用MAC地址进行通信,则会出现以下主要问题:
- 因特网中的每台路由器的路由表中就必须记录因特网上所有主机和路由器各接口的MAC地址。
- 手工给各路由器配置路由表几乎是不可能完成的任务,即使使用路由协议让路由器通过相互交换路由信息来自动构建路由表,也会因为路由信息需要包含海量的MAC地址信息而严重占用通信资源。
- 包含海量MAC地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。
- 因特网的网际层使用IP地址进行寻址,就可使因特网中各路由器的路由表中的路由记录的数量大大减少,因为只需记录部分网络的网络地址,而不是记录每个网络中各通信设备的各接口的MAC地址。
- 路由器收到IP数据报后,根据其首部中的目的IP地址的网络号部分,基于自己的路由表进行查表转发。
- 查表转发的结果可以指明IP数据报的下一跳路由器的IP地址,但无法指明该IP地址所对应的MAC地址。因此,在数据链路层封装该IP数据报成为帧时,帧首部中的目的MAC地址字段就无法填写,该问题需要使用网际层中的地址解析协议ARP来解决。
4.2.5 地址解析协议ARP
IP地址要经地址解析协议ARP转化成MAC地址
例如有一个由A, B, C三台主机通过交换机组成的网络,A要向B发送一个分组
- A知道B的IP地址,但不知道B的MAC地址,即主机A的ARP高速缓存表没有记录,那么A的数据链路层封装MAC帧时,无法填写目的MAC地址。
- 主机A发送ARP请求报文,目的地址是广播地址,内容有主机B的IP地址。交换机通过所有端口将请求报文转发出去。主机收到该广播帧后,交付上层处理。
- 主机B再发送ARP响应报文,是单播报文,目的MAC地址为主机A的MAC地址,内容记录了主机B的MAC地址。主机A收到后,将其IP地址和MAC地址对应填到ARP高速缓存表中。
转发表中的MAC地址与交换机接口号的对应关系记录也要周期性删除,因为这种对应关系并不是永久不变的。

- ARP 协议的相关注意事项:
- 由于 ARP 协议的主要用途是从网际层使用的 IP 地址解析出在数据链路层使用的 MAC 地址。因此,有的教材将 ARP 协议划归在 网际层,而有的教材将 ARP 协议划归在 数据链路层。这两种做法都是可以的。
- 除了本节课介绍的 ARP 请求报文和响应报文,ARP 协议还有其他类型的报文,例如用于检查 IP 地址冲突的 “无故 ARP”(Gratuitous ARP)。
- 由于 ARP 协议很早就制定出来了(1982 年 11 月),当时并没有考虑网络安全问题。因此,ARP 协议没有安全验证机制,存在 ARP 欺骗和攻击 等问题。
4.2.6 IP数据报的发送和转发过程
- 主机发送IP数据报
- 判断目的主机是否与自己在同一个网络
- 若在同一个网络,则属于直接交付;
- 若不在同一个网络,则属于间接交付。发送给主机所在网络的默认网关(路由器),由默认网关帮忙转发。
- 路由器转发IP数据报
- 基于IP数据报首部中的目的IP地址在路由表中进行查询
- 若找到匹配的路由条目,则按该路由条目的指示进行转发;
- 否则丢弃该IP数据报,并向发送该IP数据报的源主机发送差错报告。

4.2.7 IPv4数据报的首部格式

首部长度
长度为4个比特,该字段的取值以4字节为单位,用来表示IPv4数据报的首部长度。
最小取值为二进制的0101,即十进制的5,再乘以4字节单位,表示IPv4数据报首部只有20字节固定部分。
最大取值为二进制的1111,即十进制的15,再乘以4字节单位,表示IPv4数据报首部包含20字节固定部分和最大40字节可变部分。
【举例】IPv4数据报首部中的首部长度字段和总长度字段。
| |
- 首部长度字段的取值 = $(0101)_2$,以4字节为单位
- 总长度字段的取值 = $(0000\ 0011\ 1111\ 1100)_2$,以字节为单位
- 首部长度 = $(0101)_2 \times 4 = 5 \times 4 =$ 20(字节)
- 总长度 = $(0000\ 0011\ 1111\ 1100)_2 =$ 1020(字节)
- 数据载荷长度 = 总长度 - 首部长度 = 1020 - 20 = 1000(字节)
填充
- 当首部长度(20字节固定部分+可变部分)的长度不是4字节整数倍时,填充相应数量的全0字节,以确保IPv4数据报的首部长度是4字节的整数倍。
分片
【举例】某个IPv4数据报总长度为3820字节,采用20字节固定首部,根据数据链路层要求,需要将该IPv4数据报分片为长度不超过1420字节的数据报片。

| 总长度 | 标识 | MF | DF | 片偏移 | |
|---|---|---|---|---|---|
| 原IPv4数据报 | 20+3800 | 23333 | 0 | 0 | 0 / 8 = 0 |
| 分片数据报1 | 20+1400 | 23333 | 1 | 0 | 0 / 8 = 0 |
| 分片数据报2 | 20+1400 | 23333 | 1 | 0 | 1400 / 8 = 175 |
| 分片数据报3 | 20+1000 | 23333 | 0 | 0 | 2800 / 8 = 350 |
【2021年 题36】若路由器向MTU=800B的链路转发一个总长度为1580B的IP数据报(首部长度为20B)时,进行了分片,且每个分片尽可能大,则第2个分片的总长度字段和MF标志位的值分别是( B )。
A. 796,0
B. 796,1
C. 800,0
D. 800,1
先尝试以800字节作为一个分片:首部20B,数据载荷780B,第二个分片的片偏移为$780 \div 8=97.5$ 但是片偏移必须是整数。
数据载荷长度就应取小于800且能整除8的最大数,为776,那么第二个分片的总长度就为$20+776=796$。
但是这两个数据载荷的容量不够,还有第三个分片,MF标志应该为1。
标识
- 长度为16个比特,属于同一个IPv4数据报的各分片数据报应该具有相同的标识。
- IP软件会维持一个计数器,每产生一个IPv4数据报,计数器值就加1,并将此值赋给标识字段。
标志
- 最低位(More Fragment, MF)
- MF=1表示本分片后面还有分片
- MF=0表示本分片后面没有分片
- 中间位(Don’t Fragment, DF)
- DF=1表示不允许分片
- DF=0表示允许分片
- 最高位为保留位,必须设置为0
片偏移
- 长度为13个比特,该字段的取值以8字节为单位,用来指出分片IPv4数据报的数据载荷偏移其在原IPv4数据报的位置有多远。
生存时间
- 长度为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数据报在传输过程中其首部是否出现了差错。
- IPv4数据报每经过一个路由器,其首部中的某些字段的值(例如生存时间TTL、标志以及片偏移等)都可能发生变化,因此路由器都要重新计算一下首部检验和。

- 上述检验和的计算方法不仅用于IP协议,还用于运输层的用户数据报协议UDP和传输控制协议TCP,常被称为因特网检验和(Internet Checksum)。这种检验和的检错性能虽然不如CRC,但更易用软件实现。
IP地址
源IP地址:长度为32个比特,用来填写发送IPv4数据报的源主机的IPv4地址。
目的IP地址:长度为32个比特,用来填写接收IPv4数据报的目的主机的IPv4地址。
4.3 静态路由配置
- 静态路由配置是指用户或网络运维人员使用路由器的相关命令给路由器人工配置路由表。
- 人工配置方式简单、开销小、但不能及时适应网络状态(流量、拓扑等)的变化,一般只在小规模网络中采用。
- 进行静态路由配置需要认真考虑和谨慎操作,否则可能出现以下问题:
- 路由条目配置错误,甚至导致出现路由环路。
- 聚合路由条目时可能引入不存在的网络。

| 目的网络 | 下一跳 | 类型 |
|---|---|---|
| 0.0.0.0/0 | 10.0.0.2 | 静态 |
在默认路由条目中,有目的网络 $0.0.0.0/0$ 其中 $0.0.0.0$ 表示任何网络,而网络前缀 $/0$ 是最短的网络前缀。
路由器在查找转发表转发IP数据报时,遵循“最长前缀匹配”的原则,因此默认路由条目的匹配优先级最低。
| 目的网络 | 下一跳 | 类型 |
|---|---|---|
| 192.168.2.0/24 | 10.0.0.2 | 静态 |
| 192.168.2.1/32 | 10.0.0.2 | 静态 |
4.4 因特网的路由选择协议
4.4.1 路由选择分类
静态路由选择
- 采用人工配置的方式给路由器添加网络路由、默认路由和特定主机路由等路由条目。
- 静态路由选择简单、开销小,但不能及时适应网络状态(流量、拓扑等)的变化。
- 静态路由选择一般只在小规模网络中采用。
动态路由选择
- 路由器通过路由选择协议自动获取路由信息。
- 动态路由选择比较复杂、开销比较大,但能较好地适应网络状态的变化。
- 动态路由选择适用于大规模网络。
4.4.2 分层次的路由选择协议
路由选择协议主要特点:
- 自适应:因特网采用动态路由选择,能较好地适应网络状态的变化
- 分布式:因特网中的各路由器通过相互间的信息交互,共同完成路由信息的获取和更新。
- 分层次:将整个因特网划分为许多较小的自治系统(Autonomous System,AS)。在自治系统内部和外部采用不同类别的路由选择协议,分别进行路由选择。
自治系统内部是用内部网关协议IGP,连接自治系统的是外部网关协议EGP
外部网关协议EGP和内部网关协议IGP只是路由选择协议的分类名称,而不是具体的路由选择协议。
外部网关协议和内部网关协议名称中使用的是“网关”这个名词,是因为在因特网早期的RFC文档中,没有使用“路由器”而使用的是“网关”这一名词。
4.4.3 路由信息协议RIP
基本概念
路由信息协议(Routing Information Protocol,RIP)是内部网关协议中最先得到广泛使用的协议之一,其相关标准文档为[RFC 1058]。
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距离为1。
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息。
- 若干次交换和更新后,每个路由器都知道到达本自治系统AS内各网络的最短距离和下一跳路由器,称为收敛。
距离向量算法
RIP路由条目更新规则
- 发现了新网络,添加
- 到达目的网络,相同下一跳,最新消息,更新
- 到达目的网络,不同下一跳,新路由优势,更新
- 到达目的网络,不同下一跳,新路由劣势,不更新
- 到达目的网络,不同下一跳,RIP距离相同,等价负载均衡
除了上述RIP路由条目更新规则,在RIP的距离向量算法中还包含以下一些时间参数:
- 路由器每隔大约30秒向其所有相邻路由器发送路由更新报文。
- 若180秒(默认)没有收到某条路由条目的更新报文,则把该路由条目标记为无效(即把RIP距离设置为16,表示不可达),若再过一段时间(如120秒),还没有收到该路由条目的更新报文,则将该路由条目从路由表中删除。
【2010年 题35】某自治系统内采用RIP协议,若该自治系统的路由器R1收到其邻居路由器R2的距离矢量,距离矢量中包含信息<net1,16>,则能得出的结论是(D)。
A. R2可以经过R1到达net1,跳数为17
B. R2可以达到net1,跳数为16
C. R1可以经过R2到达net1,跳数为17
D. R1不能经过R2到达net1
在RIP协议中,距离16表明目的网络不可达。
因此,R2无法到达net1,R1也无法通过R2到达net1。
【2021年 题37】某网络中的所有路由器均采用距离向量路由算法计算路由。若路由器E与邻居路由器A、B、C和D之间的直接链路距离分别是8,10,12和6,且E收到邻居路由器的距离向量如下表所示,则路由器E更新后的到达目的网络Net1~Net4的距离分别是(D)。
目的网络 A的距离向量 B的距离向量 C的距离向量 D的距离向量 Net1 1 23 20 22 Net2 12 35 30 28 Net3 24 18 16 36 Net4 36 30 8 24 A. 9, 10, 12, 6 B. 9, 10, 28, 20 C. 9, 20, 12, 20 D. 9, 20, 28, 20

存在的问题

- “坏消息传播得慢”的问题又被称为路由环路或RIP距离无穷计数问题。这是距离向量算法的一个固有问题。可以采取以下多种措施减少出现该问题的概率或减小该问题带来的危害:
- 限制最大RIP距离为15(16表示不可达)。
- 当路由表发生变化时就立即发送路由更新报文(即“触发更新”),而不仅是周期性发送。
- 让路由器记录收到某个特定路由信息的接口,而不让同一路由信息再通过此接口向反方向传送(即“水平分割”)。
- 使用上述措施仍无法彻底解决问题。因为在距离向量算法中,每个路由器都缺少到目的网络整个路径的完整信息,无法判断所选的路由是否出现了环路。
版本和相关报文的封装
- 现在较新的RIP版本是1998年11月公布的RIP2[RFC 2453],已经成为因特网标准协议。与RIP1相比,RIP2可以支持变长子网掩码和CIDR。另外,RIP2还提供简单的鉴别过程并支持多播。
- RIP相关报文使用运输层的用户数据报协议UDP进行封装,使用的UDP端口号为520。
- 从RIP报文封装的角度看,RIP属于TCP/IP体系结构的应用层。
- 但RIP的核心功能是路由选择,这属于TCP/IP体系结构的网际层。
RIP的优缺点
优点
- 实现简单,路由器开销小。
- 如果一个路由器发现了RIP距离更短的路由,那么这种更新信息就传播得很快,即“好消息传播得快”。
缺点
- RIP限制了最大RIP距离为15,这就限制了使用RIP的自治系统AS的规模。
- 相邻路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也随之增大。
- “坏消息传播得慢”,使更新过程的收敛时间过长。因此,对于规模较大的自治系统AS,应当使用OSPF协议。
4.4.4 开放最短路径优先OSPF
基本概念
- 开放最短路径优先(Open Shortest Path First,OSPF)协议是为了克服路由信息协议RIP的缺点在1989年开发出来的。
- “开放”表明OSPF协议不是受某一厂商控制,而是公开发表的。
- “最短路径优先”是因为使用了Dijkstra提出的最短路径算法(Shortest Path First,SPF)。
- OSPF是基于链路状态的,而不像RIP是基于距离向量的。
- OSPF基于链路状态并采用最短路径算法计算路由,从算法上保证了不会产生路由环路。
- OSPF不限制网络规模,更新效率高,收敛速度快。
- 链路状态(Link State,LS)是指本路由器都和哪些路由器相邻,以及相应链路的“代价(cost)”。
- “代价”用来表示费用、距离、时延和带宽等,这些都由网络管理人员来决定。
OSPF路由器邻居关系的建立和维护
| … | 目的IP地址 | 协议号 | … | |
|---|---|---|---|---|
| 224.0.0.5 | 89 | OSPF问候分组 |
- OSPF相邻路由器之间通过交互问候(Hello)分组来建立和维护邻居关系。
- 问候(Hello)分组封装在IP数据报中,发往组播地址224.0.0.5。IP数据报首部中的协议号字段的取值为89,表明IP数据报的数据载荷为OSPF分组。
- 问候(Hello)分组的发送周期为10秒。
- 若40秒未收到来自邻居路由器的问候(Hello)分组,则认为邻居路由器不可达。
- 每个路由器都会建立一张邻居表。
链路状态
使用OSPF的每个路由器都会产生链路状态通告(Link State Advertisement,LSA)。
LSA中包含以下两类链路状态信息:
直连网络的链路状态信息
邻居路由器的链路状态信息
链路状态通告LSA被封装在链路状态更新(Link State Update, LSU)分组中,采用可靠的洪泛法(Flooding)进行发送。
- 洪泛法的要点是路由器向自己所有的邻居路由器发送链路状态更新分组,收到该分组的各路由器又将该分组转发给自己所有的邻居路由器(但其上游路由器除外),以此类推。
- 可靠是指收到链路状态更新分组后要发送确认,收到重复的更新分组无需再次转发,但要发送一次确认。
使用OSPF的每一个路由器都有一个链路状态数据库(Link State Database, LSDB),用于存储链路状态通告LSA。
通过各路由器洪泛发送封装有各自链路状态通告LSA的链路状态更新分组LSU,各路由器的链路状态数据库LSDB最终将达到一致。
基于链路状态数据库进行最短路径优先计算

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

多点接入网络中的OSPF路由器
为了减少洪泛发送问候分组和链路状态更新分组的数量,OSPF采用以下措施:
- 选举指定路由器(Designated Router,DR)和备用的指定路由器(Backup Designated Router,BDR)
- 所有的非DR/BDR只与DR/BDR建立邻居关系
- 非DR/BDR之间通过DR/BDR交换信息
如果不引入DR/BDR,也就是所有路由器两两建立关系,总连接数为:
$$ Total = \frac{n(n-1)}{w} $$引入DR/BDR后,有 DRothers(非 DR/BDR 路由器)不再两两建立邻接关系,而是仅与 DR 和 BDR 建立关系
- DRothers 与 DR 建立关系:除了 DR 自身,剩下的 $n-1$ 台路由器(包括 BDR)都要与 DR 建立关系:连接数:$n-1$
- DRothers 与 BDR 建立关系:除了 BDR 自身和已经与它有连接的 DR,剩下的 $n-2$ 台 DRothers 需要与 BDR 建立关系:连接数:$n-2$
- DR 与 BDR 建立关系:它们之间必须同步:连接数:$1$
OSPF划分区域
- 采用划分区域的方法,虽然使交换信息的种类增多了,同时也使OSPF协议更加复杂了,但这样做能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于规模更大的自治系统AS。

4.4.5 边界网关协议BGP
基本概念
- 边界网关协议(Border Gateway Protocol, BGP)属于外部网关协议EGP这个类别,用于自治系统AS之间的路由选择协议。
- 由于在不同AS内度量路由的“代价”(距离、带宽、费用等)可能不同,因此对于AS之间的路由选择,使用统一的“代价”作为度量来寻找最佳路由是不行的。
- AS之间的路由选择还必须考虑相关策略,这些策略包括政治、经济、安全等,它们都是由网络管理员对每一个路由器进行设置的。但这些策略并不是自治系统之间的路由选择协议本身。
- BGP只能是力求寻找一条能够到达目的网络且比较好的路由(即不能兜圈子),而并非要寻找一条最佳路由。

- 在配置BGP时,每个AS的管理员要选择至少一个路由器作为该AS的“BGP发言人”。
- 一般来说,两个BGP发言人都是通过一个共享网络连接在一起的,而BGP发言人往往就是BGP边界路由器。
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)。
- BGP发言人除了运行BGP协议外,还必须运行自己所在AS所使用的内部网关协议IGP,例如RIP或OSPF。
- BGP发言人交换网络可达性的信息,也就是要到达某个网络所要经过的一系列自治系统。
- 当BGP发言人相互交换了网络可达性的信息后,各BGP发言人就根据所采用的策略,从收到的路由信息中找出到达各自治系统的较好的路由,也就是构造出树形结构且不存在环路的自治系统连通图。
- BGP适用于多级结构的因特网。
BGP-4的四种报文
BGP-4是目前使用得最多的版本,在[RFC 4271]中规定了BGP-4的四种报文:
报文类型 功能描述 打开 OPEN 用来与相邻的另一个BGP发言人建立关系,使通信初始化。 保活 KEEPALIVE 用来周期性地证实邻站的连通性。 更新 UPDATE 用来通告某一条路由的信息,以及列出要撤销的多条路由。 通知 NOTIFICATION 用来发送检测到的差错。 【2017年 题37】直接封装RIP、OSPF、BGP报文的协议分别是(D)。
A. TCP、UDP、IP B. TCP、IP、UDP C. UDP、TCP、IP D. UDP、IP、TCP

从实现功能(路由选择)的角度看,这三个路由选择协议都属于网络层。
从数据包按网络体系结构逐层封装的角度看,RIP和BGP属于应用层,OSPF属于网络层。
4.4.6 路由器的基本工作原理
- 路由器被定义为一种具有多个输入/输出端口的专用计算机,其核心任务是转发分组。
- 路由选择部分:核心构件是路由选择处理机,其任务是根据所使用的路由选择协议,周期性地与其他路由器进行信息的交换,以便构建和更新路由表。
- 分组转发部分:由一组输入端口、交换结构以及一组输出端口。

4.5 网际控制报文协议ICMP
- 为了更有效地转发IP数据报以及提高IP数据报交付成功的机会,TCP/IP体系结构的网际层使用了网际控制报文协议 (Internet Control Message Protocol, ICMP) [RFC 792]。
- 主机或路由器使用ICMP来发送差错报告报文和询问报文。
- ICMP报文被封装在IP数据报中发送。
- 以下情况不应发送ICMP差错报告报文:
- 对ICMP差错报告报文不再发送ICMP差错报告报文。
- 对第一个分片的IP数据报片的所有后续数据报片都不发送ICMP差错报告报文。
- 对具有多播地址的IP数据报都不发送ICMP差错报告报文。
- 对具有特殊地址(例如127.0.0.0或0.0.0.0)的IP数据报不发送ICMP差错报告
- ICMP的典型应用
- 分组网间探测PING
- 跟踪路由traceroute
ICMP报文类型
差错报告报文
终点不可达:当路由器或主机不能交付IP数据报时,就向源点发送终点不可达报文。

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

时间超过(超时):当路由器收到TTL=1的IP数据报时,将其丢弃,并向源点发送时间超过报文。另外,当终点在预先规定的时间内未能收到一个数据报的全部数据报分片时,就把已收到的数据报片都丢弃,也会向源点发送时间超过(超时)报文。

参数问题:当路由器或目的主机收到IP数据报后发现其首部中有不正确的字段值时,就丢弃该数据报,并向源点发送参数问题报文。

改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将IP数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机。
询问报文
- 回送请求和回答:用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求和回答:用来进行时钟同步和测量时间。
分组网间探测PING
- 分组网间探测PING用来测试主机或路由器之间的连通性。
- PING是TCP/IP体系结构的应用层直接使用网际层ICMP的一个例子,它并不使用运输层的TCP或UDP。
- PING应用所使用的ICMP报文类型为回送请求和回答。
跟踪路由
跟踪路由应用 traceroute,用于探测 IP 数据报从源主机到达目的主机要经过哪些路由器。
在不同操作系统中,traceroute 应用的命令和实现机制有所不同:
- 在 UNIX 版本中,具体命令为 “traceroute”,其在运输层使用 UDP 协议,在网络层使用 ICMP 报文类型只有差错报告报文。
- 在 Windows 版本中,具体命令为 “tracert”,其应用层直接使用网际层的 ICMP 协议,所使用的 ICMP 报文类型有回送请求和回答报文以及差错报告报文。
4.6 虚拟专用网和网络地址转换
4.6.1 虚拟专用网 VPN
- 虚拟专用网 (Virtual Private Network, 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 地址,但这并不会引起麻烦,因为这些专用地址仅在机构内部使用。

- VPN要保证传输数据的安全性,会将原始的内部IP数据报进行加密,然后再将其封装成为在因特网上传送的外部IP数据报。
- 同一机构内不同部门的内部网络所构成的VPN,又称为内联网VPN。
- 有时,一个机构的虚拟专用网VPN需要某些外部机构(通常是合作伙伴)参加进来,这样的VPN就称为外联网VPN。
- 在外地工作的员工需要访问公司内部的专用网时,只要在任何地点接入因特网,运行驻留在员工PC中的VPN软件,在员工的PC和公司的主机之间建立VPN隧道,就可以访问专用网中的资源,这种虚拟专用网又称为远程接入VPN。
4.6.2 网络地址转换 NAT
- 网络地址转换(Network Address Translation, NAT)技术于1994年被提出,用来缓解IPv4地址空间即将耗尽的问题。
- NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机和资源。
- 这种方法需要在专用网络连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器称为NAT路由器,它至少要有一个有效的外部全球地址IP$_G$。这样,所有使用内部专用地址的主机在和外部因特网通信时,都要在NAT路由器上将其内部专用地址转换成IP$_G$。
- 如果NAT路由器拥有 $n$($n$ 比较小)个全球IP地址,那么专用网内最多可以同时有 $n$ 台主机接入因特网。若专用网内的主机数量大于 $n$,则需要轮流使用NAT路由器中数量较少的全球IP地址。
- 由于目前绝大多数基于TCP/IP协议栈的网络应用,都使用运输层传输控制协议TCP或用户数据报协议UDP,为了更加有效地利用NAT路由器中的全球IP地址,现在常将NAT转换和运输层端口号结合使用。这样就可以使内部专用网中使用专用地址的大量主机,共用NAT路由器上的1个全球IP地址,因而可以同时与因特网中的不同主机进行通信。
- 将NAT和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation, NAPT)。现在很多家用路由器将家中各种智能设备(手机、平板、笔记本电脑、台式电脑、物联网设备等)接入因特网,这种路由器实际上就是一个NAPT路由器,但往往并不运行路由选择协议。
- 尽管NAT(和NAPT)的出现在很大程度上缓解了IPv4地址资源紧张的局面,但NAT(和NAPT)对网络应用并不完全透明,会对某些网络应用产生影响。
- NAT(和NAPT)的一个重要特点就是通信必须由专用网内部发起,因此拥有内部专用地址的主机不能直接充当因特网中的服务器。
- 对于目前P2P这类需要外网主机主动与内网主机进行通信的网络应用,在通过NAT时会遇到问题,需要网络应用自身使用一些特殊的NAT穿透技术来解决。


5.1 运输层概述

5.1.1 进程间基于网络的通信
- 第2~4章依次介绍了计算机网络体系结构中的物理层、数据链路层和网络层,它们共同解决了将主机通过异构网络互联起来所面临的问题,实现了主机到主机的通信。
- 然而在计算机网络中实际进行通信的真正实体,是位于通信两端主机中的进程。
- 如何为运行在不同主机上的应用进程提供直接的逻辑通信服务,就是运输层的主要任务。运输层协议又称为端到端协议。

- 运输层向应用层实体屏蔽了下面网络核心的细节(例如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。
- 根据应用需求的不同,因特网的运输层为应用层提供了两种不同的运输层协议,即面向连接的TCP和无连接的UDP,这两种协议就是本章要讨论的主要内容。
5.1.2 TCP/IP 运输层中的两个重要协议

TCP
- 传输控制协议 (Transmission Control Protocol, TCP) 为其上层提供的是面向连接的可靠的数据传输服务。
- 使用TCP通信的双方,在传送数据之前必须首先建立TCP连接(逻辑连接,而非物理连接)。数据传输结束后必须释放TCP连接。
- TCP为了实现可靠传输,就必须使用很多措施,例如TCP连接管理、确认机制、超时重传、流量控制以及拥塞控制等。
- TCP的实现复杂,TCP报文段的首部比较大,占用处理机资源比较多。
UDP
- 用户数据报协议 (User Datagram Protocol, UDP) 为其上层提供的是无连接的不可靠的数据传输服务。
- 使用UDP通信的双方,在传送数据之前不需要建立连接。
- UDP不需要实现可靠传输,因此不需要使用实现可靠传输的各种机制。
- UDP的实现简单,UDP用户数据报的首部比较小。
5.1.3 运输层端口号、复用与分用
运输层端口号
- 运行在计算机上的进程是使用进程标识符 (Process Identification, PID) 来标识的。
- 然而,因特网上的计算机并不是使用统一的操作系统,而不同操作系统 (Windows、Linux、MacOS) 又使用不同格式的进程标识符。
- 为了使运行不同操作系统的计算机的应用进程之间能够基于网络进行通信,就必须使用统一的方法对TCP/IP体系的应用进程进行标识。
- TCP/IP体系结构的运输层使用端口号来标识和区分应用层的不同应用进程。端口号的长度为16比特,取值范围是0~65535。

- 熟知端口号:由IANA分配给TCP/IP体系结构应用层中最重要的提示应用协议。
- 登记端口号:为没有熟知端口号的应用程序使用。要使用这类端口号,必须在IANA进行登记,以防止重复。例如,Microsoft RDP微软远程桌面应用程序使用的端口号是3389。
- 短暂端口号:仅在客户端使用,由客户进程在运行时动态选择,通信结束后会被系统收回。
| FTP | SMTP | DNS | DHCP | HTTP | BGP | HTTPS | RIP |
|---|---|---|---|---|---|---|---|
| 21/20 | 25 | 53 | 67/68 | 80 | 179 | 443 | 520 |
- 端口号只具有本地意义,即端口号只是为了标识本计算机网络协议栈应用层中的各应用进程。在因特网中,不同计算机中的相同端口号是没有关系的,即相互独立。另外,TCP和UDP端口号之间也是没有关系的。
发送方的复用和接收方的分用

