王道计算机网络(咸鱼版) 详细笔记
王道计算机网络(咸鱼版)全集 详细笔记
计算机网络的组成和功能
从组成部分看
硬件
- 主机,即端系统。如电脑手机
- 通信设备
- 通信链路
软件
- 方便用户使用,实现资源共享
- 如QQ微信邮箱
协议
- 规定计算机网络的通信规则
- 由硬件软件共同实现
从工作方式看

边缘部分
- 直接为用户服务
- 主要由连接到互联网上的主机及其软件组成
核心部分
- 为边缘部分提供服务
- 由大量网络和连接网络的路由器组成
从逻辑功能看
资源子网
- 运行应用程序,向用户提供资源的部分
- 主要由连接到互联网上的主机组成
通信子网
- 负责计算机间信息传输的部分,即把计算机和其他用户装置互联在一起的所有通信设备和介质的总称
- 由通信链路+通信设备+协议 构成
和从工作方式分类的区别在于,用户设备底层的硬件和协议也被划分与通信子网。只有主机和软件属于资源子网。
功能
- 数据通信。实现计算机之间的数据传输
- 资源共享。共享硬件、软件、数据资源
- 分布式处理。将一个复杂的任务分给网络中的多台计算机处理
- 提高可靠性。网络中的各台计算机互为替代机
- 负载均衡。网络中的各台计算机共同分担繁重的工作
交换技术
电路交换
过程:
- 建立连接(尝试占用通信资源)
- 通信(占用)
- 释放连接(释放通信资源)

优点:
- 数据直送,速率高
缺点:
- 建立、释放连接需要额外时间开销
- 线路被双方独占,利用率低
- 线路分配灵活性差,当某个通信节点故障,无法动态的更换节点,只能重新建立连接
- 不支持查错控制,无法检测发送数据传输过程中是否发生错误导致数据更改
报文交换
过程:
- 报文生成与提交(源终端封装完整报文)
- 存储 - 转发(网络节点逐跳传递报文):将报文存储到交换机的内存中,然后根据转发表找到下一个线路
- 报文接收与处理(目的终端获取并解析报文)

优点:
- 通信前无需建立连接
- 线路可以灵活分配,当某个交换机损坏,可以重新动态规划路线
- 线路利用率高,两个通信的用户无需占用整条通信链路
- 支持通过校验技术进行差错控制
缺点:
- 报文长度不定,交换机内存管理困难
- 长报文存储转发时间、缓存开销大
- 长报文出错概率大,重传代价大
- 存在存储转发时延
分组交换

将一个不定长的报文分为定长的分组 Packet,每一个 Packet 中也包含着自己的控制信息 Header :源地址,目标地址和分组号(地址为IP地址)
Packet发送到目标地址时可能是无序的,源地址节点可以根据Header的分组号将分组重新排序然后组合为完整的数据
优点:
- 通信前无需建立连接
- 线路可以灵活分配,数据以Packet为单位被交换节点存储转发
- 线路利用率高,两个通信的用户无需占用整条通信链路
- 支持通过校验技术进行差错控制
- 分组定长,方便存储转发管理,时间更低,开销更小。不易出错,重传代价低
缺点:
- 控制信息的占比增加了,需要更多的网络资源传输控制信息
- 存在存储转发时延
- 报文分组后,传输过程可能出现失序,丢失的问题
虚电路交换
基于分组交换
过程:
- 建立连接(虚拟电路)
- 以分组交换的方式通信,按照已经建立好的固定线路传输Pakcet,到达源地址的Packet是有序的
- 释放连接
目标主机的性能很高,可以自行处理失序问题,无需消耗网络资源解决失序问题,所以计算机采用的是分组交换的方式。
性能分析
三种交换方式的对比:

电路交换

假设:
- 电路从A-B消耗1ms
- 在B自身内部建立电路1ms
- 电路从B-C消耗1ms
- 在C自身内部建立电路1ms
- 电路从C-D消耗1ms
- 接收方D处理连接请求2ms。
- 由于连接已经建立完成,响应从D-A只有传播的3ms
- 数据传输速率=0.5kb/ms,报文大小=4kb,总用时8ms。发送方A每1ms传输的数据又要经过3ms到达接收方D,总时间就是8+3 = 11ms
- A节点开始释放连接,顺序如1-5一样
报文交换
条件如上文一样

- 报文在交换机A-B之间传输消耗11ms
- B节点对报文进行处理,即为存储转发时延2ms
- B-C,C-D的步骤如步骤1-2一样
分组交换
将报文分为四个分组,每个分组大小为1kb
分组存储转发时延=0.5ms

- 分组1由A-B消耗时间2 + 1 = 3ms
- 分组到达B存储转发时延0.5ms,同时分组2开始由A-B传输
- 之后的过程如1-2一样传输
总结
从数据传输速度方面:
- 电路交换耗时11ms,报文耗时29ms,分组耗时17.5ms
- 电路交换数据传输速度是最快的
但考虑建立连接,线路的利用率与分配灵活程度,分组交换无疑是更优的选择。

计算机网络的分类
分类
分布范围
广域网(WAN):跨省/国/州
城域网(MAN):跨城
局域网(LAN):学校/企业/家内
个域网(PAN):家庭/个人
传播技术
广播式网络:
- 当一台计算机发送数据分组的时候,广播范围内的所有计算机都会受到这个数据分组,这些计算机通过检查分组的目的地址决定是否接受该分组
- 所有无线网络都是广播式网络
点对点网络:
- 数据只会从发送方点对点发到接收方
- 路由器转发数据分组就是点对点网络
拓扑结构
总线性结构:

数据广播式传输,存在总线争用问题:
当A给C发送数据时,总线上都是A的数据,这时B想给C发数据,由于总线上都是A的数据,B的数据进入总线后就会导致数据错乱。
典型代表:集线器连接的设备
环形结构:

数据广播式传输,通过令牌token解决总线争用问题:
这一段环网只能有一个节点能拿到令牌,只有拿到令牌的节点才能够进行数据传输
典型代表:令牌环网
星型结构:

由中央设备实现数据的点对点传输,不存在总线争用问题
典型代表:以太网交换机连接的设备
网状结构:

数据通过各中间节点逐一存储转发,实现数据的点对点传输
典型代表:由众多路由器构建的广域网
使用者
公用网:向公共开放的网络
专用网:供某个组织内部使用的网络
传输介质
有线网络:如光纤、网线
无线网络:如5G、WIFI、卫星
性能指标
速率、带宽、吞吐量
速率(Speed):指连接到网络上的节点在信道上传输数据的速率,也称数据率、比特率或数据传输速率
信道(Channel):表示向某一方向传输信息的通道。(信道 ≠ 通信线路)一条通信线路在逻辑上往往对应一条发送信道和一条接受信道

速率单位:bit/s,b/s,bps
带宽(bandwidth):某信道所能传送的最高数据率
在通信原理中,带宽指的是某信道允许通过的信号频带范围(单位Hz)。信道用来传播电磁波信号,电磁波信号可以携带数据,由波长和频率来表示
吞吐量(Throughput):指单位时间内通过某个网络(信道、接口)的实际数据量,受带宽限制、复杂的网络负载情况影响

时延、信道利用率
时延(Delay):指数据(报文、分组、比特)从网络的一端传送到另一端所需的时间,也称延迟或迟延
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延
- 发送时延 = 数据长度(bit) / 发送速率(bit/s),又名传输时延,节点将数据推向信道所花的时间
- 传播时延 = 信道长度(m)/ 电磁波在信道中的传播速度(m/s),电磁波在信道中传播一定距离所花的时间
- 处理时延(被路由器处理所花的时间)、排队时延(数据排队进入、发出路由器所花的时间)受网络负载、路由器性能等诸多因素影响。

时延带宽积 (bit)= 传播时延 * 带宽:一条链路中,已从发送端发出但尚未到达接收端的最大比特数,相当于一条链路中能存放的最大数据量。
用水管来举例,链路就相当于水管,带宽就是水管的横截面,传播时延就是水管的长度,横截面*长度结果就是这个水管的最大容量,即时延带宽积
往返时延RTT(Round-Trip Time):表示发送方从发送完数据,到 收到来自接收方的确认 总共经历的时间
信道利用率 = 有数据通过的时间 / 总时间(有数据通过的时间 + 没有数据通过的时间):某个信道有百分之多少的时间是有数据通过的。
信道利用率过低会浪费资源,过高容易导致网络拥塞
分层结构
体系结构
网络的体系结构是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精准定义
实现是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题

各层之间的关系
实体:在计算机网络的分层结构中,第n层中的活动元素(软件+硬件),通常称为第n层实体。不同机器的同一层称为对等层,同一层的实体称为对等实体
协议:即网络协议,控制对等实体之间进行通信的规则的集合,是水平的
接口:同一节点内相邻两层的实体交换信息的逻辑接口,又称服务访问点(Service Access Point,SAP)
服务:指下层为紧邻的上层提供的功能调用,是垂直的
数据的传输
从水平来看,数据之间的传输要遵循协议。因此需要在数据头部加上控制信息确保实现相应层数的功能。
从垂直来看,数据在层数从高到低的过程中不断封装,在头部添加不同层协议对应的控制信息

- 协议数据单元(PDU):对等层次之间传送的数据单位
- 服务数据单元(SDU):为完成上一层实体所要求的功能而传送的数据
- 协议控制信息(PCI):控制协议操作的信息
协议
协议由语法、语义和同步三部分组成
- 语法:数据与控制信息的格式。如协议控制信息(首部)部分占几个字节,每个字节是什么含义
- 语义:需要发出何种控制信息、完成何种动作以及做出何种应答。如协议中需要明确规定:发送完数据接受方是否需要应答,以及应答的种类
- 同步(或时序):执行各种操作的条件、时序关系,即事件实现顺序的详细说明。如发送完数据后,接受方需要立即应答,如果发送方10s内未收到应答,则会重发数据

OSI参考模型

物理层
实现相邻节点之间的比特的传输
- 需定义电路接口参数(形状、尺寸等)
- 需定义传输信号的含义、电气特称(5V表示1,1V表示0;每比特电信号持续时间0.1 ms)
链路层
确保相邻节点之间的链路逻辑上无差错。实体之间以帧Frame为单位进行数据传输
- 差错控制:检查纠错;或检查丢弃重传
- 流量控制:协调两个节点的速率
网络层
把分组从源节点转发到目的节点,以分组为单位进行数据传输
- 路由选择:构造并维护路由表,决定分组到达目标结点的最佳路径
- 分组转发:将分组从合适的端口转发出去
- 拥塞控制:发现网络拥塞并采取措施缓解拥塞
- 网际互连:实现异构网络互连
- 差错控制、流量控制(以分组为单位进行。可以把链路层从帧方面的控制看为是局部的,分组由多个帧组成,每个是正确的不一定能保证合成的分组是正确的,因此这就是网络层的工作,检错分组)、建立与释放连接、可靠传输管理
传输层
实现端到端的通信(即进程间的通信。端指的是端口),以报文段Segment为单位传输数据
- 复用和分用
- 差错控制、流量控制、建立与释放连接、可靠传输管理
会话层
管理进程间的会话(会话管理:采用检查点机制,当进程间通信失效时从检查点继续恢复通信),以报文为单位传输数据
表示层
解决不同主机上信息表示不一致的问题(数据格式转换),以报文为单位传输数据
应用层
实现特定的网络应用,以报文为单位传输数据
TCP/IP 模型

与OSI模型相比
删除了表示层与会话层:并不是所有网络应用都需要数据格式转换、会话管理功能。如果真的需要这些功能,可以通过应用层的特定协议去实现。
将数据链路层和物理层改为了网络接口层:OSI模型在数据链路层和物理层对硬件规定过多,但网络硬件种类繁多,不应该有过多限制。因此TCP/IP 模型在网络层直线只有网络接口层,用来实现相邻节点间的数据传输,不对具体怎么传输做规定
TCP/IP模型在网络层中删除了 差错控制、流量控制、建立与释放连接、可靠传输管理 的功能,因此网络层只能向上层提供无连接不可靠的服务。OSI模型既可以通过虚电路向上层提供有链接的可靠的服务,也可以通过数据报向上层提供无连接不可靠的服务
在传输层中,OSI模型只能向上层提供有链接的可靠的服务,TCP/IP模型既可以通过TCP协议向上层提供有链接的可靠的服务,也可以通过UDP协议向上层提供无连接不可靠的服务
通信基础
信源:数据的发送方
信宿:数据的接收方
数据:信息的实体,计算机内部的数据通常是二进制
信号:数据的载体
数字信号:信号值是离散的
模拟信号:信号值是连续的,抗干扰能力更强

码元:一个信号就是一个码元,可以是多个比特的载体。
码元携带的比特位越多,一个信号所能表现出的不同的状态越多。如果一个码元可能有4种状态,那么可以称其为4进制码元(一个码元携带2bit数据)
优点:每个信号周期可以传输更多的信息,每个码元可以携带更多信息。
代价:需要加强信号功率,对信道的要求更高
信道的极限容量
噪声:对信道产生干扰,影响信道的数据传输效率
奈奎斯特定理
解释了对于一个理想低通信道(没有噪声、带宽有限的信道),极限波特率 = 2W(W是信道的频率带宽,单位波特即 码元/s)
- 如果波特率太高,会导致“码间串扰”,即接受方无法识别码元
- 带宽越大,信道传输码元的能力越强
- 奈奎斯特定理没有解释一个码元最多可以携带多少比特
香农定理
解释了对于一个有噪声、带宽有限的信道的极限比特率 = Wlog2(1 + S/N,单位b/s)
信噪比(S/N)= 信号的功率 / 噪音的功率
在通信领域,信号功率往往比噪声功率大得多,因此采用无单位记法:
以dB(分贝)为单位表示信噪比:信噪比 = 10log10(S / N)
- 提高信道带宽、加强信号功率、降低噪声功率都可以提高信道的极限比特率
- 在带宽、信噪比确定的信道上,一个码元可以携带的比特数是有上限的
编码与调制

编码方法

不归零编码:低位代表0,高位代表一1。
- 无法分辨频率,不支持自同步
- 抗干扰能力弱
- 不浪费带宽
归零编码:低位代表0,在每一位中间都会归0。
- 能够分辨出频率,支持自同步
- 抗干扰能力弱
- 浪费带宽
反向非归零编码:跳变的时候代表0,不跳变代表1。
- 无法分辨频率。若增加冗余位,可支持自同步
- 抗干扰能力弱
- 浪费较少带宽
曼彻斯特编码:看一个位的中间,上跳代表0,下跳代表1,中间一定会变化。
- 可以分辨频率。支持自同步
- 抗干扰能力强
- 浪费带宽
差分曼彻斯特编码:看起点,跳变代表0,不跳变代表1,中间一定会变化。
- 可以分辨频率。支持自同步
- 抗干扰能力强
- 浪费带宽
调制方法

基带信号:来自信源的数字信号,需要调之后才能在某些信道上传输
调幅AM(ASK):
- y = 0 * sin2x -> 二进制0
- y = 1 * sin2x -> 二进制1
调频FM(FSK):
- y = sin1 * x -> 二进制0
- y = sin2 * x -> 二进制1
调相PM(PSK):
- y = sin(x + 0) -> 二进制0
- y = sin(x + π) -> 二进制1
正交幅度调制(QAM):
将AM、PM结合起来形成叠加符号即为QAM
将m种幅值、n种相位的AM、PM相结合,则可以调制出 mn 种信号
传输介质
有线传输介质
双绞线
- 由两根导线相互绞合构成
-
- 屏蔽双绞线(STP),有屏蔽层
- 非屏蔽双绞线(UTP),没有屏蔽层
- 绞合、屏蔽层可以提升抗电磁干扰能力
- 应用:局域网、早期电话线

同轴电缆
- 由内导体(用于传输信号)+外导体屏蔽层(抗电磁干扰)构成
- 屏蔽层可以提升抗电磁干扰能力
- 应用:早期局域网、有线电视

光纤
- 由纤芯(高折射率) + 包层(低折射率)构成,利用光的全反射特性在纤芯内部传输光脉冲信号
- 分为单模光纤和多模光纤
-
- 单模光纤:纤芯更细,只有一条光线在一根光纤中传输,适合长距离传输,信号传输损耗小
- 多模光纤:纤芯更粗,多条光线在一根光纤中传输,适合近距离传输,远距离信号容易失真
- 抗干扰能力强,光信号对电磁干扰不敏感
- 信号传输损耗小,长距离传输时中继器少(中继器用于应对信号失真情况,当信号传到中继器时对信号进行整形和放大);节省布线空间

以太网对有线传输介质的命名规则
速度 + Base + 介质信息
- 10Base5 ——10Mbps,同轴电缆,最远传输距离 500m
- 10Base2 ——10Mbps,同轴电缆,最远传输距离 200m(实际是 185)
- 10BaseF* ——10Mbps,光纤。* 可以是其他信息,如 10BaseFL、 10BaseFB、 10BaseFP
- 10BaseT* ——10Mbps,双绞线。* 可以是其他信息,如 10BaseT1S、 10BaseT1L
无线传输介质
无线电波:
穿透能力强、传输距离长、信号指向性弱
应用:WIFI、手机信号
微波通信:
频率带宽高、信号指向性强、保密性差
应用:卫星通信
红外线通信、激光通信:
信号指向性强
物理层接口的特性
- 机械特性:指明接口所用接线器的形状和尺寸、引脚数目和排列、固定和锁定装置等
- 电气特性:指明在接口电缆的各条线上出现的电压的范围、传输速率、距离限制等
- 功能特性:指明某条线上出现的某一电平的电压的意义
- 过程特性(规程特性):指明对于不同功能的各种可能事件的出现顺序
物理层设备
中继器(Repeater)
如果传输距离过长,数字信号会失真。因此需要中继器对信号进行整形再生,确保信号不会失真严重
- 只有两个端口,一个端口接收信号,将失真信号整形再生,并转发至另一端口
- 两端连接的节点不可以同时发送数据
集线器(Hub)
本质上是多端口中继器
冲突域:如果两台主机同时发送数据会导致冲突,则这两台主机处于同一个冲突域
数据链路层
物理链路:传输介质(0层) + 物理层(1层)实现了相邻节点之间的物理链路
物理链路受到噪声的干扰有可能会发生比特的跳变,因此需要逻辑链路
逻辑链路:数据链路层需要基于物理链路,实现相邻节点之间逻辑上无差错的数据链路(逻辑链路)
功能
组帧
其本质是将网络层传递下来的 “无结构数据块” 封装成 “有明确边界的帧(Frame)”,同时为帧添加必要的控制信息,确保数据能在物理链路中可靠、准确地传输。
字符计数法
- 在每个 帧开头,用一个定长计数字段表示帧长
- 任何一个计数字段出错,导致后续所有帧无法定界

字节填充法
- 使用控制字符SOH表示帧的开头,控制字符EOT表示帧的结尾
- 数据部分可能会有数据和控制字符是相等的,这种数据被称为特殊比特串。因此需要在种数据前加上转义字符ESC来确保其被数据接收方正确识别。同样的道理,如果有数据和转义字符是相等的,也可以在这个数据前面加上转义字符

零比特填充法
- 有特殊比特串表示帧开始和结束
- 由于数据部分可能出现特殊比特串,因此发送方需要对帧的数据部分进行处理,每遇到连续的5个1,就在其后填充一个0。接受方需要进行逆处理,每遇到连续的5个1,就在其后删除一个0

违规编码法
- 基于曼彻斯特编码实现,由于曼彻斯特编码规定比特的中间位必须跳变,如果没有跳,可以将其看作违规信号,用来标记帧的开头和结尾
- 需要物理层的配合,物理层在帧的前后插入一个时钟周期的违规信号

差错控制
为了发现并解决一个帧内部的位错
奇偶校验码
- 在有效信息位前加一个奇偶校验位称为奇偶校验码。奇(偶)校验确保奇偶校验码中1的个数位奇(偶)数
- 偶校验的硬件实现:对各信息进行异或运算,得到的结果即为偶校验为

循环冗余校验码
- 发送方根据待传输数据块,通过特定的数学运算生成一段 “校验码”(CRC 码),并将其附加在数据后一起传输;接收方收到数据后,用同样的运算验证 “数据 + 校验码” 是否符合预设规则,若不符合则判定数据出错,需请求重传
- 数据发送方和接收方约定一个除数,信息位+校验位作为被除数,需要保证被除数 / 除数的余数位0。若余数为非0说明数据出错

海明校验码
- 海明码的本质是通过在原始数据中插入若干 校验位(Parity Bit),让每个数据位都被多个校验位共同监督
- 当数据传输出错时,通过校验位的错误状态,可精准定位错误位置,进而完成纠错
流量控制与可靠传输
停止-等待协议(S-W)
- 滑动窗口机制:发送窗口 Wt=1,接收窗口 Wr=1
- 确认机制:
-
- 确认帧:ACK_i
- 若接收方收到 i 号帧,且没有检测出 “差错”,需要给发送方返回确认帧 ACK_i
- 重传机制:
-
- 超时重传
- 若发送方超时未收到 ACK_i,则重传 i 号帧
- 帧编号:
-
- 仅需 1bit 给帧 “编号”
- 要求:W_T + W_R ≤ 2ⁿ
后退N帧协议(GBN)
- 滑动窗口机制:发送窗口 Wt>1,接收窗口 Wr=1
- 确认机制:
-
- 确认帧:ACK_i
- 若接收方收到 i 号帧,且没有检测出 “差错”,需要给发送方返回确认帧 ACK_i
- 重传机制:
-
- 超时重传
- 若发送方超时未收到 ACK_i,则重传 i 号帧
- 帧编号:
-
- 为了支持以上机制正确运行,至少需要用 n bit 给帧 “编号”
- 要求:W_T + W_R ≤ 2ⁿ
- GBN 的特殊规则:
-
- 关于确认帧:接收方可以 “累积确认”。即连续收到多个数据帧时,可以仅返回最后一个帧的 ACK
- 关于超时重传:若发送方超时未收到 ACK_i,则重传 i 号帧,及其之后的所有帧
- 收到一个非法帧(即接受方收到的帧超出了当前的窗口),接受方会将此帧丢弃,并返回目前已接受的最后一个正确帧的ACK_i
选择重传协议(SR)
- 滑动窗口机制:发送窗口WT>1;接收窗口WR>1
- 确认机制:
-
- 确认帧:ACK_i
- 若接收方收到 i 号帧,且没有检测出 “差错”,需要给发送方返回确认帧 ACK_i,SR 协议不支持 “累计确认”,必须一帧一确认
- 重传机制:
-
- 超时重传
- 若发送方超时未收到 ACK_i,则重传 i 号帧
- 帧编号:
-
- 为了支持以上机制正确运行,至少需要用 n bit 给帧 “编号”
- 要求:WT+WR≤2n
- SR 的特殊规则:
-
- 否认帧:NAK_i
-
-
- 若接收方收到 i 号帧,但检测出 i 号帧有 “差错”,需要丢弃该帧,并给发送方返回否认帧 NAK_i
-
-
- 请求重传
-
-
- 若发送方收到 NAK_i,则重传 i 号帧
-
-
- 要求:WR≤WT,即接受窗口不能大于发送窗口
三种协议的理想信道利用率
- S-W:U=TD / TD+RTT+TATD
-
- TD:一个数据帧的传输时延(发送时延)
- TA:一个 ACK 确认帧的传输时延(发送时延)
- RTT:往返时延,即两倍的单向传播时延
- GBN、SR:U=N*TD / TD+RTT+TANTD
-
- N 表示发送窗口大小
- 注意:信道利用率不能超过 1
- 常结合 “帧编号” 考察
-
-
- 用 n bit 给帧 “编号”,要求 WT+WR≤2^n
- GBN 协议 WR=1,SR 协议 WR>1。因此,同样 n bit 给帧编号,GBN 的发送窗口 WT 更大,GBN 的信道利用率也会更高
-
信道划分与介质访问控制
信道划分
时分复用(Time Division Multiplexing, TDM)
将时间分为登场的TDM帧,每个TDM帧又被分为登场的m个时隙分配给m对节点使用

缺点:
- 每个节点最多分到信道总带宽的1/m
- 如果某节点暂时不发送数据,导致信道资源闲置浪费
频分复用(FDM)
将信道的总频带划分为多个子频带作为子信道,每对用户使用一个子信道进行通信

- 各节点可以同时发送信号,充分利用了信号带宽
- 但只能用于模拟信号的运输
波分复用(WDM)
光信号的频分复用
码分复用(CDM)
两个节点同时发送信号给接受方,接受方可以通过CDM计数将相互干扰的信号分离出来。
- 给各节点分配专属 “码片序列”
-
- “码片序列” 包含 m 个码片(信号值),可看作 “m 维向量”(m 维向量的分量通常取 1 或 - 1)
- 要求:各节点的 “m 维向量” 必须相互正交
- Tips:相互通信的各节点知道彼此的 “码片序列”
- 发送方如何发送数据
-
- 节点发出 m 个信号值与 “码片序列” 相同,表示比特 1
- 节点发出 m 个信号值与 “码片序列” 相反,表示比特 0
- 信号在传输过程中 “叠加”
-
- 当多个发送方同时发送数据时,信号值会叠加(注:本质是多个 m 维向量的加法)
- 接收方如何接收数据
-
- 接收方收到的是 “叠加” 信号,需要从中 “分离” 出各发送方的数据
- 叠加信号与发送方的码片序列作 “规格化内积”
-
-
- 结果为 1,表示比特 1
- 结果为 - 1,表示比特 0、
-
随机访问
ALOHA协议
纯ALOHA协议:
- 如果准备好数据帧就立刻发送
- 存在冲突问题:用户可在任意时刻发送数据,若两个用户的数据包在信道中 “部分重叠”(即使只有一小段时间重叠),就会导致冲突,数据包全部失效

时隙ALOHA协议:
- 只有在每个时隙开始时才能发送帧,时隙大小固定为传输一个最长帧所需要的时间
- 若用户在非时隙起始时刻产生数据,必须等待下一个时隙开始才能发送

CSMA(Carrier Sense Multiple Access)协议
- 在发送数据之前,先监听信道是否空闲,只有信道空闲时才会尝试发送
- 通过节点的网络适配器安装载波监听装置
1-坚持CSMA协议:
- 节点的数据准备好后,会一直监听信道直到信道空闲
- 传输失败后会随即推迟一段时间后尝试重传

优缺点:
- 信道利用率高
- 当多个节点都已经准备好数据,信道空闲之后会有多个节点同时发送数据,冲突概率高
非坚持CSMA协议:
- 节点的数据准备好后,如果信道不空闲,则会过一段时间再尝试监听信道
- 传输失败后会随即推迟一段时间后尝试重传

优缺点:
- 随意推迟一段时间再监听,可以减少冲突概率
- 信道空闲时可能不会被立即使用,降低信道利用率
p-坚持CSMA协议:
- 节点的数据准备好后,会一直监听信道直到信道空闲
- 如果发现信道空闲,有p概率立刻把数据帧发送到信道上,1-p概率推迟一段时间再发送

优缺点:
- 1-坚持CSMA,非坚持CSMA的折中方案,降低冲突概率的同时提升信道利用率
- 同时也一定程度有1-坚持CSMA,非坚持CSMA两个方案的缺点
CSMA/CD协议(Carrier Sense Multiple Access with Collision Detection)
- 先听后发、边发边听、冲突停发、随机重发
- 若信道不空闲,则持续侦听,直到信道变为空闲后再发送
- 设备在发送数据的同时,会持续侦听信道状态,检测是否有冲突发生。一旦检测到冲突停止发送数据,并发送 “冲突强化信号”(Jamming Signal),避免部分设备未检测到冲突而继续发送
- 冲突后,设备不会立即重新发送,而是通过 “随机退避算法” 等待一段随机时间,再重新发送
- 没有ACK机制,若传播过程中没有发生冲突,则认为发送成功

CSMA/CA 协议(Carrier Sense Multiple Access with Collision Avoidance)
- 先听后发、空闲等待、预约避让、确认接收
- 若信道不空闲(物理侦听忙或 NAV 未归 0),则持续侦听,直到信道空闲并等待 DIFS 后,进入随机退避阶段
- 设备发送数据前,可先发送 RTS 帧请求预约信道;接收方收到 RTS 后,发送 CTS 帧确认预约,所有设备通过 CTS 设置 NAV,避免在预约时段发送数据,从源头避让冲突
- 冲突后(未收到 ACK),设备不会立即重新发送,而是通过 “二进制指数退避算法”(CW 随冲突次数加倍)等待一段随机时间,再重新进入侦听 - 等待流程
- 依赖 ACK 机制,仅当发送方收到接收方反馈的 ACK 帧,才认为数据发送成功;若超时未收到 ACK,判定为冲突或数据丢失,触发重传
轮询访问
令牌传递协议
令牌帧
- 需指明当前获得令牌的节点编号
- 只有获得令牌(Token)的节点才能往信道上发送数据帧
- 如果获得令牌的节点没有数据要发送,就将令牌传递下一个节点
数据帧
- 需指明数据帧的源地址 / 目的地址、是否已被接收、获得令牌的节点编号
- 数据帧从源结点发出,“传递一圈” 后回到源节点
- 数据帧 “传递一圈” 的过程中,会被目的节点复制一份数据,并将数据帧标记为 “已接收”
- 数据帧回到源结点后,如果发现异常状况,就尝试重发;若无异常就将令牌传递下一个节点
- 无论是令牌帧还是数据帧,都只能沿单向传递
- 获得令牌的节点,每次只能发一帧,发完就释放令牌
- 需要用专门的网络设备(MAU)实现集中控制
- 令牌传递协议很适用于负载高的网络(不会发生冲突,效率高)
局域网
- 覆盖较小的地理范围
- 较低的时延和误码率
- 局域网内各节点以帧为单位进行传输
- 支持单播(一对一发送帧)、广播(一对全部发送帧)、多播(一对部分发送帧)
有线局域网
令牌环网(Token Ring)
- 令牌环网的结构为环形拓扑,指所有节点(如电脑、服务器)通过传输介质(电缆)首尾相连,形成一个闭合的 “环形” 数据通路。
- 令牌环网的早期和后期版本,分别使用不同的传输介质。早期令牌环网的介质为同轴电缆,后期为双绞线
- 令牌传递协议是令牌环网的核心介质访问控制(MAC)协议,目的是解决多节点同时发数据导致的冲突
以太网(Ethernet)
同轴电缆以太网
- 结构为总线型
- 传输介质为同轴电缆
- 介质访问控制协议为CSMA/CD协议
双绞线以太网
- 物理结构为星型,逻辑结构为总线型
- 传输介质为双绞线(早期用集线器连接,之后逐步转向交换器链接)
- 介质访问控制协议为CSMA/CD协议(集线器连接或半双工模式下的交换器连接),NULL(全双工模式下的交换器连接)
光纤以太网
- 结构为点对点,用于中继器/集线器/交换机之间的传输
- 传输介质为光纤
- 介质访问控制协议为NULL(用两条光纤实现全双工通信)
无线局域网
WiFi/802.11
- 拓扑结构为星型
- 无线
- 介质访问控制协议为CSMA/CA
网络适配器
- 负责把帧发送到局域网。注:关于 “将 IP 数据报(IP 分组)封装成帧”,有些系统由主机实现,有些系统由网络适配器负责。
- 负责从局域网接收帧。如果收到正确帧,就用 “中断” 通知 CPU;如果收到异常帧,就直接丢弃
- 需要根据接入的局域网类型,按照标准实现数据链路层 + 物理层功能
- 需要完成数据的串 / 并行转换
- 需要支持帧缓冲
以太网与IEEE 802.3

物理层标准
各种传输介质的适用情况
|
标准名称 |
10BASE5 |
10BASE2 |
10BASE - T |
10BASE - F |
|
传输媒体 |
同轴电缆(粗缆) |
同轴电缆(细缆) |
非屏蔽双绞线 |
光纤对(850nm) |
|
编码 |
曼彻斯特编码 |
曼彻斯特编码 |
曼彻斯特编码 |
曼彻斯特编码 |
|
拓扑结构 |
总线形 |
总线形 |
星形 |
点对点 |
|
最大段长 |
500m |
185m |
100m |
2000m |
|
最多结点数目 |
100 |
30 |
2 |
2 |
高速以太网:速率 > 100Mbps 几种高速以太网技术
|
标准名称 |
100Base - T 以太网 |
吉比特以太网 |
10 吉比特以太网 |
|
传输速率 |
100Mb/s |
1Gb/s |
10Gb/s |
|
传输介质 |
双绞线 |
双绞线或光纤 |
双绞线或光纤 |
|
通信方式 |
支持半双工和全双工方式 |
支持半双工和全双工方式 |
只有全双工方式 |
|
介质访问控制协议 |
半双工方式下使用 CSMA/CD 协议 |
半双工方式下使用 CSMA/CD 协议 |
无 |
介质访问控制子层标准
- DIX Ethernet V2标准

- IEEE 802.3标准

单播帧、广播帧的传播
因为路由器、交换机中实现了数据链路层,拥有MAC地址,可以做到点对点传输,也可以进行广播传输。
集线器只实现了物理层功能,因此帧传输到集线器,集线器会广播到其连接的所有节点。
VLAN(虚拟局域网)
传统物理 LAN 中,所有设备处于同一个广播域和冲突域(或通过交换机虽隔离冲突域,但仍共享广播域),意味着:
- 任何设备发送的广播包(如 ARP 请求、DHCP 发现)会被所有设备接收,不仅浪费带宽,更暴露了网络结构;
- 若某台设备被入侵(如感染病毒、被植入木马),攻击者可通过 “横向渗透” 访问同一 LAN 内的所有设备(如服务器、打印机、其他终端),风险无边界扩散。
而 VLAN 通过逻辑隔离广播域,从根本上解决了这一问题。

- 将大型局域网分割为若干个较小的VLAN,每个VLAN是一个广播域
- 每个VLAN对应一个VID
VLAN划分方式:
- 基于接口
- 基于MAC地址
- 基于IP地址。需要网络层支持,让多个局域网的主机组成一个VLAN,跨越路由器
帧的传输:
- 主机与交换机之间传输 标准以太网帧
- 交换机与交换机之间传输 802.1Q 帧
-
- 交换机会在 标准以太网帧 中插入四个字节,包含当前广播帧发送方的VID。到达另一个交换机时会解析出VID,然后广播
帧的结构:

无线局域网
802.11无线局域网的基本概念

- 802.11无线局域网是星型拓扑,中心为接入点(AP),又称无线接入点(WAP)
- 基本服务集(BSS):一个基站(AP) + 多个移动站
-
- 服务集标识SSID:无线局域网的名字,长度不超过32字节
- 基本服务区BSA:一个基本服务集能够覆盖的地理范围
- 门户(Portal):将不同的协议转换,使两类局域网连接变成一个更大的局域网(例如将802.11无线局域网接入802.3有线以太网)
- 扩展服务集ESS:将多个AP连接到同一个分配系统,组成一个更大的服务集
- 漫游:一个移动站从一个基本服务器切换到另一个基本服务集仍然可以保持通信
帧的分类
- 数据帧

- 控制帧:如ACK、RTS、CTS帧
- 管理帧:如探测请求/探测相应帧
网络层
功能概述
异构网络互联
- 异构:每个网络的拓扑结构不同、物理层 & 链路层的实现不同、主机类型也各不相同
- 重要的设备:路由器(Router)
- 在 TCP/IP 文献中,路由器也称为网关(Gateway)
路由与转发
- 路由
-
- 各个路由器之间相互配合,规划 IP 数据报(分组)的最佳转发路径
- 各个路由器需要运行 “路由协议”,最终生成各自的 “路由表”
- 转发
-
- 一台路由器,根据自己的 “转发表”,将收到的 IP 数据报从合适的接口转发出去
- 注:转发表 = 精简版路由表。更精简的数据结构有助于快速检索
拥塞控制
- 拥塞
-
- 原因:网络上出现过量分组,超负荷,引起网络性能下降
- 现象:网络上的分组数增加,但吞吐量反而降低
- 类比:节假日路上的车辆增多到一定程度时,收费站的吞吐量反而降低
- 拥塞控制方法
-
- 开环控制(静态的方法):在部署网络时,就提前设计好预防拥塞的方法。一旦网络系统开始运行,就不再修改
- 闭环控制(动态的方法)
-
-
- 动态监视网络状态,及时发现哪里发生拥塞,并将拥塞信息传递给相关路由器(如:通过 ICMP)
- 相关路由器及时调整 “路由表”
-
IPv4
IP数据报(IP分组)

实际传输中,数据部分的长度会受到数据链路层的的 最短/最长帧长 限制
一个链路层数据帧能承载的最大数据量称为 最大传送单元(MTU)。
如果一个IP数据包的总长度 > 下一段链路的MTU,就需要对其进行分片。到达目标主机的网络层后再对分片进行重组。
那么接收方如何区分分片属于哪个数据报?如何进行组装?
- 通过分片的 标识 字段来判断属于哪个数据报。
- 通过 标志 字段来判断分片是不是最后一个分片。最低为MF(More Fragment),次低位DF(Dont Fragment)。
-
- MF = 1,表示后面还有分片。MF = 0表示这是最后一个分片。
- DF = 1,表示不允许被分片。DF = 0表示允许被分片。
- 最后根据 片偏移 来完成分片的重组(由于首部的 片偏移 字段必须是以 ×8B 为单位,因此除最后一个分片之外,其他分片的长度必须是 8B 的整数倍)
生存时间:数据报在网络中可通过的路由器数的最大值。IP分组每经过一个路由器,TTL--,如果已经减到0,该路由器就丢弃分组并向源主机发送ICMP报文(通知出现异常)+
协议:如果为TCP协议服务设为6,为UDP协议服务设为17。可以让目的主机知道当前数据报向上递交给TCP协议还是UDP协议
IP地址

- 在那个年代,要求每台主机、每个路由器接口被分配的 IP 地址都是全球唯一的
- 路由器和路由器连接的接口可以不分配 IP 地址,但路由器和其他节点连接的接口必须分配 IP 地址
- 从属于同一个网络的所有主机、路由器接口的 IP 地址 “网络号” 都相同
- 当一台新主机接入网络时,需要给它分配一个 IP 地址、并配置 “默认网关”

- 如果是跨网络传播,则需要经过网关。
- ARP协议可以将IP地址转换为对应的MAC地址
- 如果是同一个网络内传播,则无需经过网关。通过ARP协议将目标IP地址转为目标MAC地址,然后将数据报封装为MAC帧直接在网络内部传输。如果要跨网络传输,则需要将数据报封装 吗,则要再经过不同网关传输到另一个网络
子网划分与子网掩码
子网划分是将一个大的网络划分成若干个较小的子网的过程。例如将学校的网络再划分为不同校区的网络。
作用:
- 提高 IP 地址利用率:在没有子网划分前,一个网络无论主机数量多少,都只能使用一个固定类别的网络地址,造成 IP 地址浪费。通过子网划分,可根据实际需求将大网络划分为多个子网,合理分配 IP 地址。例如,一个公司有多个部门,每个部门主机数量不同,子网划分后,可按需分配 IP,减少浪费。
- 增强网络管理和安全性:不同子网可以进行独立的管理和配置,如设置不同的访问控制策略。同时,子网间的通信需要通过路由器,可在路由器上设置防火墙规则,提高网络安全性。
划分原理:
- IP 地址由网络号和主机号两部分组成。子网划分是通过借用主机位来扩展网络号,从而产生子网。例如,对于一个 C 类网络(默认子网掩码是 255.255.255.0 ,即网络号占 24 位,主机号占 8 位 ),若借用 3 位主机位来划分子网,那么子网掩码就变为 255.255.255.224(/27 ),网络号变为 27 位,主机号变为 5 位 。
子网掩码:子网掩码用于标识 IP 地址中网络号和主机号的界限。通过将 IP 地址和子网掩码进行按位与运算,可得到网络前缀(<网络号,子网号>)。例如,IP 地址为 192.168.1.100 ,子网掩码为 255.255.255.0 ,按位与运算后得到网络地址 192.168.1.0 ,网络前缀为192.168.1。只有网络前缀相同的IP地址才属于同一个网络
无分类编制 CIDR

子网划分:
- 定长子网划分:把主机号的前k bit分出来作为定长子网号,可以划分出2^k 个子网
-
- 缺点:每个子网都一样大,不够灵活,IP地址利用率低,资源浪费多
- 变长子网划分:

CIDR 地址块的子网划分技巧:
可以利用类似于 “从根到叶构造二叉哈夫曼树” 的技巧
- 原始 CIDR 地址块作为根节点(假设可以自由分配的主机号占 h bit)
- 每个分支节点必须同时拥有左右孩子,左 0,右 1(反过来也行)
- 每个叶子结点对应一个子网,根据根节点到达叶子结点的路径来分析子网对应的 IP 地址块范围
- 整棵树的高度不能超过 h - 1(因为即便最小的子网也至少要保留 2bit 主机号)
路由聚合
对于一个路由转发表,如果几条路由表项的转发接口相同,部分网络前缀也相同,那么可以将这几条路由表项聚合为一条。这种地址的聚合就是路由聚合,也称构成超网。


采用CIDR技术后,由于路由聚合,一个IP地址转发表项可能匹配多个表项,应使用 最长前缀原则
优缺点:
- 路由聚合可以减少路由表的大小
- 减少查询时间,转发时延更低
- 可能会引入额外的无效地址
网络地址转换NAT
私有 IP 地址(内网 IP)
- 只允许分配给局域网内部的节点,不允许分配给互联网上的节点
- 每个局域网内部都可以自行分配这些私有 IP 地址
- 私有 IP 地址是可复用的,只要求局域网内唯一,不要求全球唯一
全球 IP 地址(外网 IP)
- 通常由 ISP 提供,全球唯一
- 外网 IP 是一个局域网与外界通信时所需使用的 IP 地址
NAT 路由器
- 作用:转发 IP 数据报时,进行内网 IP、外网 IP 的相互转换
- NAT 表,记录地址转换关系 ——<内网 IP: 端口号↔外网 IP: 端口号>
- 一个 IP 数据报
-
- 从内网转发到外网,会更改源 IP 地址、源端口号
- 从外网转发到内网,会更改目的 IP 地址、目的端口号
- NAT 路由器包含传输层的功能(因为端口号是传输层的概念)
不同网络进程之间通信过程:

地址解析协议ARP
在一个局域网内部,可以通过 ARP协议 可以查询到一个 IP 地址对应的 MAC 地址
ARP表(ARP缓存)
- 记录(IP 地址 - MAC 地址)之间的映射关系
- 一个数据结构(每台主机、每台路由器都有自己的 ARP 表)
- 需要定期更新 ARP 表项
查询过程:
- ARP 请求分组
-
- 内容
-
-
- 发送方标识:自身 IP 地址为 X,MAC 地址为 Y
- 目标方查询:需查询 IP 地址为 Z 的设备
-
-
- ARP 请求分组被封装进 MAC 帧,其中帧的目的地址设为全 1(表示广播),源地址为 Y,以广播帧形式发送
- ARP 响应分组
-
- 内容:表明自身为 IP 地址是 Z 的设备,同时说明自身 MAC 地址为 V
- ARP 响应分组被封装进 MAC 帧,帧的目的地址为 Y,源地址为 V,以单播帧形式发送
动态主机配置协议DHCP
DHCP协议用来给刚接入网络的主机动态分配IP地址、配置默认网关、子网掩码。
DHCP是应用层协议,基于UDP,客户 UDP 端口号 = 68、服务器 UDP 端口号 = 67。
DHCP 使用客户 / 服务器模型(C/S)
- DHCP 客户
-
- 就是新接入网络的主机(希望获得 IP 地址等配置)
- DHCP 服务器
-
- 就是负责分配 IP 地址的那台主机,管理一系列 IP 地址池
- 在一个大型网络内可以有多台 DHCP 服务器
执行过程:
- 客户→服务器:DHCP 发现报文
- 携带信息:客户主机的 MAC 地址(还可以提出对 IP 地址租用期的要求)
- 网络层:源 IP 地址 = 0.0.0.0,目的 IP 地址 = 255.255.255.255(广播 IP 数据报)
- 链路层:源 MAC = 客户的 MAC 地址,目的 MAC = 全 1(广播帧)
- 服务器→客户:DHCP 提供报文
- 携带信息:给客户分配的 IP 地址、租用期、子网掩码、默认网关
- 网络层:源 IP=DHCP 服务器的 IP 地址,目的 IP=255.255.255.255(广播 IP 数据报)
- 链路层:源 MAC = 服务器的 MAC 地址,目的 MAC = 客户的 MAC 地址(单播帧)
- 客户→服务器:DHCP 请求报文
- 携带信息:客户机确认要使用的 IP 地址
- 网络层:源 IP=0.0.0.0,目的 IP=255.255.255.255(广播 IP 数据报)
- 链路层:源 MAC = 客户的 MAC 地址,目的 MAC = 全 1(广播帧)
- 服务器→客户:DHCP 确认报文
- 携带信息:与报文2类似
- 网络层:源 IP=DHCP 服务器的 IP 地址,目的 IP=255.255.255.255(广播 IP 数据报)
- 链路层:源 MAC = 服务器的 MAC 地址,目的 MAC = 客户的 MAC 地址(单播帧)

国际控制报文协议ICMP
ICMP 属于网络层,ICMP 报文封装在 IP 数据报中。ICMP 可以让主机或路由器互相报告网络中发生的差错和异常情况
ICMP报文的常见类型
差错报告报文
- 终点不可达
-
- 路由器向发送方反馈:“目的 IP 地址不可达(网络路径不通)”。
- 目的主机向发送方反馈:“目的端口号不存在,无对应进程处理”。
- 时间超过
-
- 路由器向发送方反馈:“IP 数据报到达时 TTL(生存时间)为 0,已被丢弃(传输路程过长)”。
- 目的主机向发送方反馈:“IP 数据报被分片后,规定时间内分片未全部到达,已全部丢弃”。
- 参数问题:向发送方反馈 “IP 数据报首部参数不合法,或首部校验出错”。
- 改变路由(重定向):路由器向发送方反馈 “针对该目的网络,下次可由另一台路由器转发,路径更短”。
- 源点抑制(2012 年后已废弃):曾用于向发送方反馈 “网络发生拥塞,存在丢包情况,请降低发送速率”。
询问报文
- 回送请求(Echo Request):A 向 B 发送:“请确认可达性并回复”。
- 回送回答(Echo Reply):B 向 A 回复:“可达”。
- 时间戳请求(Timestamp Request):A 向 B 发送:“当前本地时间为 xxxx,请问你处时间是多少?”。
- 时间戳回答(Timestamp Reply):B 向 A 回复:“收到请求的时间为 yyyy,发出此回答的时间为 zzzz”。
不必反馈ICMP差错报文的情况
- 若携带 ICMP 差错报告报文的 IP 数据报出错,不再反馈 ICMP 差错
- 若 IP 数据报被分片,则无论几个分片出错,都只反馈一次 ICMP 差错
- 若 IP 数据报的目的地址为多播地址,不反馈 ICMP 差错
- 若 IP 数据报的源地址为特殊地址(如:127.x.x.x、0.0.0.0),则即便发生 IP 数据报异常也不反馈 ICMP 差错

路由算法与路由协议
路由算法
根据能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为两大类:
- 静态路由算法。指由网络管理员手工配置每一条路由。
- 动态路由算法。路由器根据网络流量负载和拓扑结构的变化来动态调整自身的路由表。
距离 - 向量路由算法

网络中的每个节点都从其直接相连的邻居接受路由信息,进行计算后,再将计算结果分发给邻居,无需依赖中心节点。无需关心完整网络节点关系拓扑结构。
一片区域有多个目的网络,因此一个节点可以用向量来表示到每个目的网络的距离。假设有三个目的网络,那么节点v1的最短距离就为<d(net1), d(net2), d(net3)>。
链路状态路由算法
与距离 - 向量算法 “仅依赖邻居信息” 不同,该算法要求每个节点掌握全网拓扑信息,通过全局计算生成最短路径。
链路状态路由算法就是 迪杰斯特拉Dijkstra算法 在路由中的应用。
路由协议
RIP路由协议:基于距离向量路由算法。网络数量越大,距离向量越大。
OSPF路由协议:基于链路状态路由算法。要求每一台路由器都要建立整个网络的拓扑图。
分层的路由协议
但全世界的路由器、网络数量庞大,不能让每一台路由器都知道全世界的网络情况。因此需要分层的路由协议。

- 将全世界的网络划分为多个相互独立的自治系统AS(Autonomous System)。每一个自治系统拥有全球唯一的 AS编号(Autunomous System Number, ASN)
- AS 的管理单位有权决定在本自治系统内,使用何种内部路由协议(如:RIP、OSPF)。
- 每个 AS 至少要有一台自治系统边界路由器(如 R6)与其他自治系统相连。各边界路由器之间,使用统一的外部路由协议(如:BGP-4)。
- 自治系统之间的路由选择也称域间路由选择,自治系统内部的路由选择也称域内路由选择。
互联网把路由协议分为两大类:
- 内部网关协议(Interior Gateway Protocol,IGP):用于AS内部的路由选择,如RIP、OSPF
- 外部网关协议(External Gateway Protocol,EGP):用于AS之间的路由选择,如BGP
RIP 路由信息协议(Routing Information Protocol)

RIP 属于应用层,使用 UDP 传送数据
定义了两种报文:
- Request报文:请求邻居路由器发送其路由表,用于启动和查询
- Response报文:响应请求或定期发送给邻居 路由表,携带完整或部分路由表(由于每个 Response 报文最多携带 25 个路由表项信息,因此如果路由表太大,就需要拆分为多个 Response 报文,每个报文携带部分路由表)
如何定义路径长度?
- RIP 使用跳数(Hop Count)(或称距离)来衡量到达目的网络的距离。路由器到直连网络的距离为 1;而每经过一个路由器,距离就加 1。
- RIP 认为好的路由就是跳数最少的。
- RIP 允许一条合法路径距离不能超过 15。距离等于 16 时表示网络不可达。可见 RIP 只适用于小型自治系统。
如何定义路由表格式?
- 每个路由器都要维护自己的路由表,路由表项有三个关键字段:<目的网络 N,距离 d,下一跳路由器地址 X>。
- 每个路由器都要维护从它自身到其他每个目的网络的距离记录,即距离向量(事实上,距离向量信息包含在路由表中,RIP 协议使用 “距离向量路由算法” 计算最短路径)
运行 RIP 的路由器之间如何交换必要信息?
- 仅和直接相邻的路由器交换信息。其实就是距离向量
- 交换的信息是本路由器所知道的全部信息,即自己的路由表。
- 通常按固定的时间间隔(通常为 30 秒)交换路由信息。为了加快 RIP 收敛速度,也可以引入触发更新(Triggered Update)机制:当路由器发现网络拓扑发生变化时,立即向相邻路由器通告拓扑变化后的路由信息,而不必等待 30 秒。
OSPF 开放最短路径优先协议(Open Shortest Path First)

- OSPF 属于网络层
- OSPF 使用 IP 协议提供的服务,IP 首部的协议字段 = 89
- OSPF 的 PDU 常译为 “OSPF 分组” 或 “OSPF 数据报”
OSPF 协议定义了 5 种 OSPF 分组类型:
原理:
基于链路状态路由算法计算最佳转发路径,因此首先得让每一台路由器都建立整个网络的拓扑图。
每台路由器如何建立拓扑图?
每个节点可以直接探测到自己与哪些节点直连,并形成一个链表。依次扫描所有节点,将所有的链表拼接起来就是整个网络的拓扑图。
路由器怎么把自己探测到的信息给其他路由器?
- 要传播的信息是与自己直连的所有链路状态(LS, Link - State)
- 洪泛法(flooding)来传播信息
- 路由器探测到与自己直连的链路或节点发生变化时,就立即洪泛最新的链路状态信息
特点:
- 允许对每条路有设置不同的代价
- 若到同一目的网络有多条代价相同的路径,则可以将通信量分配给这几条路径,实现负载均衡
- 具有鉴别功能,保证仅在可信赖的路由器之间交换链路状态信息
- 支持可变子网划分和无分类编制 CIDR
基本工作原理

- 虽然使用 Dijkstra 算法能计算出完整的最优路径,但路由表中不会存储完整路径,而只存储 “下一跳”
- 若网络拓扑发生变化,就会立即引起洪泛,从而引起各台路由器的 LSDB(Link-State Database链路状态数据库,即为路由器内部的网络拓扑图) 变化,并再次运行 Dijkstra 算法,构造新的路由表
为了使OSPF能用于规模更大的网络,可以将一个自治系统再划分为若干区域(Area),划分区域后,洪范法交换链路状态信息的范围局限在各个区域内,可以减少网络通信量

- 一个 OSPF 自治系统内,只有一个主干区域(Backbone Area)
-
- 主干区域的作用是连通其他区域
- 主干区域的标识符 Area ID = 0
- 主干区域内,至少有一台自治系统路由器(ASBR)与其他自治系统相连
- 每一个非主干区域,都至少有一台区域边界路由器(ABR)与主干区域相连
OSPF的分组类型
|
Type 值 |
英文全称 |
英文缩写 |
中文译名 |
|
1 |
Hello Packet |
Hello Packet |
问候分组 |
|
2 |
Database Description Packet |
DD Packet |
数据库描述分组 |
|
3 |
Link State Request Packet |
LSR Packet |
链路状态请求分组 |
|
4 |
Link State Update Packet |
LSU Packet |
链路状态更新分组 |
|
5 |
Link State Acknowledgment Packet |
LSAck Packet |
链路状态确认分组 |

传输层
传输层服务
端口的作用
- 通过 “端口号” 标识本主机的一个特定进程,每台主机的端口号是相互独立的,并且TCP、UDP 两种协议的端口号是相互独立的
- TCP 或 UDP 协议,通过 Socket 套接字 ={IP 地址:端口号},唯一地标识网络中的一台主机上的一个应用进程
- 端口号的分类
-
- 服务器使用的端口号
-
-
- 熟知端口号 0~1023—— 通常只能用于被熟知的重要应用程序
- 登记端口号 1024~49151
-
-
- 客户端使用的端口号 —— 短暂端口号 49152~65535
功能
- 实现端到端(进程到进程)的通信
- 复用和分用
-
- 复用(从上到下):在发送数据的时候,同一台主机上的多个进程可以使用同一个传输层协议
- 分用(从下到上):在接收数据的时候,传输层可以把数据正确交付到目的进程
- 差错检测
-
- TCP 检测出差错后丢弃数据,并通知发送方重传
- UDP 检测出错误后直接丢弃数据,且不通知发送方
- 向应用层提供两种服务
-
- 面向连接的、可靠的端到端传输服务(TCP)—— 确保数据正确 / 完整,但开销大、实时性较差
- 无连接的、不可靠的端到端传输服务(UDP)—— 数据可能出错 / 丢失,但速度快、开销小
UDP协议
UDP与TCP对比

- UDP 首部很小,只占 8B
- UDP 每次传输一个完整的报文,不支持报文自动拆分、重装
- UDP 是无连接的、不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制
- UDP 支持一对一(封装成单播 IP 数据报)、一对多传输(封装成广播 / 多播 IP 数据报)

- TCP 首部更大,占 20~60B
- TCP 支持报文自动拆分、重装,因此可以传输长报文
- TCP 是有连接的、可靠的、支持拥塞控制
- TCP 仅支持一对一传输(因为通信双方的传输层必须先建立连接)
UDP数据报

UDP检验

将原始的 48bit 数据分成三组 16bit 的数据依次进行二进制加法(最高位产生的进位需要回卷),然后将得到的中间结果进行取反,所得到的就是校验和。并将校验和和原始数据组合在一起成为新的数据发送。
接收方对传输过来的数据进行验证,同样将数据拆分为 16bit 的数据进行二进制加法,如果加法结果不全是1,那么就说明发生了比特错误。
依此为基础,就可以理解UDP的检验
发送方的传输层

- 传输层的 UDP 协议在计算检验和之前,先添加伪首部
- 把伪首部、首部、数据部分以 16bit 为一组,进行二进制加法(最高位产生的进位需要回卷)
- 将最终的加法结果逐位取反,就得到 16bit 检验和,将其填入 UDP 首部
- 去掉伪首部,并将 UDP 数据报交给网络层,封装成 IP 数据报
接收方的传输层

- 网络层向传输层递交 UDP 数据报
- 传输层在 UDP 数据报之前,添加伪首部
- 把伪首部、UDP 首部、数据部分以 16bit 为一组,进行二进制加法(最高位产生的进位需要回卷)
- 如果加法结果为全 1,说明没有比特错误,于是接收该 UDP 数据报,并根据目的端口号,向应用层递交报文。如果加法结果不是全 1,说明有差错,于是丢弃该 UDP 数据报
TCP协议

工作流程
三大阶段:
- 建立连接(三次握手)
- 数据传输
- 释放连接(四次挥手)

- 每次建立TCP连接,双方可以传输多个报文
- TCP是面向字节流的,无论传输多少个报文,对于TCP协议来说都是一连串字节流
- 在 TCP 连接建立过程中,客户端和服务器会在 SYN 报文段中通过 TCP 选项字段携带自己期望的 MSS 值(Maximum Segment Size,最大段长),进行 MSS 的协商。但如果一方未在 SYN 报文中通告 MSS,那么另一方会使用默认值 536 字节(IPv4 最小安全值)。
TCP报文段

序号(seq):标记数据部分的第一个字节在原始字节流中的位置
确认号(ack 或 ack_seq):表示序号在该确认号之前的所有字节都已正确收到
ACK:ACK = 0时,ack_seq无效,ACK = 1时,ack_seq有效
数据偏移:TCP首部长度,以 ×4B 为单位
填充:凑足 4B 的整数倍
URG:URG = 1时,表示当前TCP报文段为紧急数据,应尽快插队
紧急指针:紧急数据专用序号
PSH:PSH = 1时,表示希望接受方尽快回复
SYN:同步位。当SYN = 1时表示这是一个连接请求或连接接受报文。只有握手1、2的SYN = 1,其他的阶段都为0
FIN:终止位(Finish),当FIN = 1时,表明此报文段的发送方数据已发送完毕,要求释放传输连接。只有挥手1、挥手3的FIN = 1,其他的阶段都为0
窗口(rwnd 或 rcvwnd):16bit,表示接收窗口的大小。即从本报文段首部中的ack_seq算起,接收方还能接收多少数据
校验和:原理与UPD的校验和计算方式相似
连接管理具体流程
建立连接(三次握手)

- 握手1、2不携带数据,但还是要消耗一个序号。只有握手1、2的SYN = 1。只有握手1的ACK = 0
- 握手3可以携带数据。
- 如果握手3不携带数据,那么不消耗序号。
释放连接(四次挥手)

一开始数据传输是双向的,当客户进程A发出 挥手1 ,A-B 的数据传输通道就已经关闭了。但 B-A 的通道依然存在,因此 挥手2 依旧可以单向传输数据。当挥手3 发出,B-A的通道也关闭了,因此挥手4就不可以携带数据。
- 在 TCP 全过程中,只有挥手1、挥手3的 FIN=1
- 挥手1、挥手3即使不携带数据,也要消耗一个序号
- 挥手2可以携带数据
- 挥手4不可以携带数据
MSL(MAximum Segment Lifetime,最长报文短寿命),是由TCP协议规定的一个固定时间长度
为什么要服务器进程A要等待2MSL才会关闭连接?
因此网络是不稳定的,有可能挥手4的信息并没有传送到服务器进程B,这时候服务器进程B就会再次发送挥手3给服务器进程A,这是服务器进程A还在TIME-WAIT没有关闭,因此可以实现重发。如果重复收到了挥手3,那么计时器会重置。
TCP可靠传输与流量控制
序号
进程在建立连接时确定起始序号,数据传输过程中,每个字节对应一个序号
确认机制

- 累积确认规则:如果收到 ack_seq=n,说明序号在 n 之前的所有字节都已正确接收
- 返回 ACK 的时机 - 推迟确认:
-
- 推迟时间最多不能超过 0.5 秒(TCP 标准规定)
- 如果自己也有数据要传送给对方,立即返回 ACK 段,并 “捎带” 自己的数据
- 若连续收到两个长度为 MSS 的报文段,就应该立即返回 ACK 段
- 两种 ACK 段:
-
- 专门确认(咸鱼不规范术语):一个 ACK 段只有 TCP 首部,而没有携带数据
- 捎带确认:一个 ACK 段顺道携带了数据,就是 “捎带确认”
重传机制

- 超时重传:每发出一个报文段,就设置一个计时器。若计时器到期还没收到确认,就重传这一报文段,并重设计时器
- 快重传(冗余 ACK):
-
- 作用:让可能出错的报文段尽早重传,而不是非要等到超时再重传
- 配套机制:立即确认
-
-
- 每收到一个 TCP 报文段,就立即返回一个 ACK 段
- 即使收到一个失序报文段,也要立即返回 ACK 段(失序报文段会导致冗余 ACK)
-
-
- 当发送方连续收到三个确认号相同的冗余 ACK 时,就立即重传该确认号对应的报文段
TCP拥塞控制
流量控制:控制端到端的数据发送量,是局部的
拥塞控制:控制整个网络中每台主机的数据发送量,降低路由器负载,是全局的
如何判断网络拥塞?
- 发出的每个报文段,都能顺利地收到 ACK 确认 —— 不拥塞
- 发出的报文段未能按时收到 ACK,引发超时重传 —— 严重拥塞
- 收到冗余 ACK,引发快重传 —— 有点拥塞
如果检测到网络拥塞怎么办?
- 迅速减少发送的数据量
- 严重拥塞就迅速缩小拥塞窗口
- 有点拥塞就适当缩小拥塞窗口
算法

慢开始算法:cwnd 值从 1 开始,每收到一个 ACK,就让 cwnd+1(当 cwnd<ssthress 时适用)
拥塞避免算法:在一个 RTT 内,即使收到多个 ACK,也只能让 cwnd+1(当 cwnd≥ssthress 时适用)
当发生网络严重拥塞(超时重传)时,会适当改变门限ssthresh的值(ssthresh = cwnd / 2,但不能小于2),并将窗口改为1
慢开始算法:cwnd 值从 1 开始,每收到一个 ACK,就让 cwnd+1(当 cwnd<ssthress 时适用)
拥塞避免算法:在一个 RTT 内,即使收到多个 ACK,也只能让 cwnd+1(当 cwnd≥ssthress 时适用)
当发生网络拥塞(冗余ACK)时,会适当改变门限ssthresh的值(ssthresh = cwnd / 2,但不能小于2),适当的缩小拥塞窗口(cwnd /= 2)
应用层
概述
应用层对应用程序的通信提供服务。应用层协议定义:
- 应用进程交换的报文类型,请求还是响应?
- 各种报文类型的语法,如报文中的各个字段及其详细描述。
- 字段的语义,即包含在字段中的信息的含义。
- 进程何时、如何发送报文,以及对报文进行响应的规则。
应用层的功能:
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
应用层的重要协议:
- FTP
- SMTP、POP3
- HTTP
- DNS
客户/服务器(C/S)模型

服务器:提供计算服务的设备。
- 永久提供服务
- 永久性访问地址 / 域名
客户机:请求计算服务的主机。
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态 IP 地址
- 不与其他客户机直接通信
应用:Web,文件传输 FTP,远程登录,电子邮件
P2P模型

- 不存在永远在线的服务器
- 每个主机既可以提供服务,也可以请求服务
- 任意端系统 / 节点之间可以直接通讯
- 节点间歇性接入网络节点
- 可能改变 IP 地址,可扩展性好,网络健壮性强
DNS系统
人们通过记忆IP地址,并且通过IP地址去寻找网站是困难且麻烦的。如何让访问网站更加遍历?
域名的出现解决了这个问题,可以通过简单的域名直接访问网站。那么有谁来实现域名到IP地址的转换呢?就是DNS(Domain Name System)系统
域名
一个域名的不同部分也是有层次划分的,分为顶级域名、二级域名、三级域名。
例如www.csdn.com:com为顶级域名,csdn为二级域名,www为三级域名。出自之外,还有个根在com之后,为一个“.”。可以说www.csdn.com的完整域名为www.csdn.com.
域名服务器
DNS 域名服务器是实现这一功能的服务器,主要分为以下几类:
- 根域名服务器:
-
- 是 DNS 域名解析系统的最高层级
- 全球共有 13 组根服务器,负责返回顶级域名服务器的地址
- 顶级域名服务器:
-
- 负责管理顶级域名(如.com、.org、.cn 等)
- 能返回权威域名服务器的地址
- 权威域名服务器:
-
- 负责特定域名的解析
- 存储并提供该域名下主机的 IP 地址等信息
- 本地域名服务器:
-
- 由互联网服务提供商(ISP)配置
- 作为用户主机的首选域名服务器,缓存解析结果以提高效率
域名解析过程
递归查询

首先查询本地域名服务器有没有目标IP地址,如果没有,则以本地域名服务器为客户端向根域名服务器发送请求。如果根域名服务器没有,则以根域名服务器为客户端向顶级域名服务器发送请求。如此递归下去知道权限域名服务器获得到IP地址,然后再顺着递归的路径返回。
迭代查询

先在本地域名服务器查询,然后一直以本地域名服务器为客户端。先向根域名服务器发送请求,本地域名服务器将根域名服务器返回的结果再向顶级域名服务器请求。本地域名服务器再拿顶级域名服务器返回的结果向权限域名服务器请求。本地域名服务器得到最终的结果在返回给原客户端。
高速缓存:
- 域名服务器首次解析某域名时,会按正常流程(递归 + 迭代)获取 IP 地址,并将 “域名 - IP” 对应关系存入缓存。
- 为避免缓存数据过期失效,每条缓存记录会附带一个TTL(生存时间) ,由权威域名服务器设定(通常为几分钟到几小时)。
- 当再次收到相同域名的解析请求时,服务器先检查缓存:
-
- 若缓存存在且未超过 TTL,直接返回缓存中的 IP 地址。
- 若缓存不存在或已过期,则重新发起完整解析流程,并更新缓存。
文件传输协议(File Transfer Protocol)

- 控制连接始终保持
- 数据连接保持一会
- 是否使用 TCP 20 端口建立数据连接与传输模式有关
- 主动方式使用 TCP 20 端口
- 被动方式由服务器和客户端自行协商决定(端口 > 1024)
万维网(WWW)
万维网(World Wide Web):是一个全球范围的、分布式、联机式的信息存储空间,资源通过HTTP协议传送给用户
组成
- 统一资源定位符(URL)
-
- URL = <协议>://< 主机 >:< 端口 >/< 路径 > —— 指向万维网上的某个特定资源
- 端口、路径可以省去,因为有默认值,如:Web 服务器默认 80 端口,默认首页 (index.html)
- 超文本传输协议(HTTP)
-
- 应用层,基于 TCP。HTTP 协议定义了 “HTTP 请求报文”、“HTTP 响应报文” 两种数据结构
- 超文本标记语言(HTML)
-
- 一种文档结构的标记语言,使用一些约定的标记对页面上的各种信息(包括文字、图像、视频等)、格式进行描述
访问网页的过程
- 用户输入网址(域名)
- 浏览器通过 DNS 服务器查询域名对应的 IP 地址(浏览器会将查询结果 “域名→IP” 缓存到本地)
- 浏览器与 <Web 服务器 IP 地址:80 端口> 建立 TCP 连接
- 浏览器在握手3中携带 HTTP 请求报文(指明要访问哪个 html 网页)
- 服务器返回 HTTP 响应报文(携带 html 文件)
- 如果 html 引用了其他 n 个元素,还需 n 组 HTTP 请求 & 响应(持续、非持续工作方式有所区别)
HTTP协议的工作方式
非持续连接

建立TCP连接后,获得HTTP响应报文后就释放连接
持续连接

流水线
建立TCP连接后会一直持续,直到依次获取到所有的HTTP响应报文,然后再根据设置的时间参数断开连接。首先解析html文件,了解还需要获取多少元素,然后一次性发出所有的HTTP请求。
非流水线
建立TCP连接后会一直持续,直到依次获取到所有的HTTP响应报文,然后再根据设置的时间参数断开连接。每次只发出一个HTTP请求,得到响应后再发下一个。
超文本传输协议HTTP
报文格式

HTTP 请求报文中常用的几个方法
|
方法(操作) |
意 义 |
|
GET |
请求读取由 URL 标识的信息 |
|
HEAD |
请求读取由 URL 标识的信息的首部 |
|
POST |
给服务器添加信息(如注释) |
|
CONNECT |
用于代理服务器 |
Cookie
Cookie 是 Web 技术中用于在客户端(浏览器)存储少量数据的机制,主要用于实现用户身份识别、状态保持等功能,核心是在浏览器与服务器之间建立 “记忆” 关联。
服务器可以通过Cookie来判断当前通信的进程是哪个用户。

更多推荐
所有评论(0)