这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

计算机网络

computer_network

计算机网络在408试卷中占据25分,是分数占比最小的一门科目,包含8道选择题以及1道大题。但是复习难度其实并不小,因为知识点庞杂且琐碎,记忆性内容较多,理解性内容较少,并且在选择题中常常考察冷门知识点,所以想在25分中得到20分以上其实并不容易。

建议大家在复习计算机网络时要抓住主干知识,确保大题和基本的选择题题型可以准确无误地做出来。对于一些冷门知识点,可以选择性放弃,只保留一个基本的印象即可,不需要深入理解,如果真地考察到,可以根据自己的印象大致蒙一个答案。


计算机网络的考察目标包含如下内容(来自408考研大纲):

  1. 掌握计算机网络的基本概念、基本原理和基本方法。
  2. 掌握典型计算机网络的结构、协议、应用以及典型网络设备的工作原理。
  3. 能够运用计算机网络的基本概念、基本原理和基本方法进行网络系统的分析、设计和应用。

1 - 计算机网络体系结构

可能在选择题中考察,需要掌握TCP/IO模型和ISO/OSI模型的不同,并且能够从一个宏观的角度看待网络不同层次之间的联系。

学习思维导图:

# 计算机网络概述

## 基本概念

- 定义、组成和功能
- 分类
- 主要性能指标

## 体系结构

- 分层结构
- 网络协议、接口、服务等概念
- ISO/OSI参考模型和TCP/IP模型

1.1 - ISO/OSI和TCP/IP模型

掌握ISO/OSI模型和TCP/IP的每一层功能,以及两个模型的对应关系,可能在选择题中考察。
Application
Application
Presentation
Presentation
Session
Session
Application
Application
Transport
Transport
Transport
Transport
Network
Network
Network
Network
Data Link
Data Link
Physical
Physical
Network
Interface
Network...
Text is not SVG - cannot display

ISO/OSI模型

ISO/ISO模型 也叫做 国际标准化组织/开放系统互联模型

  • 物理层(Physical Layer):负责物理介质传输数据比特流,涵盖了电压、电流、光信号等硬件细节。
  • 数据链路层(Data Link Layer):提供数据包的可靠传输,处理帧的传输和接收,错误检测和纠正。
  • 网络层(Network Layer):负责数据包的路由和寻址,以及数据包的跨越多个网络的传递。最著名的网络协议是IP(Internet Protocol)。
  • 传输层(Transport Layer):提供端到端的数据传输,负责数据的分段和重新组装。最常见的传输协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。
  • 会话层(Session Layer):负责建立、管理和终止通信会话,处理会话控制和同步。
  • 表示层(Presentation Layer):处理数据的格式转换、加密解密和压缩解压缩等数据表示问题。
  • 应用层(Application Layer):最高层,包括各种应用程序和网络服务,例如电子邮件、文件传输和远程登录。

TCP/IP 模型

  • 网络接口层(Network Interface Layer):与ISO/OSI的物理层和数据链路层类似,处理物理介质和数据链路的细节。
  • 互联网层(Internet Layer):对应于ISO/OSI的网络层,包括了IP协议,用于路由和数据包交换。
  • 传输层(Transport Layer):与ISO/OSI的传输层相对应,包括了TCP和UDP协议。
  • 应用层(Application Layer):与ISO/OSI的应用层相对应,包括了各种应用程序和协议,如HTTP、FTP、SMTP等。

数据封装层次

应用层的数据通过计算机网络多个层次的封装发送至信道中,封装的过程如上图所示。

这里需要强调一下的是每一层的数据封装名称

首要的是掌握英文的名词表述,相比中文,这些表述更加统一和精准,中文翻译良莠不齐,常常有多种表述方式,但是表述的都是一个概念,能见词闻义即可。

  • 传输层:UDP Datagram(UDP 数据包)、TCP Segment(TCP 数据段,TCP 分段)
  • 网络层:IP Packet(IP 分组,IP 数据包,IP 报文)
  • 数据链路层:Frame(帧)

1.2 - 网络设备总结

掌握不同网络层次设备的功能,以及能否隔离冲突域和广播域,可能在选择题中考察,也会在大题中作为知识点进行考察。
设备功能描述设备位于哪一层隔离冲突域?隔离广播域?
中继器放大或再生数字信号物理层
集线器多个设备的连接,广播所有传入的数据物理层
网桥连接并分隔局域网的段落,减少冲突数据链路层
交换机连接多个设备,仅向目标设备转发数据数据链路层
路由器连接不同的网络并路由数据网络层

冲突域:在一个局域网段中,如果两台计算机在同一时间发送数据,则可能会发生数据冲突。冲突域是可能发生数据冲突的网络区域。交换机可以隔离冲突域,因为它仅向目标设备转发数据。

广播域:在一个局域网内,广播数据包会被所有设备接收。广播域是所有设备都会接收广播包的网络区域。路由器可以隔离广播域,因为它不会转发广播数据包。

1.3 - 各层协议总结

了解各层所包含的网络协议,以及应用层协议使用的端口号、是依赖UDP还是TCP。

应用层协议

协议端口号依赖协议
HTTP80 (HTTP), 443 (HTTPS)TCP
FTP20 (数据传输), 21 (控制)TCP
SMTP25TCP
POP3110, 995 (安全版)TCP
DNS53主要UDP, 部分TCP
DHCP67 (服务器端), 68 (客户端)UDP

传输层

TCP, UDP

网络层

IP, ICMP

数据链路层

ARP, PPP, HDLC

2 - 物理层

在选择题中考察,掌握相关概念即可。

学习思维导图:

# 物理层

## 通信基础

- 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念
- 奈奎斯特定理和香农定理
- 编码和调制
- 电路交换、报文交换与分组交换
- 数据报和虚电路

## 传输介质

- 双绞线、同轴电缆、光纤与无线传输介质
- 物理层接口的特性

## 物理层设备

- 中继器
- 集线器

2.1 - 通信概念

需要了解各个通信指标的概念、奈奎斯特定理和香农定理的应用场景(在哪种信道下适用),以及最大比特率的计算公式,可能在选择题中考察。

通信指标

  1. 信道 (Channel)
    • 是指进行信息传输的媒介或路径。这可能是一个物理的媒介,例如电缆,或者是无线的,如无线电波。
  2. 信号 (Signal)
    • 是载有信息的物理现象。例如,电信号、光信号或无线电波。
  3. 带宽 (Bandwidth)
    • 描述的是信号的频率范围,或者更具体地说,是通信信道所能传输的最大数据速率。在计算机网络中,带宽通常用来指代网络的数据传输速率,单位可能是比特/秒(bps)。
  4. 码元 (Symbol)
    • 在数字通信中,码元代表一个信号或符号的特定状态。例如,对于二进制信号,一个码元可能表示一个比特,其值可以是0或1。
  5. 波特 (Baud)
    • 表示每秒传输的码元数。波特率和比特率不一定相同。例如,如果每个码元代表2比特,那么比特率是波特率的两倍。
  6. 速率 (Rate)
    • 是指数据的传输速度。常见的单位有比特/秒(bps)、字节/秒(Bps)等。
  7. 信源 (Source)
    • 产生或发送信息的设备或实体。
  8. 信宿 (Sink or Destination)
    • 是指接收信息的设备或实体。

速率可以用两种指标来衡量:

  • 比特率:每秒传输的比特数量
  • 波特率:每秒传输的波特数量

一个码元可以包含多个比特,如果一个码元携带 $n$ 比特的信息量,则波特率M对应的比特率为 $Mn$ bit/s

奈奎斯特定理

奈奎斯特定理说明了在 理想低通(没有噪声、带宽有限) 的信道中的数据极限传输速率,当传输速率小于等于该速率时,不会产生码间串扰。

奈奎斯特定理的核心思想是,为了正确地重构一个连续信号,需要以足够高的采样率对该信号进行采样。具体来说,奈奎斯特定理提供了以下关键观点:

  1. 最低采样率: 奈奎斯特定理规定,为了准确地采样和重构一个连续信号,采样率必须至少是信号中最高频率成分的两倍(或更高)。这就意味着,如果信号的最高频率成分是 f,则采样率应该至少为 2f。
  2. 奈奎斯特频率: 最高频率成分的一半,也称为奈奎斯特频率,是一个重要的参考点。信号的频率成分高于奈奎斯特频率的部分将无法正确地重构,导致混叠(aliasing)效应,损害信号质量。
  3. 混叠效应: 如果采样率低于奈奎斯特频率的两倍,那么高于奈奎斯特频率的信号成分将在采样后出现混叠,即被误识别为低于奈奎斯特频率的信号成分,从而导致信息丢失和失真。

若 $W$ 是理想低通信道的带宽,则极限波特率为 $2W$ (单位为baud/s),若用 $V$表示每个码元离散电平的数据($V$ 种不同的电平可以最多表示 $log_2{V}$ 个比特),则极限传输率为 $2W \cdot log_2{V}$ (单位为b/s)

香农定理

香农定理说明了在 有噪音干扰、带宽有限 的信道中的数据极限传输速率,当实际传输速率小于等于改速率时,可以做到不产生误差。

香农定理的核心思想是:在一个通信系统中,如果你知道了消息的概率分布以及系统的信噪比(Signal-to-Noise Ratio,SNR),那么你可以计算出一种编码方式,使得在给定的信噪比下,消息可以以极高的可靠性进行传输,同时使得信息传输的速率最大化。

具体来说,香农定理提出了以下几个重要概念和结论:

  1. 信道容量(Channel Capacity):信道容量是一个通信信道所能传输的最大信息速率。它取决于信道的带宽和信噪比,通常以比特每秒(bps)为单位来表示。
  2. 香农公式:香农定理提供了一个计算信道容量的数学公式,该公式将信道的带宽和信噪比与最大信息传输速率联系起来。公式如下:

$$C = B * log_2(1 + SNR)$$

其中,$C$ 表示信道容量,$B$ 表示信道的带宽(单位为赫兹),$SNR$ 表示信噪比。

信噪比 $SNR$ 的计算方式为 $10 * log_{10}(P_s / P_n)$,其中 $P_s$ 是信号的功率,$P_n$ 是噪声的功率。

  1. 编码定理:香农定理还指出,存在一种编码方式,使得可以接近信道容量的极限。这意味着通过合适的编码方法,可以在接近理论最大速率的同时保持通信的可靠性。

2.2 - 编码和调制

需记住各种编码方法所对应的0/1表示,以及各种调制方法的概念,可能在选择题中考察。

编码类型

二进制数据
二进制数据
0
0
1
1
0
0
1
1
1
1
0
0
1
1
0
0
归零编码
归零编码
非归零编码
非归零编码
反向非归零编码
反向非归零编码
曼彻斯特编码
曼彻斯特编码
差分曼彻斯特编码
差分曼彻斯特编码
Text is not SVG - cannot display
编码方法1 的表示0 的表示
归零编码(RZ)在时钟周期内由高电平跳到低电平在时钟周期中保持低电平
非归零编码(NRZ)时钟周期内保持高电平时钟周期内保持低电平
反向不归零编码(NRZI)电平与上一个时钟周期保持一致电平相比上一个时钟周期发生跳变
曼彻斯特编码(Manchester Encoding)在时钟周期内由高电平跳到低电平在时钟周期中由低电平跳到高电平
差分曼彻斯特编码(Differential Manchester Encoding)电平变化与上一个时钟周期相反电平变化相比上一个时钟周期一致

调制方法

0
0
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
0
基带信号
基带信号
2ASK
2ASK
2FSK
2FSK
2PSK
2PSK
Text is not SVG - cannot display

了解如下4中调制方法:

  1. ASK (幅度偏移键控 - Amplitude Shift Keying)
  2. FSK (频率偏移键控 - Frequency Shift Keying)
  3. PSK (相位偏移键控 - Phase Shift Keying)
  4. QAM (象限幅度调制 - Quadrature Amplitude Modulation)
调制技术基本思想表示方法例子常见应用
ASK通过改变载波的幅度表示数据0: 无信号;1: 最大幅度的信号光纤通信
FSK通过改变载波的频率表示数据0: 900 Hz;1: 901 Hz低速无线通信、电话系统
PSK通过改变载波的相位表示数据0: 0°相位;1: 180°相位高速无线通信,例如Wi-Fi
QAM同时改变载波的幅度和相位表示数据16种不同的幅度和相位组合数字电视、Wi-Fi、有线和无线通信系统

2.3 - 交换方式

掌握三种交换方式的发送方法,并且学会计算传输时延和传输时间,可能在选择题中考察。

交换

连接建立
A
B
C
D
数据传送
连接释放
电路交换
A
B
C
D
报文交换
A
B
C
D
分组交换
报文
报文
报文
报文
P
P
P
P
P
P
P
P
P
比特流直达终点
报文
报文
报文
分组
分组
分组
存储转发
存储转发
  1. 电路交换(Circuit Switching):
    • 电路交换是一种传统的通信方式,最常见的例子是电话网络。
    • 在电路交换中,通信的两端建立一个物理连接,这个连接在通信会话的整个过程中保持打开,即使没有实际数据传输。
    • 通信资源(带宽)在建立连接时分配给通信各方,因此在通话期间一直被占用,即使不说话也占用资源。
    • 电路交换适用于对通信质量要求高、稳定性重要的应用,但效率较低,不适合数据传输等需要灵活带宽分配的应用。
  2. 报文交换(Message Switching):
    • 报文交换是一种通信方式,其中消息以整个报文的形式从源节点传输到目标节点。
    • 在报文交换中,消息从源节点发送到中间节点(交换节点),然后中间节点决定将消息转发到哪个目标节点。
    • 报文交换通常用于电子邮件系统和一些数据通信应用中。
    • 报文交换效率相对较低,因为整个报文必须接收后才能进行处理和转发,而不是逐比特或逐分组进行转发。
  3. 分组交换(Packet Switching):
    • 分组交换是一种现代的通信方式,它将数据分成较小的数据包(分组)并独立传输。
    • 数据包在网络中独立传输,可能通过不同的路径到达目标,然后在目标处重新组装。
    • 分组交换适用于大多数现代数据通信,包括互联网,因为它具有高效的带宽利用率、灵活的路由、容错性和适应性。
    • 常见的分组交换协议包括IP(Internet Protocol)。

数据包和虚电路

结点A
结点D
结点D
结点C
结点E
结点F
结点G
主机A
主机B
结点A
结点D
结点D
结点C
结点E
结点F
结点G
主机A
主机B
P1
P2
P1
P1
P1
P1
P2
P2
P2
P2
ACK
ACK
ACK
ACK
ACK
数据报
虚电路
ACK
特性数据报虚电路
连接性无连接,每个分组独立处理有连接,建立虚电路后传输分组
路由每个分组独立路由虚电路建立后,沿着相同路径路由
通信开销较低,不需要建立和维护连接较高,建立连接需要额外开销
分组到达顺序不保证分组到达的顺序保证分组按照发送顺序到达
分组丢失可能出现分组丢失,需要上层协议处理较低的丢包率,可靠传输
带宽利用率不需要预留带宽,按需使用预留带宽,可能造成资源浪费
适用场景Internet中的IP数据包电路交换、ATM等有连接通信
例子Internet中的IP分组早期电话网络、ATM网络

数据报和虚电路是两种不同的通信服务模型,适用于不同的通信需求和网络类型。数据报适合于互联网等不保证可靠传输的环境,而虚电路适合于对可靠性要求较高的电路交换和ATM等网络。选择合适的通信模型取决于应用需求和网络设计。

2.4 - 物理层设备

了解物理层设备的概念即可,注意需要记住各种电缆类型的英文缩写。

集线器

定义:集线器(Hub)是一个简单的物理层设备,用于将多台计算机或其他网络设备连接在一起,从而形成一个单一的网络段。

工作方式:当一个设备通过集线器发送数据时,数据会被广播到集线器的所有其他端口。每个连接到集线器的设备都会收到这些数据,但只有目标设备才会处理它。集线器本身不会分析或查看传输的数据。

局限性: 由于集线器将数据广播到所有设备,所以它可能导致网络拥塞。因此,在大型或流量较大的网络中,集线器已经被交换机所取代,交换机能够智能地将数据转发到目标设备。

中继器

定义:中继器是一个物理层设备,用于放大或再生数字信号。

工作方式:在以太网或其他类型的网络中,数据在电缆上只能传输一定的距离,超过这个距离,信号会减弱或退化。中继器放置在这种距离的两端,用于接收退化的信号,放大或再生它,然后将它传输到下一段电缆。

应用:中继器被用于扩展网络的物理范围,超出了单一段电缆或物理媒体的限制。

网络适配器

定义:网络适配器 (Network Adapter),也称为网络接口卡(NIC)或简称网卡,是一种硬件组件,用于连接计算机或其他设备到一个网络。

工作方式:网络适配器为计算机提供了一个或多个网络连接端口,它将计算机的数字数据转换为可以在物理媒体(例如双绞线、光纤或无线电波)上传输的信号。同样,当信号从网络到达网络适配器时,它会将这些信号转换回计算机可以理解的数字数据。

物理地址:每个网络适配器都有一个唯一的物理地址,称为MAC地址。这个地址在生产时被烧录到设备中,用于在局域网内唯一地识别设备。

电缆

  • 双绞线 (Twisted Pair):双绞线由一对绝缘的铜线组成,两线之间呈螺旋形地绞在一起。
  • 光纤 (Fiber Optic):光纤是由极细的玻璃或塑料纤维制成的,用于传输光信号。
  • 同轴电缆 (Coaxial Cable):同轴电缆由一个中心铜导线、一个绝缘层、一个金属屏蔽和一个外部的塑料或橡胶覆盖层组成。

3 - 数据链路层

在选择题中考察,个别年份也在大题中考察过,需熟练掌握介质访问控制的相关方法。

学习思维导图:

# 数据链路层

## 数据链路层的功能

## 组帧

## 差错控制

- 检错编码
- 纠错编码

## 流量控制和可靠传输机制

- 流量控制、可靠传输和滑动窗口
- 停等协议
- 回退N帧
- 选择性重传协议

## 介质访问控制

- 信道划分
- 随机访问:ALOHA, CSMA, CSMA/CD, CSMA/CA
- 轮询访问

## 局域网

- 基本概念和体系结构
- 以太网和IEEE 802.3
- 无限局域网和IEEE 802.11
- VLAN

## 广域网

- 基本概念
- PPP协议

## 数据链路层设备

- 以太网交换机和工作原理

数据链路层功能

  1. 封装数据帧(Frame Encapsulation):
    • 数据链路层将来自网络层的数据包封装成数据帧,这包括将源和目标地址添加到帧头部,以便在物理介质上的传输。
  2. 数据帧传输(Frame Transmission):
    • 数据链路层负责将数据帧从一个物理节点传输到另一个物理节点。这可能涉及到点对点的传输(例如,以太网)或多点广播传输(例如,Wi-Fi)。
  3. 物理地址寻址(Physical Addressing):
    • 数据链路层使用物理地址(通常是MAC地址)来标识设备。这些地址用于确定数据帧的目标设备。
  4. 帧同步和定界(Frame Synchronization and Framing):
    • 数据链路层确保接收端可以正确识别和分离不同的数据帧。这通常通过在帧的起始和结束位置使用特殊的比特模式来实现。
  5. 流量控制(Flow Control):
    • 数据链路层可以控制发送端的数据传输速率,以防止接收端不堪重负而丢失数据。这确保了适当的数据流量管理。
  6. 差错检测和纠正(Error Detection and Correction):
    • 数据链路层使用差错检测技术(如CRC校验)来检测帧在传输过程中是否受到损坏。一些数据链路层协议还可以进行错误纠正,尝试修复损坏的数据。

3.1 - 组帧

掌握几种组帧方法,重点掌握首位定界字符法、零比特填充法,可能在选择题中考察。

数据链路层的主要功能就是组帧

帧(frame)代表数据链路层的数据发送单位,在接收到来自于网络层的报文(packet)时如何为其添加帧头和帧尾,并且以何种方式进行帧定界(接收方区别连续不同的帧)。

组帧的关键就在于帧定界,也就是对于接收方来说,它能够以某种方式区分连续收到的不同帧。 从这个角度出发,组帧方式可以被分为以下几种:

字符计数法

字符计数法在帧首部使用计数字段来表明帧内字符数量。

当接收方读取帧时,根据读取帧开头的一部分内容,即可得知当前帧的长度是多少,这样就

5
6
7
8
9
8
0
1
2
3
4
5
6
5
4
5
6
7
5
1
2
3
4
字符计数法
Frame 1
5 Characters
Frame 2
5 Characters
Frame 3
8 Characters
Frame 4
5 Characters
字符数量

首位定界字符法

首位定界字符法即 使用特殊控制字符标志帧的开始和结束

但是使用这种方式可能出现如下问题:就是 首位定界字符 可能会在帧内部出现,这个时候就会造成歧义。

所以当特殊字符出现在帧的数据部分时,需要用转义字符ESC来对特殊字符进行转义,同样,ESC出现在数据部分同样需要转义。

Payload Field
Trailer
FLAG
FLAG
Header
A
FLAG
B
A
FLAG
B
ESC
A
ESC
B
A
ESC
B
ESC
A
ESC
B
FLAG
A
ESC
B
ESC
FLAG
ESC
首尾定界字符法
定界字符
帧的格式
定界字符
帧的原始数据
经过转义之后的数据

以上图为例,假设我们使用 FLAG 作为首位定界字符的话(注意这里 FLAG 只是字符名称,不是表示字符是 FLAG),那么当 FLAG 出现在数据部分时,我们需要对 FLAG 进行转义,需要注意的是,因为我们使用 ESC 作为转义字符,所以当数据中出现 ESC 时,我们也需要对转义字符自己进行转义。

零比特填充法

零比特填充法(Bit Stuffing)与首位定界字符法思路类似。

01111110 作为一个新的数据帧的开头,这里的关键在于要对数据帧内容中与 01111110 相同的部分进行转义,转义的方式是如果碰到11111,就在后边添加一个0,接收方在处理接收到的数据时,需要进行反向处理,如果在数据部分碰到111110时,就要删除这个0。

在传送的比特流中可以传送任意比特组合,而不会引起对帧边界的判断错误。零比特填充法很容易由硬件来实现,性能优于字符填充法。

对于零比特填充法,需要记住 01111110 这种开头的比特填充方式 以及 具体如何进行转义。

Frame
0111 1110
Frame
0111 1110
0111101111110001
01111011111010001
零比特填充法
Frame 1
Frame 2
帧的原始数据
转义后数据
发送方在连续5个1之后填充一个0
接收方进行反向处理,得到原始数据

违规编码法

违规编码法(Physcial Layer Coding Violations)使用特殊电平进行定界。比如,曼彻斯特编码将数据比特“1”编码为“高-低”电平,将比特“0”编码为“低-高”电平对,而“高-高”电平对和“低-低”电平对是没有被使用的,所以可以用这两个电平进行帧定界。

编码方式详见 编码和调制

3.2 - 差错控制

本节内容比较复杂,尤其是涉及到CRC和海明码的具体细节,掌握检错和纠错的大致流程即可,可能在选择题中考察。

分类

  • 检错编码:奇偶校验码、循环冗余码
  • 纠错编码:海明码

奇偶校验码

奇偶校验码(Parity Check Code)是一种错误检测机制,通常用于数据传输中,以检测传输过程中的单比特错误。奇偶校验码通过在数据中添加一个额外的比特(校验比特)来实现。这个校验比特的值被设置为确保数据中的所有比特(包括校验比特)的总数是奇数或偶数,具体取决于所选择的奇偶性规则。

奇偶校验码有两种常见的类型:奇校验和偶校验。

  1. 奇校验(Odd Parity):在奇校验中,校验比特被设置为确保数据中的所有比特的总数(包括校验比特)为奇数。如果在传输过程中某个比特发生了错误,导致总比特数变为偶数,接收端将检测到错误。
  2. 偶校验(Even Parity):在偶校验中,校验比特被设置为确保数据中的所有比特的总数(包括校验比特)为偶数。如果在传输过程中某个比特发生了错误,导致总比特数变为奇数,接收端将检测到错误。

奇偶校验的工作原理是发送端计算数据中所有比特的总数,并根据所选的奇偶性规则设置校验比特的值。接收端在接收数据后再次计算所有比特的总数,包括校验比特,然后检查总数是否满足所选的奇偶性规则。如果总数不符合规则,接收端将检测到错误。

循环冗余码

循环冗余校验(CRC)是一种常用的数据完整性校验方法,主要用于数据传输的错误检测。CRC 的核心思想是将数据看作多项式的系数,并用特定的生成多项式进行除法操作,得到的余数即为 CRC 值。

CRC 校验大致流程:

  • 生成多项式:CRC 的核心是一个生成多项式,通常用二进制表示。这个多项式是事先定义好的,并且在发送端和接收端都必须知道。
  • 帧校验码计算:为了计算 CRC 校验码,发送端将数据帧和生成多项式进行除法运算,得到余数,然后将余数附加到数据帧的末尾。如果生成多项式是 n 位长,那么 CRC 校验码将是 n-1 位长。
  • 传输:将 CRC 校验码附加到数据帧的尾部,发送至接收端。
  • 接收端校验:接收端接收到数据帧后,也执行相同的 CRC 校验操作。它将接收到的数据帧与生成多项式进行除法运算,得到一个余数。如果余数为零,表示数据帧没有错误。如果余数不为零,表示数据帧存在错误。
Data
Divisor
000....0
CRC
Sender
Data
CRC
Data
CRC
Divisor
Remainder
Receiver
n bits
n-1 bits
zero accept
non-zero reject

以一个实际例子说明 CRC 校验过程

假设我们要发送的数据是:1010001101

我们选择的生成多项式是:110101,对应的是 $x^5 + x^4 + x^2 + 1$

发送方操作:

  1. 为了进行校验码计算,首先在原始数据的尾部添加 k−1 个零(其中 k 是生成多项式的位数,这里是 4),所以数据变成了:1010001101 00000
  2. 使用生成多项式除以这个新的数据。实际上,我们使用二进制的异或操作来进行模 2 除法。
  3. 计算得到的余数就是 CRC。
              110101011
       ------------------
110101 | 101000110100000
         110101
         ------
          111011
          110101
          ------
            111010
            110101
            ------
              111110
              110101
              ------
                101100
                110101
                ------
                 110010
                 110101
                 ------
                   01110

将计算得到 CRC 01110 添加到数据后面一起发送,接收方接收到的数据为 101000110101110

接收方接收到数据后进行校验,计算过程如下:

              110101011
       --------------------------------------
110101 | 101000110101110
         110101
         ------
          111011
          110101
          ------
            111010
            110101
            ------
              111110
              110101
              ------
                101111
                110101
                ------
                 110101
                 110101
                 ------
                      0

计算得到余数为零,表示数据帧没有错误。

海明码

海明码(Hamming Code)是一种用于错误检测和纠正的编码方案,通常用于数据传输和存储系统中。它的主要目标是检测和纠正数据中的单比特错误。

海明码的核心思想是在数据位之间插入一定数量的校验位(也称为奇偶校验位),使得每个校验位都负责检查一组特定的位。校验位的数量取决于数据位的数量,并且它们的位置通常是2的幂次(即第1位、第2位、第4位……)。

以一个 实例 说明海明码的 生成和纠正 过程:

步骤 1:确定校验位数量

假如我们的数据是 $1011$ ,也就是 $4$ 位。根据海明码的原则,我们需要确定足够的校验位 $r$ 来满足以下条件:

$2^r \ge k + r + 1$

对于 $k = 4$ (数据位),我们找到最小的 $r$ 为 $3$

步骤 2:放置数据位

首先放置数据位 $d$ :

  • 第 $3$ 位($2^0+2^1$): 数据位 $d_1$
  • 第 $5$ 位($2^0+2^2$): 数据位 $d_2$
  • 第 $6$ 位($2^1+2^2$): 数据位 $d_3$
  • 第 $7$ 位($2^0+2^1+2^2$): 数据位 $d_4$

将校验位( $p$ )插入到数据位中的适当位置。校验位位置通常是 $2$ 的幂( $1, 2, 4, 8, …$ )。

位置1234567
海明码$p_1$$p_2$$d_1$$p_3$$d_2$$d_3$$d_4$
数据--$1$-$0$$1$$1$

步骤 3:计算校验位

  • $p_1 $ 检查位置 $1$ 、 $3$ 、 $5$ 、 $7$ 的位,因为它们的二进制表示中,最右边的位是 $1$ 。所以 $p_1 = d_1 \oplus d_2 \oplus d_4 = 1 \oplus 0 \oplus 1 = 0$ ,所以 $p_1 = 0$ 。
  • $p_2 $ 检查位置 $2$ 、 $3$ 、 $6$ 、 $7$ 的位,因为它们的倒数第二位是 $1$ 。这些位的异或值为 $p_2 = d_1 \oplus d_3 \oplus d_4 = 1 \oplus 1 \oplus 1 = 1$,所以 $p_2 = 1$ 。
  • $p_3 $ 检查位置 $4$ 、 $5$ 、 $6$ 、 $7$ 的位,因为它们的倒数第三位是 $1$ 。这些位的异或值为 $p_3 = d_2 \oplus d_3 \oplus d_4 = 0 \oplus 1 \oplus 1 = 0$,所以 $p_3 = 0$ 。

步骤 4:生成海明码

位置1234567
海明码$p_1$$p_2$$d_1$$p_3$$d_2$$d_3$$d_4$
数据$0$$1$$1$$0$$0$$1$$1$

所以, $1011$ 的 $(7,4)$ 海明码是 $0110011$ 。任何一位的单一错误都可以通过分析校验位来检测并纠正。

步骤 5:检测和纠正错误

假设在传输过程中第二位出现了错误,接收的码变为 $0010011$ 。接收者现在要检查每个校验位:

  • $p_1 = d_1 \oplus d_2 \oplus d_4 = 1 \oplus 0 \oplus 1 = 0$ (没有变化)
  • $p_2 = d_1 \oplus d_3 \oplus d_4 = 1 \oplus 1 \oplus 1 = 1$ (错误)
  • $p_3 = d_2 \oplus d_3 \oplus d_4 = 0 \oplus 1 \oplus 1 = 0$ (没有变化)

校验位 $p$ _ $2$ 错误,这告诉我们位模式 $ 2, 3, 6, 7 $ 中的某个位出错。因为只有 $p_2$ 指示出错误,我们可以断定是第 $2$ 位出错了。

要纠正这个错误,只需要改变第二位:

从:0 1 1 0 0 1 1
到:0 0 1 0 0 1 1

现在,海明码回到了正确的 $0010011$ 状态。

3.3 - 流量控制

掌握停等、回退N帧、选择性重传的过程以及窗口大小,可能在选择题中考察。

Stop Wait

停等 (Stop-and-Wait) 是一种基础的自动重传请求 (ARQ) 协议。其基本思想是在发送每个数据帧后都停下来,等待接收方的确认。只有在收到确认后,发送方才会继续发送下一个帧。由于这种方法在任何时刻只允许一个帧在传输中,因此它被称为“停等”。

0
1
2
0
1
停等协议
发送方
接收方

过程关键:

  1. 发送数据:发送方发送一个数据帧到接收方,并启动一个计时器等待确认。
  2. 等待确认:发送方在发送数据帧后处于等待状态,直到接收到确认或计时器到期。
  3. 确认的接收:接收方在收到数据帧后,检查其完整性(例如通过校验和)。如果数据帧正确,接收方会发送一个确认帧回到发送方。
  4. 计时器到期:如果发送方的计时器在收到确认之前到期,发送方会假设数据帧丢失或确认丢失,并重新发送数据帧。然后再次启动计时器。

GBN

在 回退N帧(GBN, Go Back N)协议中,发送方可以连续发送多个帧,而不需要等待每个帧的确认。但是,发送方需要为每个帧维护一个计时器。如果一个帧的计时器到期而没有收到确认,发送方会重新发送该帧及其之后发送的所有帧。

0
1
2
0
1
1
x
1
2
0
1
2
0
回退N帧
发送方
接收方

过程关键:

  1. 窗口大小:在GBN中,若帧序号的比特数为 $n$,则发送窗口的最大值为 $2^n - 1$,接受窗口的大小为 $1$。
  2. 发送过程:发送方连续发送窗口内的帧,每发送一个帧,都会为其启动一个计时器。
  3. 接收过程:接收方只接收期望的帧序号。如果接收到的帧是期望的,它会发送一个确认。如果接收到的帧不是期望的(可能是由于前面的帧丢失),它会丢弃该帧并重新发送对上一个正确接收的帧的确认。
  4. 超时和重传: 发送方通常只为 最早发送但未确认的帧(窗口内的第一个未确认帧)设置一个单一的超时定时器。 如果计时器到期,该帧及其之后发送的所有帧都会被重传。重传的原因是,如果一个帧丢失,后续的帧虽然可能已经到达接收方,但由于接收方的窗口大小为1,它们会被丢弃。
  5. 滑动窗口:当发送方收到一个帧的确认,它知道该帧及其之前的所有帧都已正确接收。于是,它会将窗口向前滑动,从而可以发送新的帧。

通过GBN, SR交互演示你可以更好理解GBN、SR的过程。

SR

选择性重传(SR,Selective Repeat)是另一种自动重传请求 (ARQ) 协议,它旨在解决 Go-Back-N 协议在高误码率环境下的效率问题。与 Go-Back-N 不同,Selective Repeat 只重传那些确实丢失的帧,而不是所有之后的帧。这使得 SR 在高误码率环境下比 GBN 更为高效。

0
1
2
0
1
2
x
1
0
1
2
0
选择性重传
发送方
接收方

过程关键:

  1. 窗口大小:在SR中,一般发送窗口和接受窗口大小一致,若帧序号的比特数为 $n$,则窗口大小最大为 $2^{n-1}$。
  2. 发送过程:发送方连续发送窗口内的帧,并为每个发送的帧启动一个计时器。
  3. 接收过程:接收方接收所有在其窗口范围内的帧,并为正确接收的每个帧发送确认。接收到的帧可能是乱序的,但接收方可以缓存这些乱序的帧,直到可以按正确的顺序将其传递给上层。
  4. 超时和重传:如果发送方的某个帧的计时器到期,只有这个特定的帧会被重传,而不是所有的帧。这是 SR 与 GBN 的主要区别。
  5. 滑动窗口:发送方和接收方的窗口都是动态移动的。当发送方收到一个帧的确认时,它会尝试滑动其窗口以发送新的帧。同时,接收方在将帧按正确顺序传递给上层后,也会滑动其窗口。
  6. 处理冲突的确认:考虑到网络的延迟,发送方可能在超时并重传一个帧后才收到其早期版本的确认。为了处理这种情况,SR 协议需要具有识别和丢弃重复确认的机制。

对比

停等协议(Stop-and-Wait)、GBN(Go-Back-N)、SR(Selective Repeat)是计算机网络中用于可靠数据传输的三种流量控制和错误处理协议。它们的主要目标是确保在不可靠的通信信道上的数据传输的可靠性。

重点注意接收方和发送方的窗口大小范围。

特性停等协议GBN 协议SR 协议
发送方窗口大小范围(序号位数为n)1最大为$2^n - 1$最大为$2^{n-1}$
接收方窗口大小范围(序号位数为n)1$1$与发送方窗口一致
发送方效率低(每帧等待确认)高(并发发送多帧)高(并发发送多帧)
接收方效率高(无需缓存多帧)低(需要缓存多帧)高(需要缓存多帧)
错误处理重传单个丢失帧重传从丢失帧开始的所有帧重传单个丢失帧或乱序帧
带宽利用率高(部分带宽利用)高(部分带宽利用)

窗口大小限制

$$\text{发送窗口大小} + \text{接受窗口大小} \le 2^n$$

滑动窗口协议是计算机网络中用于控制传输层数据流的一种机制。在这种协议下,发送窗口和接收窗口的大小有一个重要的限制,即它们的和不能超过序列号空间的大小。序列号空间是由能够用于标识帧的序列号的总数确定的,这通常是由序列号的位数决定的。

对于一个使用了 $n$ 位序列号的协议,序列号的范围是从 $0$ 到 $2^n-1$ 。因此,整个序列号空间的大小是 $2^n$ ,这意味着理论上最多可以有 $2^n$ 个不同的帧在传输中被唯一区分。

这个限制的主要原因是防止所谓的“序列号回绕”(Sequence Number Wraparound)。如果发送窗口和接收窗口的大小之和大于序列号空间的大小,那么就可能发生一个新的帧使用了一个老的、已经被使用的序列号,但是该帧可能还在网络中传输或者被延迟。接收方将无法区分这是一个新的帧还是重复的帧。

链路利用率计算

A
D
Time
Time
信号传播时间
帧传输时间
A
D
Time
Time
信号传播时间
帧传输时间
停等协议
滑动窗口协议,连续传输多个帧

假设信号传播时间为 $T_p$,一个数据帧的传输时间为 $T_f$,确认帧一般不考虑传输时间因为比较小,则 $RTT = 2 \cdot T_p$。

对于停等协议,信道利用率:

$$ratio = \frac{T_f}{RTT + T_f}$$

对于使用了滑动窗口的协议,一次性可以传输 $N$ 个数据帧,则信道利用率:

$$ratio = \frac{N \cdot T_f}{RTT + T_f}$$

视频讲解

3.4 - 介质访问控制

需熟练掌握信道划分以及随机访问信道控制的各种方式,在选择题中会考察。除此外,需理解CSMA/CD的细节,在往年真题的大题中也考察过。

共享介质

共享介质
A
B
C
D
E

在介绍 MAC 概念之前,必须要说明一下共享介质的概念。

在一个网络环境中,多个设备可能需要同时访问同一个物理介质来发送数据,这个介质可以是电缆、光纤或者无线信道。

当设备发送数据时,数据包会在整个介质上传播,所有连接到该介质的设备都可以接收到数据包。如果多个设备同时发送数据,介质上的数据信号就会相互冲突进而导致错误。

所以 MAC 协议确保了 共享介质上的 有效、公正且有序的数据传输。

MAC方式总结

介质访问控制(MAC,Media Access Control)可以分为 信道划分 以及 随机访问 两种大方向。

信道划分 介质访问控制:也叫做多路复用,在一条传输介质上同时传输多个不同种类的信号(种类可以根据不同的参数进行划分),这样不同的设备可以发送特定类型的信号,并且不同信号之间相互不干扰,信道划分 访问控制可以分为以下几种:

  • FDM:频分多路复用
  • TDM:时分多路复用
  • WDM:波分多路复用
  • CDM:码分多路复用

随机访问 介质访问控制是指多台设备共享同一个通信介质时,它们可以随机地尝试发送数据,而不需要事先协调,当发生冲突后再做后续的协调,以保证不会接收到错误的数据。

  • ALOHA
  • CSMA
  • CSMA/CD
  • CSMA/CA

多路复用

  1. 频分多路复用(Frequency Division Multiplexing,FDM):
    • FDM是一种通过将频谱划分成不同的频率带宽块,使多个信号能够同时传输的方法。每个信号占用不同的频带宽度,以避免干扰。
    • 电视和广播广播中的不同频道,以及有线通信中的多频道宽带互联网,都使用了FDM。
  2. 时分多路复用(Time Division Multiplexing,TDM):
    • TDM是一种通过在时间轴上分割信号的方式,使多个信号能够依次传输的技术。每个信号在不同的时间段内传输,时间段通常非常短,以实现快速切换。
    • 电话网络中的T1和E1传输系统以及数字电视信号的传输都采用了TDM。
  3. 波分多路复用(Wavelength Division Multiplexing,WDM):
    • WDM是一种在光纤通信中使用的多路复用技术,它通过在光波的波长维度上分隔信号来允许多个信号共享同一光纤。
    • 长距离光纤通信网络中使用WDM来实现高容量数据传输。
  4. 码分多路复用(Code Division Multiplexing,CDM):
    • CDM是一种通过在传输中使用不同的编码序列来区分不同的信号的方式。每个信号都与一个唯一的编码序列相关联,以使接收器能够区分它们。
    • 无线通信中的CDMA(Code Division Multiple Access)是一种使用CDM的技术。
MUX
channel 1 (f1)
DEMUX
channel 2 (f2)
channel 3 (f3)
MUX
1
DEMUX
2
3
4
1
2
3
4
1
2
3
4
frequency
MUX
DEMUX
FDM
TDM
WDM

CDMA原理

在CDMA中,每一个比特时间划分为 m 个短的间隔,称为码片(chip),每个站被指派一个惟一的 m bit 码片序列(chip sequence) 。

每个站被指派一个惟一的 m bit 码片序列(chip sequence) 。

  • 如发送比特 1,则发送自己的 m bit 码片序列。
  • 如发送比特 0,则发送该码片序列的二进制反码。

令向量 $S$ 表示站 S 的码片向量,令 $T$ 表示其他任何站的码片向量。两个不同站的码片序列正交,就是向量 $S$ 和 $T$ 的规格化内积(inner product)都是0:

$$S \cdot T = \frac{1}{m} \sum_{i=1}^{m}{S_i T_i} = 0$$

任何一个码片向量和该码片向量自己的规格化内积都是1:

$$S \cdot S = \frac{1}{m} \sum_{i=1}^{m}{S_i^2} = 0$$

ALOHA协议

1. 纯ALOHA (Pure ALOHA)

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Resend
Resend
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Collision
duration
Collision...
Collision
duration
Collision...
Resend
Resend
Text is not SVG - cannot display

工作原理:

  • 当一个站点有数据要发送时,它会直接发送数据。
  • 发送完成后,该站点会等待一个预定的时间间隔,以便接收来自接收方的确认。
  • 如果在此时间段内未接收到确认,站点会假定数据已冲突并被损坏,因此它会在随机的后续时间重新发送数据。

2. 时隙ALOHA (Slotted ALOHA)

Station1
Station1
Station2
Station2
Station3
Station3
Station4
Station4
Frame 1.1
Frame 1.1
Frame 1.2
Frame 1.2
Frame 2.1
Frame 2.1
Resend
Resend
Frame 3.1
Frame 3.1
Resend
Resend
Frame 4.1
Frame 4.1
Frame 2.1
Frame 2.1
Frame 4.1
Frame 4.1
Frame 3.1
Frame 3.1
Slot 1
Slot 1
Resend
Resend
Slot 2
Slot 2
Slot 3
Slot 3
Slot 4
Slot 4
Slot 5
Slot 5
Slot 6
Slot 6
Text is not SVG - cannot display

工作原理:

  • 与纯ALOHA不同,时隙ALOHA将时间分为固定的时隙或间隔。
  • 站点只在时隙的开始时发送数据,这减少了两个数据包可能在同一时间内发送的机会,因为它们必须在时隙边界上对齐。
  • 如果数据冲突(多个站点在同一时隙发送数据),发送站点会在随机的后续时隙重试。

CSMA协议

CSMA(Carrier Sense Multiple Access)的中文叫做 载波监听多路访问,理解 CSMA 的关键在于理解它的名称中的两个部分:载波监听 以及 多路访问:

  • 载波监听(Carrier Sense):因为 CSMA 是随机访问介质控制的一种方式,所以在发送数据前,必须确定当前通信介质中没有其他设备正在发送数据。所以载波监听可以被理解为以太网口内部芯片自带的一种功能,具体而言就是一种可以监听 信道在当前位置是否有数据传输的 的一种功能。
  • 多路访问(Multiple Access):多个设备可以访问同一个通信介质。这意味着在任何给定时间,任何设备都可以尝试发送数据。

所以 CSMA 可以理解为 通过 载波监听 避免冲突,进而实现共享介质上的 多路访问。

以下图为例,A、B、C、D 分为是连接到同一共享介质上的不同设备,当 A 开始发送数据时,B、C、D 分别会在不同的时刻监测到信号,具体的时刻为 设备与A之间的距离 / 信号传播速度

A
B
C
D
Time
Time
Transmission Time
B senses here
C senses here
D senses here
Vulerable Time =
Propogation Time

CSMA 的问题在于它无法处理碰撞,当一个设备监听到当前介质中无信号时,它就可以发送数据,但监听得到的结果可能是 “假结果”。因为有可能其他设备已经发送信号了,只是信号由于传播时延还没有到达当前设备。

所以假设当前设备监听得到了 “假结果”,那么此时发送数据后介质上就会发生冲突。

CSMA如何处理冲突

CSMA 不具备碰撞处理的功能,冲突处理是 CSMA/CD 的功能。 这意味着在 CSMA 中,设备不会主动检测到碰撞。

但是 CSMA 也具备一定冲突处理的功能,这依赖于超时和重传机制。

在 CSMA 中,发送设备在传输数据后会等待确认响应(如 ACK,Acknowledgment 确认帧)。如果发生碰撞,接收设备无法正确接收数据,因此不会发送确认帧。 发送设备在等待一段时间后没有收到确认响应,推断可能发生了数据丢失(可能由于碰撞)。

这个知识了解即可,目的是帮助大家理清 CSMA 和 CSMA/CD 的区别。下文通过一个实例说明 CSMA 的冲突处理功能:

假设有两个设备 A 和 B,它们都使用 CSMA 协议并共享同一个信道:

  1. 初始状态:信道空闲,设备 A 和 B 都准备发送数据。
  2. 监听信道:A 和 B 都监听信道,发现信道空闲。
  3. 发送数据:A 和 B 几乎同时开始发送数据,由于没有碰撞检测机制,它们不知道发生了碰撞。
  4. 碰撞发生:A 和 B 的数据在信道上发生冲突,接收设备无法解码出有效数据,因此不会发送确认帧。
  5. 等待确认:A 和 B 等待一段时间,发现没有收到确认帧,推断可能发生了碰撞。
  6. 重传尝试:A 和 B 各自等待一个随机时间(不同的随机时间),然后重新尝试发送数据。

CSMA 也 根据其在信道空闲时的行为分为三种类型,如下所示,了解即可。

特征1-persistent CSMANon-persistent CSMAp-persistent CSMA
信道空闲时的行为立即开始传输数据立即开始传输数据根据概率p决定是否传输数据
信道忙时的行为立即开始传输数据等待一个随机时间后重新监听根据概率p决定是否重新监听
碰撞的可能性高(当多个设备同时监听信道)低(等待随机时间片段)中等(取决于p的值和竞争情况)
等待时间无等待随机等待时间片段随机等待时间片段
适用性适用于低碰撞概率,高速局域网适用于高碰撞概率,低速局域网适用于中等碰撞概率和速率的局域网

CSMA/CD协议

CSMA/CD (CSMA with Collision Detection,载波监听多路访问/碰撞检测) 是 CSMA 的一种拓展,在了解这个知识之前,请确保你已经明晰了什么是 CSMA 中的 CS(Carrier Sense 即 载波监听),以及什么是 CSMA 中的 MA(Multiple Access 即 多路访问)。

CSMA/CD 比 CSMA 多出一个 CD(Collision Detection 即 碰撞检测)的功能。 在上文中我们提到,CSMA 中监听到信道空闲可能是 “虚假的”,所以在 CSMA 发送数据后介质中也许会发生冲突,但 CSMA 只能依靠非常原始的方案处理冲突。

CSMA/CD 就高级一些,在发送数据期间,我们刚刚提到的 监测器件(Carrier,就是 CSMA 中 C 的简称)会一直监听有没有冲突发生, 如果有冲突的话,就等待一段随机的时间,然后重试以上过程,并且发送一个特殊信号告诉其他设备发生了冲突。

A
B
C
D
Time
Time
t1
t4
Collision occurs here
A detects
collision here
C detects
collision here

上图说明了 碰撞检测的功能,这里需要内化 传播时延和传输时间 这两个概念:

  • 传输时延 = 距离 / 信号传播速度
  • 传输时间 = 数据大小 / 数据传输速率

碰撞发生的时间和检测到碰撞的时间是不一样的,在上图中竖线表示时间轴,通过时间轴我们可以得知某个事件发生的时间。

A
B
Time
Time
A
B
Time
Time
B 在这个时刻接收到最后一个比特
最小传输时长 = 2 ×最大传播时延

最小帧大小 = 带宽 ×最小传输时长
A 在这个时刻传输结束
B 在 A 发送的信号刚到达的前一瞬间
开始发送数据
A 必须还在传输数据,也就是说数据传输还没有结束,
才能在这个时刻检测到冲突
一般的冲突场景
碰撞的边界情况
冲突在这个时刻发生

这里再总结一下 CSMA/CD 的流程

  1. 监听信道(Carrier Sense):设备在尝试发送数据之前首先监听物理信道,检查是否有其他设备正在传输数据。如果信道忙,则设备等待,直到信道变为空闲。
  2. 等待随机时间(Backoff):如果信道忙,设备会随机选择一个退避时间(Backoff time),然后等待该时间段,以便稍后重新尝试发送数据。这个随机等待时间有助于减少碰撞的概率,因为不同设备的退避时间可能不同。
  3. 发送数据:当设备检测到信道为空闲时,它可以开始发送数据帧。设备发送数据时会继续监听信道,以检测是否发生碰撞。
  4. 碰撞检测(Collision Detection):如果两个或多个设备同时发送数据并发生碰撞,它们会检测到碰撞并立即停止发送。这是通过在发送过程中持续监听信道来实现的。如果设备在发送数据时检测到信道上的信号强度增加(即碰撞),它会立即停止发送,以避免数据损坏。
  5. 碰撞处理:一旦设备检测到碰撞,它会发送一个特殊的信号(碰撞信号)通知其他设备发生了碰撞。所有参与碰撞的设备将等待一段随机的时间,然后重新尝试发送数据。
  6. 重传数据:设备在等待随机时间后,会重新尝试发送数据。如果再次发生碰撞,设备将重复上述碰撞处理步骤,直到成功发送数据或达到最大重传次数(通常是16次)为止。
  7. 成功发送或放弃:如果设备成功发送数据(即没有发生碰撞),接收设备将确认数据的接收。如果设备多次尝试发送数据但仍然无法成功,它最终会放弃发送,以避免网络过度拥塞。

CSMA/CA协议

CSMA/CA考点说明
Source
Source
Destination
Destination
Other Nodes
Other Nodes
DIFS
DIFS
SIFS
SIFS
RTS
RTS
CTS
CTS
CTS
CTS
DATA
DATA
ACK
ACK
ACK
ACK
SIFS
SIFS
SIFS
SIFS
Delay
Access
Delay...
Text is not SVG - cannot display

CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)是一种用于无线局域网(如Wi-Fi)中的协议,用于协调多台无线设备共享通信媒体的访问。与CSMA/CD不同,CSMA/CA采用碰撞避免而非碰撞检测的方式来管理共享媒体。以下是CSMA/CA的主要过程:

  1. 侦听信道(Carrier Sense):当一个设备想要传输数据时,它首先侦听信道,检查信道是否忙碌。如果信道被其他设备使用,当前设备会等待一段随机的时间再次检测信道是否空闲。这是为了避免同时尝试发送数据而导致碰撞。
  2. 发送请求(Request to Send,RTS):如果信道在一段时间内保持空闲,设备可以选择发送一个RTS帧,该帧包含了将要传输的数据的信息。这个RTS帧通知其他设备,该设备打算发送数据,以防止其他设备在此期间发送数据。
  3. 清除发送请求(Clear to Send,CTS):如果其他设备接收到RTS帧并且信道仍然空闲,它会发送CTS帧作为响应。CTS帧确认了该设备的数据传输请求,并告诉发送设备可以开始传输数据。
  4. 数据传输:一旦设备收到CTS帧,它可以开始传输实际的数据帧。其他设备会侦听传输,以确保不会干扰正在传输的设备。
  5. ACK帧(Acknowledgment):接收设备在成功接收到数据后发送一个ACK帧,以通知发送设备数据已被成功接收。如果发送设备没有收到ACK帧,它会假定数据包已丢失,然后根据需要重新传输数据。

视频讲解

3.5 - 局域网和广域网

了解局域网和广域网的协议字段,可能在选择题中考察。

局域网

以太网

传输介质

参数10BASE510BASE210BASE-T10BASE-FL
传输媒体粗缆细缆双绞线光纤对
编码曼彻斯特编码曼彻斯特编码曼彻斯特编码曼彻斯特编码
拓扑结构总线形总线形星形点对点
网络适配器早期以太网早期以太网现代以太网现代以太网
  • 注意字母 Ttwisted pair 的首字母,含义是双绞线
  • FLFiber optic 的缩写,含义是光纤

帧格式

IP Datagram
Payload
FCS
Length
Source
MAC Address
Destination
MAC Address
6
6
2
4
46 ~ 1500
SFD
Preamble
7
1
Ethernet Header
IEEE 802.3 Ethernet Frame Format

如上图所示,以太网帧格式从逻辑上可以分为物理层控制字段、帧首部、数据负载、差错校验字段这四个部分,每个字段的具体说明如下所示:

  • 物理层控制字段
    • 前导码(Preamble):7B
      • 由7字节的交替的1和0位组成,用于同步接收方的时钟。
    • 帧开始分隔符(Start of Frame Delimiter, SFD):1B
      • 通常为10101011,标志帧的开始。
  • 帧首部: 固定为14B
    1. 目的地址(Destination MAC Address):6B
      • 指定帧的接收者的物理MAC地址。
    2. 源地址(Source MAC Address):6B
      • 指定帧发送者的物理MAC地址。
    3. 类型/长度字段(Type/Length):2B
      • 如果值大于或等于0x0600(1536),则表示帧携带的数据的类型(例如IPv4、IPv6、ARP等)。
      • 如果值小于或等于0x05DC(1500),则表示数据字段的长度。
  • 负载
    • 数据和填充(Data and Padding): 范围为46-1500B
      • 携带帧的有效载荷,即要传输的数据。
      • 如果数据少于46字节,则需要填充,确保数据字段的最小长度为46字节。
  • 差错校验字段
    • 帧校验序列(Frame Check Sequence, FCS):4字节:
      • 一个循环冗余校验(CRC)值,用于错误检测。接收方计算帧的CRC,并与这个字段进行比较,以确定帧是否在传输过程中被损坏。

无线局域网

Frame
Control
Duration / ID
Address 1
Address 2
Address 3
Sequence
Control
Address 4
Frame Body
FCS
Protocol
Version
Type
Subtype
To DS
From DS
More Flag
Retry
Power
Mgmt
More
Data
Protected
Frame
Order
2B
2B
6B
6B
6B
6B
2B
4B
0 - 2312 B
2 bits
2 bits
4 bits
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
1 bit
  • To DS(To Distribution System):表示帧是从一个设备(通常是一个Wi-Fi客户端)发送到分布系统(Distribution System),也就是Wi-Fi接入点(AP)或Wi-Fi路由器。这是常用的值,用于表示数据流从Wi-Fi客户端发送到AP或路由器。
  • From DS(From Distribution System):表示帧是从分布系统(通常是AP或路由器)发送到一个设备(Wi-Fi客户端)。这个方向的帧通常用于将数据从AP或路由器传输到Wi-Fi客户端。
  • address1: RA(receiver address),接收方地址
  • address2: SA(source address),发送方地址
  • address3: DA(destination address),目的地地址

广域网

PPP协议

PPP(Point-to-Point Protocol)是一种数据链路层协议,用于在两个点对点连接的网络之间传输数据。PPP最初是为拨号连接设计的,但它后来被广泛用于建立各种类型的点对点连接,包括DSL(数字用户线路)、ISDN(综合业务数字网)和串口连接等。

3.6 - 数据链路层设备

掌握网桥和交换机的工作原理和功能,可能在选择题中考察,也会大题中作为知识点进行考察。

网桥

E1 — MAC1
E1 — MAC2
E2 — MAC3
E2 — MAC4
E1 — MAC1...
E1
E1
E2
E2
Bridge
Bridge
Hub
Hub
Hub
Hub
PC1
PC1
PC2
PC2
PC3
PC3
PC4
PC4
MAC1
MAC1
MAC2
MAC2
MAC3
MAC3
MAC4
MAC4
Text is not SVG - cannot display
  • 工作原理:网桥根据目的MAC地址来决定是否将数据帧从一个接口转发到另一个接口。当一个数据帧进入网桥时,它会检查数据帧的目的MAC地址,然后将其转发到适当的接口,以便数据帧到达目标设备。网桥还可以学习MAC地址,并维护一个MAC地址表,以便更智能地转发数据帧。
  • 功能:网桥主要用于连接两个或多个局域网段,使它们能够在同一网络中通信。网桥帮助减少了网络中的碰撞域(collision domain),提高了网络性能。

在过去,网桥是用来连接不同的物理媒体类型,例如以太网和令牌环。然而,现代交换机已经取代了许多网桥的功能,因为交换机通常更智能、更高效。

交换机

  • 工作原理:交换机使用MAC地址表来确定将数据帧从哪个接口转发到哪个接口。当数据帧到达交换机时,交换机会查找MAC地址表以查找目标设备的位置,并将数据帧仅发送到目标设备所连接的接口,而不是广播到整个网络。
  • 功能:交换机提供了更快的数据帧传输速度和更低的碰撞域,因为它只将数据帧传输到需要的接口,而不是广播到整个网络。这提高了网络性能和带宽利用率。
Switch A
PC1
PC3
Switch B
PC4
PC5
PC2
1111.1111.1111
4444.4444.4444
2222.2222.2222
3333.3333.3333
5555.5555.5555
MAC Address
Port
1111.1111.1111
F0
2222.2222.2222
F1
3333.3333.3333
F2
4444.4444.4444
G0
5555.5555.5555
G0
F0
G0
F1
F2
G0
F0
F1
Switch A
MAC Address
Port
1111.1111.1111
G0
2222.2222.2222
G0
3333.3333.3333
G0
4444.4444.4444
F0
5555.5555.5555
F1
Switch B

交换机学习转发表的过程:

  1. 启动时初始化:当交换机首次启动时,它的转发表通常为空。此时,交换机不知道任何设备的位置。
  2. 数据帧到达:当数据帧从一个端口进入交换机时,交换机需要决定将数据帧发送到哪个端口。这时候,交换机会进行以下步骤:
    • 目标MAC地址检查:交换机会查看数据帧中的目标MAC地址,这个地址用于确定数据帧的目的地。每个网络设备都有唯一的MAC地址。
    • 转发表查询:交换机会检查转发表,看是否已经学习到了目标MAC地址的条目。
  3. 转发表条目的状态:
    • 如果交换表中没有关于目标MAC地址的记录,那么交换机会认为这是一个未知目标,它会将数据帧广播到所有其他端口,以寻找目标设备。这称为广播帧。
    • 如果交换表中已经有了关于目标MAC地址的记录,交换机就会使用该记录中的信息来确定数据帧应该发送到哪个端口。
  4. 学习新的MAC地址:当数据帧首次进入交换机并且交换机不知道目标MAC地址的位置时,交换机会学习该MAC地址的位置并将其添加到转发表中。学习过程如下:
    • 交换机将源MAC地址与接收数据帧的端口关联起来,以记录该MAC地址位于哪个端口。
    • 交换机将目标MAC地址与接收数据帧的端口关联起来,以记录该MAC地址位于哪个端口。
    • 交换机为这对MAC地址和端口创建一个转发表项,以便将来可以更快地转发数据帧。
  5. 更新转发表:转发表不断更新,以反映网络中设备的移动和更改。交换机会定期检查已知设备的活跃性,并根据需要更新转发表中的信息。如果某个设备不再活跃或从网络中断开连接,交换机将删除与其相关的转发表项。

4 - 网络层

本章是计算机网络中的重点,会在选择题中考察,其中知识点也会与其他知识结合,放在大题中考察,需要熟练掌握IP协议以及IP数据包从一台主机发送到另一台主机的逻辑过程。

学习思维导图:

# 网络层

## 网络层功能

- 异构网络互联
- 路由和转发
- SDN基本概念
- 拥塞控制

## 路由算法

- 静态路由和动态路由
- 距离-向量路由算法
- 链路状态路由算法
- 层次路由

## IPV4

- IPv4分组
- IPv4地址和NAT
- 子网划分、路由聚集、子网掩码和CIDR
- ARP, DHCP, ICMP协议

## IPv6

- IPv6主要特点
- IPv6地址

## 路由协议

- 自治系统
- 域内路由和域间路由
- RIP路由协议
- OSPF路由协议
- BGP路由协议

## IP组播

- 组播的概念
- IP组播地址

## 移动IP

- 移动IP的概念
- 移动IP通信过程

## 网络层设备

- 路由器的组成和功能
- 路由表与分组转发

网络层功能

  1. 路由选择:网络层负责确定数据包从源到目的地的最佳路径,以确保数据包能够跨越多个网络或子网。路由选择算法用于决定数据包应该通过哪些中间路由器传输,以达到目的地。
  2. 数据包转发:一旦确定了数据包的路径,网络层将数据包从一个路由器或交换机传递到下一个路由器或交换机,直到到达目的地。这个过程称为数据包转发。
  3. 寻址和标识:网络层使用IP地址来唯一标识主机和路由器。IP地址是网络层的核心标识机制,它帮助路由器和交换机将数据包正确地传送到目的地。
  4. 分段和重组:网络层可以将数据流分成更小的数据包(分段),以便在网络上传输。在目的地,这些分段将被重新组装成原始数据流。
  5. 数据包的传输和传递:网络层通过控制数据包的传输和传递来确保数据的可靠性和完整性。这包括错误检测、丢包处理和数据包的重新发送。

4.1 - IP

网络层的重点内容,需熟练掌握 IPv4 地址的格式、分组、CIDR 以及 NAT 内容,会在选择题和大题中考察。除此外,掌握组播、IPv6 和移动 IP 的概念,可能在选择题中考察。

IP 协议初探

在真实世界中,我们使用地址找到一个地点,比如 中国 北京市 海淀区 某街道 某小区 某一栋 某一户

在互联网中我们如果想定位某个机器,也需要使用同样的方式给其指定一个地址,这样的地址就叫做 IP 地址,IP 的英文全程是 Internet Protocol,直译作互联网协议。

但仅有地址是不够的,如何将数据从源地址发送到目的地址也是 IP 协议需要解决的一个问题。互联网是一个由众多网络设备组成的一个全球性的网络,从 一个机器 到 另一个机器,中间可能需要经过多个的网络设备,如何保证我们的数据可以 通过某条路径到达 正确地目的地呢,这个过程需要 IP 协议和协议共同配合以实现,在后面我们会逐步了解这个过程。

IP 协议目前包含两个版本,分别是 IPv4 (Version 4)以及 IPv6 (Version 6),后文将逐步介绍这两个协议,当然重点在于掌握 IPv4 的具体细节。

IPv4 地址格式

IPv4 的地址由 4 个字节构成,共有 32 位,比如 11000000.10101000.00000100.00000010 就是一个 IPv4 的地址。

二进制的表示方式太晦涩,所以常用的表示方式是 点分十进制,上一段话中的 IPv4 地址的点分十进制表示方式就是 192.168.4.2

点分十进制说对于4个字节中的每个字节,我们用十进制表示其值,每个字节之间,我们用点来间隔,点分十进制因此得名。

IPv4 首部

IP 协议位于 OSI 7层模型的网络层,其承载上层(传输层)的数据,对其进行 封装,然后传递给下层(数据链路层)进行进一步的处理。

封装的具体过程就是为 传输层的数据 加上 IP 协议的首部的二进制表示,IPv4 的首部的 逻辑格式 如下图所示,其中包含多个字段,长度通常为 20 个字节。

Version (4)
Version (4)
Header Length (4)
Header Lengt...
Type Of Service (8)
Type Of Service (8)
Total Length (16)
Total Length (16)
Identification (16)
Identification (16)
Flags (3)
Flags (3)
Fragment Offset (13)
Fragment Offset (13)
Time To Live (8)
Time To Live (8)
Protocol (8)
Protocol (8)
Header Checksum (16)
Header Checksum (16)
Source Address (32)
Source Address (32)
Destination Address (32)
Destination Address (32)
Options
Options
Padding
Padding
Data
Data
Bit 0
Bit 0
Bit 15
Bit 15
Bit 16
Bit 16
Bit 31
Bit 31
IPv4 Header
IPv4 Header
20 Bytes
20 Bytes
Text is not SVG - cannot display

字段初探

这一小节我会简单介绍各个字段,帮助大家建立一个粗略的了解,部分字段的细节我会在后面几个小节详解说明。

  1. 版本(Version):
    • 4 位字段,用于指定 IP 协议版本,IPv4 的版本为 4。
  2. 头部长度(Header Length):
    • 4 位字段,用于指示 IPv4 首部的长度,以 4 字节为单位。由于 IPv4 首部的固定部分长度为 20 字节,因此这个字段的值通常是 5(即该字段二进制表示为 01015 * 4(4字节为单位) = 20,最终表示的长度为 20)。
  3. 服务类型(Type of Service):
    • 8 位字段,用于指定数据包的服务质量(Quality of Service,QoS),包括优先级、延迟、吞吐量等。
  4. 总长度(Total Length):
    • 16 位字段,指定整个 IPv4 数据包(包括首部和数据部分)的总长度,以字节为单位。最大值为 65535 字节。
  5. 标识(Identification):
    • 16 位字段,用于唯一标识数据包。通常在数据包分片时用于重新组装数据包。
  6. 标志(Flags):3 位字段,包括以下标志:
    • 最左边位:保留为 0,未使用。
    • DF(Don’t Fragment):
      • 如果设置为 1,表示数据包不允许分片。则路由器会丢弃该数据包,并发送一个ICMP错误消息(“Fragmentation Needed and DF Set”)返回给发送方,告知需要分片但不允许分片。
      • 如果设置为 0,标识允许分片,路由器在传输过程中如果需要,可以将数据包分片,以确保数据包能够通过传输链路。
    • MF(More Fragments):
      • 如果设置为 1,还有更多的分片;
      • 如果设置为0,表示当前分片是对应数据包的最后一个分片,或者表示当前数据包根本没有分片。
  7. 片偏移(Fragment Offset):
    • 13 位字段,用于指示数据包分片的位置。以 8 字节为单位,表示相对于原始数据包的偏移量。
  8. 生存时间(Time to Live,TTL):
    • 8 位字段,指定数据包在网络中可存在的最大时间(跳数),每经过一个路由器,TTL 减 1,当 TTL 减至 0 时,数据包被丢弃。
  9. 协议(Protocol):
    • 8 位字段,指定上层协议,表示数据包的载荷是由哪个协议处理。例如,6 表示 TCP,17 表示 UDP。
  10. 首部校验和(Header Checksum):
    • 16 位字段,用于检测 IPv4 首部的错误。
  11. 源 IP 地址(Source IP Address):
    • 32 位字段,指定数据包的发送者的 IP 地址。
  12. 目标 IP 地址(Destination IP Address):
    • 32 位字段,指定数据包的接收者的 IP 地址。
  13. 选项(Options):
    • 可选字段,长度可变,用于包含一些额外的信息。IPv4 首部中的选项字段通常很少被使用。

分片和相关字段

简而言之, IP 数据包的最大长度为 65535 字节(总长度字段为 16 位,16 位可以表示的最大非负整数为 65535),而数据链路层的 MTU 往往都小于该值(比如以太网 ethernet 的 MTU 为 1500),所以为了在数据链路上传输这些数据,就需要将数据包(ip packet)进行拆分为不同的分片(ip fragmentation),更多关于分片的细节可以查看 IP数据包分片

这个时候就会出现两个问题,我将 packet A 和 packet B 都拆分为了不同分片,比如我将 packet A 拆分为分片 A1、A2 和 A3,将 packet B 拆分 B1、B2。那么我如何区分这些不同的分片,我怎么知道 A1 是来自于 packet A 而不是 packet B 的呢?以及我如何将同一个数据包的不同分片再结合起来形成原始数据包呢?

为了实现以上需求,IP 协议首部包含如下字段:

  • Identification 标识字段用于区分 不同数据包 以及其 分片
  • Fragment Offset 标识字段标识当前分片中的数据在整个数据包中的偏移

差错校验字段

IP 首部的 checksum 为 IP 协议的差错校验字段,用于检验 IP 首部在传输的过程中是否发生错误,接下来我会告诉你如何通过该字段进行校验。

当一个 IP 数据包被创建时,发送端设备会计算 IP 头部的校验和,并填充 IP 数据包中的 checksum 字段。

当 路由器 和 目标机器 在收到数据包时会重新计算首部校验和,并将计算得到的校验和和接收到的 IP数据包中的 checksum 进行比较。如果不一致的话,则说明 IP 数据包中的某些数据在传输的过程中出现变动,就需要丢弃该 IP 数据包。

需要注意的是,当 IP数据包 经过某个路由器时,路由器需要重新计算并填充 checksum 字段,因为 IP 数据包中的某些字段在经过路由器时会被改变(比如 TLL 会减 1 等)。

一般而言,对于校验和,了解到以上程度即可,如果你好奇校验和究竟是如何计算且学有余力的话,可以查看checksum 校验和计算方式

IPv4 地址初探

前文已经谈到,IP 地址是帮助我们在互联网中定位到一个机器,从而可以根据该地址进行数据传输。

所以,从逻辑上来说,IP 地址可以被拆分为两个部分:

  • 网络编号:IP 地址的前若干位,以确定一个网络。
  • 主机编号:IP 地址的后若干位,以在网络中确定的一个机器。

网络编号确定 IP 地址在哪个网络中,主机编号确定该机器是网络中的哪一台机器。

IPv4 地址分组

在互联网早期,IP地址采用了分类寻址(classful addressing),具体而言,就是将 IP 地址根据其网络编号(前几位)分为 A、B、C 和 D 类。

在分类寻址中,如果给定一个 IP 地址,我们可以马上判断出该 IP 地址属于哪一类网络(根据前几位的值),以及该 IP 地址的 网络编号 和 主机编号是多少。

类别网络编号主机数量用途网络数量
A 类8位,第一位一定是12^24 - 2 = 16,777,214大型网络2^7 = 128
B 类16位,前两位一定是102^16 - 2 = 65,534中型规模网络2^14
C 类24位,前三位一定是1102^8 - 2 = 254小型网络2^21
D 类4位,固定为11102^28 = 268,435,456多播网络1

分类寻址可以简化路由器的设计和IP地址的分配,而且简单的策略是最好满足当时的需求的,少就是多,从简设计并没有什么不好。

但是人算不如天算,最早设计 IP 协议的专家并没想到若干年后会有如此多的联网设备,每个设备都需要分配一个 IP 地址,而 IP 地址的数量 相比 这些设备的数量 已经捉襟见肘。

使用分类 IP 也加剧了这种问题。首先,这种分类方式过于不灵活,会造成地址空间浪费的现象。 例如,一个B类地址可以容纳65,534个主机,但如果一个组织只有几千台主机,剩余的地址就浪费了。同样,如果一个C类地址不足以满足一个组织的需求,但B类又太大,分配就变得困难。

为了解决这个问题,聪明的计算机专家们又发明了 CIDR、NAT 等技术 以及 IPv6 协议。

CIDR

无类别域间路由(CIDR,classless inter-domain routing) 的主要目标是克服传统的基于类别的 IP 地址划分方法,使网络资源的分配更加灵活和高效。

在 分类寻址 中,每一类网络的网络编号的长度是固定的,在 CIDR 中,网络编号的长度是动态的,可以根据需求定制。其中网络编号的长度叫做前缀长度(Prefix Length),前缀长度通常以 IP地址 斜杠后跟一个数字表示,例如,192.168.1.13/24 表示前 24 位是网络部分,剩下的位数用于主机。

这里就要提到子网掩码(subnet mask)这个概念,如果一个 CIDR 网络的前缀长度是 n 位的话,那么其子网掩码的二进制表示就是 111 (n 个 1) ... 0000 (32-n 个 0),该子网掩码对应的点分十进制如下图所示。

CIDR
Subnet Mask
CIDR
Subnet Mask
/8
255.0.0.0
/21
255.255.248.0
/9
255.128.0.0
/22
255.255.252.0
/10
255.192.0.0
/23
255.255.254.0
/11
255.224.0.0
/24
255.255.255.0
/12
255.240.0.0
/25
255.255.255.128
/13
255.248.0.0
/26
255.255.255.192
/14
255.252.0.0
/27
255.255.255.224
/15
255.254.0.0
/28
255.255.255.240
/16
255.255.0.0
/29
255.255.255.248
/17
255.255.128.0
/30
255.255.255.252
/18
255.255.192.0
/31
255.255.255.254
/19
255.255.224.0
/32
255.255.255.255
/20
255.255.240.0

子网掩码的作用是找到 IP 地址的子网地址,IP地址 与 子网掩码 进行 与操作计算 即可得到对应的子网地址。子网地址的主机位全部为0。

子网划分

子网划分(Subnetting)是将一个较大的IP网络分割为多个更小的网络(子网)的过程。这种操作通常是在IP地址的网络部分与主机部分之间进一步引入子网位,以创建子网标识符。通过子网划分,网络管理员可以更有效地管理IP地址,减少网络流量,优化路由,并提高网络安全性。

在子网划分过程中,子网掩码(Subnet Mask)用于区分IP地址的网络部分和主机部分。常见的做法是通过调整子网掩码的长度,将更多位分配给网络部分,减少主机部分的位数。

子网划分包含 变长子网划分(Variable Length Subnet Masking, VLSM)和 固定长度子网划分(Fixed Length Subnet Mask, FLSM)两种方式。

变长子网划分

变长子网划分使用不同长度的掩码来划分IP地址空间,从而根据实际需求为各个子网分配不同数量的地址。

假设你有一个 C 类网络192.168.1.0/24,需要划分给三个部门,其中 A 部门需要 100 个 IP 地址,B 部门需要 50 个 IP 地址,C 部门只需要 25 个 IP 地址。

使用 VLSM,你可能会这样划分:

部分名称子网地址掩码地址个数
A 部门192.168.1.0/25255.255.255.128128
B 部门192.168.1.128/26255.255.255.19264
C 部门192.168.1.192/27255.255.255.22432

定长子网划分

固定长度子网划分使用相同长度的子网掩码来划分网络。这种方法在划分时更为简单和直接,但通常不如VLSM灵活高效。

假设你有一个 C 类网络192.168.1.0/24,需要划分给A, B, C, D四个部门,可以这样划分:

部分名称子网地址掩码地址个数
A 部门192.168.1.0/26255.255.255.19264
B 部门192.168.1.64/26255.255.255.19264
C 部门192.168.1.128/26255.255.255.19264
D 部门192.168.1.192/26255.255.255.19264

注意以上地址个数中包含全0和全1的无效地址。

IP 数据报分片

P 数据报分片是一种网络通信中的过程,它允许较大的 IP 数据报在经过一些网络链路时被分割成多个较小的片段,以适应网络链路的最大传输单元(MTU,Maximum Transmission Unit)。MTU 是指网络链路能够传输的最大数据报大小,不同网络链路的 MTU 大小可能不同。当一个 IP 数据报的大小超过了某个链路的 MTU 时,它就需要被分片,以确保可以顺利传输。

以下是 IP 数据报分片的基本过程:

  1. 发送端分片:
    • 发送端的主机首先创建一个 IP 数据报,并将它发送到目标主机。这个数据报的大小可能大于某些链路的 MTU。
  2. 路由器检查 MTU:
    • 当数据报经过路由器时,路由器会检查下一个链路的 MTU 大小。它会比较数据报的大小和链路 MTU。
    • 如果数据报的大小小于或等于链路 MTU,那么数据报会继续传输,无需分片。
    • 如果数据报的大小大于链路 MTU,那么路由器需要将数据报分片为多个较小的片段,以适应链路 MTU。
  3. 数据报分片:
    • 当数据报需要分片时,路由器会将数据报拆分成多个片段。每个片段都会包含原始数据报的一部分数据。
    • 每个片段的头部将保留原始数据报的首部,但有一个特殊的标志(Fragment Offset)来指示它在原始数据报中的位置,以及一些其他标志,如“不分片”标志(Don’t Fragment,DF)。
    • 路由器将这些片段分别发送到下一个链路。
  4. 目标端重组:
    • 当片段到达目标主机时,目标主机将重新组装这些片段以恢复原始的数据报。
    • 目标主机使用每个片段的标志和偏移量信息来确定如何正确地重组数据报。

分片例子:

假设我们有一个 IP 数据包,其总长度为 4000 字节,但它需要通过一个链路,该链路的 MTU 为 1500 字节。

数据报首部长度数据长度总长度片偏移源 IP 地址目的 IP 地址
原始 IP 数据报2039804000-192.168.1.110.0.0.1
分片 120148015000192.168.1.110.0.0.1
分片 220148015001480192.168.1.110.0.0.1
分片 320102010402960192.168.1.110.0.0.1

IP 组播

IP 组播(IP Multicast)是一种 IP 通信模式,允许一台发送器将数据包发送到多个接收器,而不是传统的单播(点对点通信)模式。组播是一种多对多的通信方式,非常适合用于广播、多媒体流传输和分布式应用中。

以下是 IP 组播的一些关键特点和概念:

  1. 组播组:IP 组播通信由一个或多个组播组组成,每个组都有一个唯一的组播组地址。组播组地址属于 IPv4 地址范围的特殊区域,通常以 224.0.0.0 到 239.255.255.255(D 类地址) 为范围。多个接收器可以订阅同一个组播组。
  2. 发送器:发送器是将数据包发送到组播组的设备。发送器只需发送一次数据包,然后由网络基础设施复制并传送给订阅了该组播组的接收器。
  3. 接收器:接收器是订阅了特定组播组的设备。它们希望接收组播组中的数据。接收器可以是单个主机、路由器或多个主机。
  4. IGMP(Internet Group Management Protocol):IGMP 是用于管理 IP 组播成员的协议。它允许主机通知路由器它们希望加入或离开特定的组播组。路由器使用 IGMP 来了解哪些主机希望接收特定组播组的数据。
  5. 组播路由:组播路由器是网络中的设备,负责将组播数据包从发送器传送到接收器。组播路由器根据 IGMP 报文和组播组地址表,将数据包仅传送到订阅了该组播组的网络分支。
  6. 组播范围:IP 组播地址可以分为不同的范围,如永久组播地址、临时组播地址和本地链路组播地址,以满足不同的需求和使用情况。
Unicast
Unicast
Broadcast
Broadcast
Multicast
Multicast
Class A,B,C
Transport TCP and UDP
Class A,B,C...
Hosts all 1's
Transport UDP only
Hosts all 1's...
Class D
Transport UDP only
Class D...
Text is not SVG - cannot display

IPv6

特点

  1. 扩展的地址空间:IPv6 大幅扩展了 IP 地址空间,使用 128 位地址,相对于 IPv4 的 32 位地址,IPv6 提供了约 340 亿亿亿亿(3.4 x 10^38)个可能的地址,解决了 IPv4 地址枯竭的问题。
  2. 简化的报头:IPv6 报头相对于 IPv4 报头更简化,减少了路由器处理数据包的开销,提高了路由性能。
  3. 自动地址配置:IPv6 支持自动地址配置,其中设备可以通过 Router Advertisement 消息获取自己的 IPv6 地址,减少了手动配置的需要。
  4. 移动性支持:IPv6 内置了对移动 IP(Mobile IP)的支持,使移动设备能够无缝地切换网络而无需更改 IP 地址。
  5. 改进的安全性:IPv6 在设计上包括了对 IPsec(IP Security)的支持,这增加了网络通信的安全性和隐私保护。
  6. 多播和任播:IPv6 对多播和任播提供了更强大的支持,使网络更加高效。
  7. 简化的头部处理:IPv6 取消了 IPv4 中的首部校验和,减少了路由器在处理数据包时的负担。
  8. 更好的 QoS 支持:IPv6 提供了更多的选项和字段来支持服务质量(Quality of Service)

地址

IPv6 地址使用 128 位,通常以冒号分隔的 16 位十六进制数表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

IPv6 地址分为以下几种类型:

  • 单播地址(Unicast Address):用于将数据包从一个源节点传输到一个目标节点。
  • 多播地址(Multicast Address):用于将数据包传输到一组目标节点,而不是单个节点。
  • 任播地址(Anycast Address):用于将数据包传输到一组目标节点中的最近者(最接近的一个)。
  • 回环地址(Loopback Address):用于将数据包返回到发送节点,通常表示为"::1"。
  • 链路本地地址(Link-Local Address):用于在同一链路上的节点之间通信,通常自动配置,范围为 FE80::/10。
  • 全局地址(Global Unicast Address):用于全球范围的通信,类似于 IPv4 的公有 IP 地址。
  • 唯一本地地址(Unique Local Address):类似于 IPv4 的私有 IP 地址,用于组织内的通信。
  • 专用地址(Special Addresses):用于特殊用途,例如文档中的示例地址、自动配置地址等。

移动 IP

移动 IP(Mobile IP)是一种网络协议,用于实现移动设备在不同网络之间切换时,仍能够保持连接并无缝通信。移动 IP 的主要目标是支持移动性,允许移动设备在移动时保持与互联网或企业网络的连接。

通信过程

  1. 移动节点在家庭网络中连接,并分配了家庭网络的永久 IP 地址,建立了通信会话。
  2. 当移动节点决定移动到外部网络时,它会通知家庭网络的移动 IP 服务节点,告知其即将离开。
  3. 家庭网络的移动 IP 服务节点会分配一个临时 IP 地址,并记录移动节点的当前位置。
  4. 移动节点连接到外部网络,使用临时 IP 地址与外部网络中的其他设备通信。
  5. 当其他设备要与移动节点通信时,数据包被发送到移动节点的临时 IP 地址,然后到达外部网络。
  6. 外部网络的移动 IP 服务节点接收到数据包后,将数据包转发到移动节点的临时 IP 地址。
  7. 移动节点接收到数据包后,可以回复或继续与外部网络中的其他设备通信。
  8. 如果移动节点决定返回家庭网络,它可以通知外部网络的移动 IP 服务节点,并断开与外部网络的连接。
  9. 移动节点返回家庭网络后,通信会话继续,并且移动节点将继续使用家庭网络的永久 IP 地址。

4.2 - ICMP

掌握ICMP的功能和应用,并且了解一下ICMP的消息类型,可能在选择题中考察。

ICMP(Internet Control Message Protocol)是一个网络层协议,用于在IP主机和路由器之间发送控制消息。ICMP是Internet协议套件的一个重要组成部分,它主要用于诊断和报告网络中的错误和某些特定条件。

首部

Type
Code
Checksum
Content
0
8
16
31
  1. 类型 (Type) : 8 位
    • 用于指定 ICMP 消息的类型。例如, Echo Request 的类型为 8Echo Reply 的类型为 0 。
  2. 代码 (Code) : 8 位
    • 为更进一步细分某个特定类型的 ICMP 消息而设置。例如,对于“目的地不可达”( Destination Unreachable )类型的消息,代码可以用来指定具体的不可达原因,如网络不可达、主机不可达等。
  3. 检验和 (Checksum) : 16 位
    • 用于验证 ICMP 消息在传输过程中没有被损坏。这个检验和涵盖了整个 ICMP 消息。
  4. 其它字段
    • 这些字段的内容取决于 ICMP 消息的类型和代码。例如,对于 Echo RequestEcho Reply 消息,接下来的字段包括一个标识符( Identifier )和一个序列号( Sequence Number )。

消息类型

这里不需要背,了解消息类型的含义即可,比方说给你一个消息类型源点抑制,你能知道它是干嘛的就行。

  1. Echo RequestEcho Reply (ping)
    • Echo Request: 通常被称为 ping 请求。用于测试目的地是否可达。
    • Echo Reply: 通常被称为 ping 回应。是对 Echo Request 的回应。
  2. Destination Unreachable
    • 当数据不能被传送到目的地时,发送此消息。
    • 下面是一些常见的“不可达”子类型:
      • Network Unreachable: 无法到达目标网络。
      • Host Unreachable: 无法到达目标主机。
      • Protocol Unreachable: 目标网络不支持所请求的协议。
      • Port Unreachable: 目标主机上的特定端口不可用。
      • Fragmentation Needed and Dont Fragment was Set: 数据包太大,需要分片,但数据包的“不分片”标志已设置。
      • Source Route Failed: 源路由指定的路径失败。
      • Network Unknown: 目标网络未知。
      • Host Unknown: 目标主机未知。
  3. Source Quench (源点抑制)
    • 网络中出现拥塞,请发送主机放慢发送数据包的速度。
  4. Redirect
    • 告诉发送主机存在更好的路由。
  5. Time Exceeded
    • 当数据包在网络中传输的时间太长或超过了其 TTL (生存时间)时发送。有两种主要的子类型:
    • TTL Exceeded in Transit: 数据包在传输过程中 TTL 达到零。
    • Fragment Reassembly Time Exceeded: 分片重新组装超时。
  6. Parameter Problem
    • IP 头包含错误或不可识别的信息时,发送此消息。
  7. Timestamp Request and Timestamp Reply
    • 用于报告当前的时间。
  8. Address Mask Request and Address Mask Reply
    • 用于请求和响应子网地址掩码。

应用

这里需要了解基于 ICMP 协议的两个 linux 程序,一个是 ping,大家应该都比较熟悉。 另一个是 traceroute,用于寻找从起点到终点经过了哪些 IP 地址。

ping

ping demo

  • ping 主要使用两种 ICMP 消息:Echo Request 和 Echo Reply。
  • 当您执行 ping 命令时,您的计算机发送一个 ICMP Echo Request 消息到指定的目标。
  • 如果目标主机可达并运行,它会返回一个 ICMP Echo Reply 消息。
  • ping 工具记录这两个消息之间的时间差,即往返时间(RTT),并将其显示给用户。

traceroute

traceroute demo

  • traceroute 的目标是确定数据包从源计算机到目标计算机的路径中的所有中间跃点(通常是路由器)。
  • 它的工作原理基于 IP 数据包的 TTL(Time-to-Live) 字段。TTL 是每个 IP 数据包都有的字段,它在每次数据包经过一个路由器时减少1,当 TTL 达到0时,该数据包就被丢弃,并向源发送一个 ICMP Time Exceeded 消息。
  • 当开始执行 traceroute 时,第一个数据包的 TTL 被设置为 1。这意味着第一个路由器将丢弃它并发送一个 Time Exceeded 消息。这个消息告诉 traceroute 第一个路由器的位置。
  • 接下来,traceroute 发送一个 TTL 为 2 的数据包。这次,第二个路由器会丢弃数据包并发送 Time Exceeded 消息。这个过程继续,直到数据包到达目标,目标返回一个 ICMP Echo Reply 消息。
  • 通过逐步增加 TTL 值并监听 Time Exceeded 和 Echo Reply 消息,traceroute 能够映射出到目标的完整路径。

4.3 - DHCP

掌握 DHCP 的功能和流程,可能在选择题中考察。

动态主机配置协议(DHCP)是一个网络管理协议,用于自动分配IP地址和其他网络配置参数给网络设备,从而允许它们连接到IP网络。

当你连接到一个网络中时,不管是通过无线网,还是在电脑上连接了以太网线,你会发现无需任何配置,你自动获取了一个 IP 地址,并可以通过该 IP 地址进行网络通信。

DHCP DISCOVER (broadcast)
DHCP DISCOVER (broadcast)
DHCP Offer
DHCP Offer
DHCP REQUEST
DHCP REQUEST
DHCP ACK
DHCP ACK
Where is the DHCP server ?
Where is the DHC...
Hello, I need
IP Address
Hello, I need...
DHCP server is
at 10.1.1.1
DHCP server is...
Here is your
IP Address
Here is your...
Text is not SVG - cannot display

DHCP的工作流程通常包括以下四个步骤,这个过程也被称作DORA过程,即Discover, Offer, Request, 和 Acknowledgment。

  1. Discover:
    • 客户端通过网络广播一个 DHCP 发现消息(DHCP DISCOVER),请求可用的网络配置信息。因为客户端还没有分配到 IP 地址,所以这个消息是从 0.0.0.0 的源 IP 地址发送到 255.255.255.255 的目的 IP 地址。
  2. Offer:
    • 网络上的 DHCP 服务器接收到 DHCP 发现消息后,会向客户端发送一个 DHCP 提供消息(DHCP OFFER)。这个消息包含了一个提供给客户端的 IP 地址和其他配置信息,如子网掩码、DNS 服务器地址和 IP 地址租用期。
  3. Request:
    • 客户端可能会从多个 DHCP 服务器收到多个 DHCP OFFER 消息。客户端选择其中一个提议,并通过广播一个 DHCP 请求消息(DHCP REQUEST)来响应这个提议,通知网络中的所有 DHCP 服务器它接受了哪个 DHCP 服务器的提议。
  4. Acknowledgment:
    • 提供所选 IP 地址的 DHCP 服务器收到 DHCP 请求消息后,会发送一个 DHCP 确认消息(DHCP ACK)给客户端,确认 IP 地址和配置信息的租约。如果由于某种原因导致该 IP 地址不再可用或者有其他问题,DHCP 服务器可能会发送一个 DHCP 否认消息(DHCP NAK)。

4.4 - ARP

掌握ARP的概念和流程,可能在选择题中考察。

概念

ARP(Address Resolution Protocol,地址解析协议)是一种在TCP/IP网络中使用的协议,用于将IP地址转换为物理硬件地址(例如,MAC地址)。ARP的主要目的是确定要通过网络传输数据的目标设备的物理硬件地址,以便将数据帧正确地传送到目标设备。

10.1.1.2
10.1.1.2
Switch
Switch
10.1.1.5
10.1.1.5
10.1.1.4
10.1.1.4
10.1.1.3
10.1.1.3
Requesting the mac address
for 10.1.1.1
Requesting the mac addr...
Sending mac address
5a:71:22:65:55:31
Sending mac address...
Text is not SVG - cannot display

流程

以上图为例,主机 10.1.1.2 用 ARP 协议查找主机 10.1.1.4 的 MAC 地址,其流程如下图所示

sequenceDiagram
  participant 10.1.1.2;
  participant Switch;
  10.1.1.2 ->> Switch: 请求 IP 地址为 10.1.1.4 的设备的 MAC 地址;
  Switch ->> 10.1.1.3: 广播 ARP 请求;
  Switch ->> 10.1.1.4: 广播 ARP 请求;
  Switch ->> 10.1.1.5: 广播 ARP 请求;
  10.1.1.4 ->> Switch: 返回 ARP 响应;
  Switch ->> 10.1.1.2: 交换器转发 ARP 响应;

具体而言,一次 ARP 请求可以被拆分为如下步骤:

  1. ARP请求

当一台设备(我们称它为主机A)需要发送数据包到同一局域网内的另一台设备(主机B),但它只知道目标设备的IP地址时,它会在本地网络上广播一个ARP请求。这个请求大致是这样的:“拥有IP地址X.X.X.X的设备,请告诉我你的物理MAC地址。”

  1. 网络上的广播

ARP请求是一个广播帧,它发送到本地网络上的所有设备。每一台设备都会收到这个请求,但只有IP地址匹配请求中IP地址的设备会回应这个请求。

  1. ARP响应

当主机B收到这个ARP请求后,它会识别出请求中的IP地址与自己的IP地址相匹配,然后向主机A发送一个ARP响应。这个响应包含了主机B的MAC地址,并且这个响应是直接发送给主机A的,不是广播。

  1. 更新ARP缓存

主机A收到ARP响应后,它会在自己的ARP缓存表中更新这个信息,将主机B的IP地址与其MAC地址关联起来。ARP缓存表中的这些条目通常会在一段时间后过期,所以可能需要定期更新。

  1. 数据传输

主机A现在知道了主机B的MAC地址,它可以构建一个以太网帧,将数据包含在其中,并使用B的MAC地址作为目的地址发送出去。

ARP缓存

所有主机都会维护一个ARP缓存,该缓存存储了网络上其他设备的IP地址和MAC地址的映射。 这减少了广播ARP请求的需要,因为主机可以查看自己的缓存来找到之前解析过的地址。

以下是一个简化的 ARP 缓存表格示例,展示了 IP 地址与 MAC 地址的映射关系:

IP 地址MAC 地址状态接口
192.168.1.100:1A:2B:3C:4D:5E动态eth0
192.168.1.200:1A:2B:3C:4D:5F静态eth0
192.168.1.300:1A:2B:3C:4D:60动态wlan0
192.168.1.400:1A:2B:3C:4D:61动态eth0

注意

ARP运行在哪一层

地址解析协议(ARP)实际上是一个介于数据链路层(第二层)和网络层(第三层)之间的协议。ARP的功能是将网络层的地址(如IPv4地址)解析为数据链路层的地址(如以太网MAC地址)。虽然它处理的是网络层地址,但它运行在数据链路层,直接构建和发送数据链路层的帧。因此,它通常被认为是网络层的一个辅助协议,但技术上它操作在数据链路层。

4.5 - 路由算法

掌握RIP和OSPF的流程,可能在选择题中考察。

静态路由和动态路由

路由表的配置包含两种方式:静态路由和动态路由。

静态路由表示路由器的路由规则由人工进行手动配置,是写死的,每次想更改路由表时必须手动去更改。

动态路由规则根据 路由算法 动态地构建路由表,这里主要包含 RIP 和 OSPF 两种方式。

两种路由方式的具体对比如下表所示:

特点静态路由动态路由
配置方式手动配置自动学习和适应
适用性适用于小型网络或需要特定路由策略的情况适用于大型、复杂的网络
稳定性较稳定可能更灵活,但较复杂
自动故障恢复不支持自动故障恢复支持自动故障检测和恢复
网络变化响应速度静态,不会自动适应网络变化自动适应网络变化,响应速度较快
管理复杂性相对简单较复杂,需要更多计算和资源
适用情况较小规模的网络,特定路由策略需求大型、复杂网络,需要动态适应

什么是路由算法

路由算法是网络通信中的一种机制,它决定数据包在计算机网络中从源地址传输到目标地址的路径。路由算法通过选择最佳路径来优化数据传输,确保数据有效且快速地传递。

路由算法的设计是为了实现以下目标:

  1. 最短路径选择:刚一个数据包经过当前机器时,路由算法通过计算路径的成本(如跳数、带宽、延迟等),能够选择从源到目标的最短或最优路径。
  2. 负载均衡:在网络拥堵时,将数据流量分散到多条路径上,以避免某一条路径过载。
  3. 快速收敛:当网络拓扑发生变化(如链路失败或新增路由器)时,路由算法能够快速调整并更新路由信息,确保网络稳定。

RIP 算法

RIP(Routing Information Protocol)是一种基于距离向量的路由协议,主要用于小型和中型网络中的内部网关协议。

距离向量

目标网络距离(跳数)下一跳
192.168.1.0/240A
192.168.2.0/241B
192.168.3.0/241C

一个典型的距离向量(Distance Vector)可以表示为一个列表,其中每个条目包含以下信息:

  • 目的地:目标网络或子网的地址。
  • 距离:从当前路由器到达目标网络的代价,通常以跳数、延迟、带宽等度量标准表示。
  • 下一跳:到达目标网络的下一跳路由器的地址。

距离向量算法

在距离向量算法中, 通过 周期性地 与相邻路由器 交换距离向量信息,每个路由器能够逐渐获得整个网络的拓扑信息,并更新其路由表 以选择最佳路径

具体而言,工作流程如下:

  • 初始化:每个路由器初始化其距离向量,只包含自己直接连接的网络,距离设为0。
  • 周期性更新:每个路由器周期性地将其距离向量广播给所有相邻的路由器。
  • 接收和更新:每个路由器接收到相邻路由器的距离向量后,检查是否有新的或更短的路径。如果有,则更新自己的距离向量和路由表。
  • 收敛:经过多次交换和更新后,所有路由器的距离向量和路由表最终会收敛到最优路径。

最短路径计算方法

当路由器 $A$ 接收到来自相邻路由器 $B$ 发送的关于某个子网 $N$ 的距离向量 $V_{B}$ 时,它需要将 $V_{B}$ 中的跳数加一 然后与当前的到达子网 $N$ 的距离向量 $V_{A}$ 进行比较(需要加一的原因时从 $A$ 出发要经过 $B$,所以多了一跳),具体比较方式如下:

  • 如果 $A$ 不存在到达子网 $N$ 的路由的话,直接添加 $V_{B}$ 进入路由表
  • 如果 $V_{B}$ 的跳数小于 $V_{A}$ 的跳数的话,使用 $V_{B}$ 替换 $V_{A}$

以上过程使用的算法名称叫做 Bellman-Ford 算法,是一种寻找单源最短路径的算法,单源最短路径的意思是从一个结点出发到达其他结点的最短路径。这个算法不会直接考察,了解这个算法的名称即可。

OSPF 算法

OSPF(Open Shortest Path First)是一种基于链路状态的内部网关协议(IGP),广泛应用于中大型网络中。

OSPF 几乎不考察,这里主要了解以下几个小节的概念即可。

链路状态通告

路由器通过链路状态通告(LSA,Link State Advertisement)来了解其与邻居之间的链路状态。

在 RIP 路由算法中,路由器会定期将自己的距离向量发送给相邻的路由器。在 OSPF 中,也有类似的概念,不过这里传送的不是距离向量,而是链路状态通告。

路由器将其自身的状态和与邻居的链路状态信息打包成链路状态包(LSP,Link State Packet),并在网络中洪泛(flooding)传播。

每个LSA专注于描述一种类型的链路状态或网络信息。一个LSA包含的信息通常是:

  • 路由器与某一特定链路的连接状态(如Router LSA)。
  • 某个网络的状态和与其相连的路由器信息(如Network LSA)。
  • 区域间或外部路由信息(如Summary LSA和AS External LSA)。

链路状态数据库

链路状态数据库(LSDB,Link State Database)是 OSPF 协议中的一个关键组件,它存储了网络中所有链路状态通告(LSA)。通过 LSDB,每个路由器可以构建整个网络的拓扑图,并使用 Dijkstra 算法计算最短路径树。

这里举个例子方便大家理解 LSDB 的概念。 假设我们有一个简单的网络拓扑,包含4个路由器(R1, R2, R3, R4)和几个网络网段(NetA, NetB, NetC)。

      NetA
    /       \
[R1]-----[R2]-----[NetB]
  |        |        |
  |        |        |
[NetC]    [R3]----[R4]

在链路状态算法收敛之后,某个路由器的 LSDB 可能是如下这种形式:

LSA 类型LSA ID路由器 ID链路 ID链路类型路径成本连接的路由器或网络
Router1R1NetA广播链路10R2
Router1R1NetC广播链路5
Router2R2NetA广播链路10R1
Router2R2NetB广播链路15R4
Router2R2R3点对点链路20R3
Router3R3R2点对点链路20R2
Router3R3R4点对点链路10R4
Router4R4NetB广播链路15R2
Router4R4R3点对点链路10R3

链路状态路由算法

OSPF 中的链路状态路由算法的思想与 RIP 中的最短路径计算算法的思想类似,不过这里是使用 Dijkstra 算法来计算最短路径。 Dijkstra算法使用LSDB中的信息来生成一棵最短路径树(SPT),确定从源节点到所有其他节点的最短路径。

对比

特性OSPFRIP
协议类型链路状态协议(Dijkstra算法)距离矢量协议(Bellman-Ford算法)
路由度量基于带宽的成本基于跳数(最大15跳)
拓扑视图全局拓扑视图仅相邻信息
收敛时间
网络规模适用于大型复杂网络适用于小型网络
更新机制事件驱动(LSA泛洪)周期性(每30秒广播路由表)
安全性支持多种认证机制RIP v2支持简单认证,RIP v1无认证
配置和管理配置复杂,适合大规模网络配置简单,适合小规模网络
更新信息发送链路状态变化发送整个路由表
多路径支持支持等价多路径路由(ECMP)支持但效果较差

4.6 - SDN

了解SDN控制平面、数据平面、接口以及流表基本概念,可能在选择题中考察一题。

软件定义网络 (SDN) 是一种新颖的网络架构,它将网络的控制功能从传统的网络硬件中解耦出来,并允许通过软件应用程序来进行集中式管理。SDN 提供了更高的网络灵活性,使得网络配置、优化、管理和调试都变得更加简单。

控制平面和数据平面

在 SDN 中,主要有两个关键的组件:数据平面 (Data Plane) 和控制平面 (Control Plane)。

  1. 数据平面 (Data Plane):
    • 这是网络中负责处理数据包的部分,通常是在交换机、路由器等设备上。
    • 它基于控制平面提供的策略和规则,进行数据包的转发、丢弃或修改。
    • 数据平面通常需要高效地执行操作,因为它直接影响网络的性能。
  2. 控制平面 (Control Plane):
    • 控制平面负责整个网络的决策和策略,确定如何处理在网络中流动的数据包。
    • 在传统的网络设备中,控制平面直接嵌入在设备上。但在 SDN 中,这个控制平面被抽象为一个集中的软件控制器。
    • 控制器与网络设备之间的交互是通过某些标准化的接口进行的,这样可以确保多厂商设备的互操作性。

接口

SDN 架构中的接口主要分为南向接口和北向接口。

  1. 南向接口 (Southbound Interface):
    • 这是 SDN 控制器与网络设备之间的接口。
    • 它允许控制器下发流表到数据平面设备,并从设备获取信息。
    • OpenFlow 是最常用的南向接口协议,但还有其他协议也被使用。
  2. 北向接口 (Northbound Interface):
    • 这是 SDN 控制器与网络应用或上层服务之间的接口。
    • 通过这个接口,应用程序可以请求网络服务或查询网络状态,并指导控制器进行相应的网络配置。
    • 这个接口通常没有严格的标准,但通常提供 RESTful API 供开发者使用。

除此之外,还有东向接口 (East/West Interface),它用于 SDN 控制器之间的通信,特别是在多控制器的环境中。

流表

流表基本上是一个数据库或查找表,用于决定如何处理经过交换机的数据包。

在 OpenFlow 交换机中,可能有多个流表,并且数据包可能按照顺序经过这些流表。每个流表可能基于不同的规则或策略来处理数据包,这为网络设计提供了高度的灵活性。

流表的内容通常由 SDN 控制器动态管理和更新,这是通过南向接口(如 OpenFlow 协议)实现的。当网络的状态或策略发生变化时,控制器可以修改流表条目以适应新的需求。

流表中主要包含如下部分:

  1. 匹配字段 (Match Fields):
    • 这些字段描述了特定的数据包特征。例如,它可以匹配数据包的源地址、目的地址、端口号、VLAN 标签等。
    • 当一个数据包到达交换机时,它的头部字段会与流表中的匹配字段进行比较,以决定哪个条目适用于该数据包。
  2. 优先级 (Priority):
    • 当多个流表条目都能匹配到一个数据包时,优先级最高的条目会被选中。
    • 优先级使得网络管理员可以设计更为精确和特定的流规则。
  3. 计数器 (Counters):
    • 这些是用于收集统计信息的,如匹配到某个流条目的数据包数量。
    • 计数器有助于网络监控和分析。
  4. 指令和动作 (Instructions & Actions):
    • 当一个数据包与流表条目匹配时,会执行相应的指令和动作。
    • 常见的动作包括:转发数据包到特定的端口、丢弃数据包、修改数据包头部信息、发送数据包到控制器等。

4.7 - 网络层设备

掌握路由器的组成和功能,以及掌握路由表的画法,会在选择题和大题中考察。

路由器组成和功能

组成部分:

  1. CPU(Central Processing Unit):路由器的中央处理单元,负责处理数据包的转发和路由决策。CPU执行路由算法、管理路由表和处理控制面的任务。
  2. 内存(Memory):路由器的内存用于存储操作系统、路由表、缓存、缓冲区以及临时数据。内存的大小和速度对路由器的性能至关重要。
  3. 接口(Interfaces):路由器通常具有多个网络接口,例如以太网端口、无线局域网接口(Wi-Fi)、串行接口等,用于连接到不同类型的网络和设备。
  4. 操作系统(Operating System):路由器运行的操作系统通常是专门设计的网络操作系统,用于管理设备、执行路由协议、配置接口和提供网络服务。
  5. 路由表(Routing Table):路由表是路由器的核心组成部分,它存储了关于网络之间如何进行路由的信息。路由表包括目标网络的IP地址、下一跳路由器、接口和跃点数等信息。

功能:

  1. 数据包转发:路由器的主要功能之一是根据路由表将数据包从一个接口转发到另一个接口,以便在不同网络之间进行通信。
  2. 路由决策:路由器根据路由协议(如RIP、OSPF、BGP等)和路由表的信息,决定如何将数据包传送到目标网络。
  3. NAT(Network Address Translation):路由器可以执行NAT,将内部私有网络中的设备使用单一的公共IP地址映射到互联网上,以增加网络安全性和节省IP地址。

路由表的分组转发

路由表

Network Destination
Network Mask
Gateway
Interface
Metric
101.56.67.0
255.255.255.0
10.0.0.2
eth3
1
default
0.0.0.0
10.0.0.1
eth0
0
192.25.67.0
255.255.255.0
10.0.0.3
eth5
10

路由表是路由器内部的数据结构,其中包含了有关网络之间如何进行路由的信息。路由表是根据路由协议(如RIP、OSPF、BGP等)和手动配置动态生成和维护的。

路由表包含如下信息:

  • 目标网络(Network Destination):表示数据包要传递到的目标网络或主机。
  • 子网掩码(Network Mask):确定了目标网络的范围,路由器使用它来匹配数据包的目标地址。
  • 网关(Gateway):数据报转接口的IP地址。
  • 接口(Interface):指明了路由器上哪个物理或逻辑接口将被用来转发数据包。
  • 跳数/度量值(Metric):跳数或度量值是路由选择的一个度量标准,用来表示到达目标地址的成本。如果存在多条路由到同一个目的地,路由器通常会选择跃点数最低的路由。

分组转发

  • 当路由器收到一个数据包,它首先查找路由表以确定数据包的目标网络。
  • 一旦确定了目标网络,路由器使用路由表中的信息决定下一跳路由器和出接口。
  • 路由器会将数据包复制到适当的出接口,并以数据链路层帧的形式发送到下一跳路由器。
  • 这个过程在网络中不断重复,直到数据包到达目标网络。

NAT

NAT(Network Address Translation,网络地址转换)是一种网络技术,用于在私有网络(通常是局域网)内的多个设备与外部互联网之间共享单一公共 IP 地址。NAT 通过修改数据包的源 IP 地址和目标 IP 地址来实现这一目标。

192.168.100.3
192.168.100.4
192.168.100.5
Default Gateway
192.168.1.1
Router/NAT Device
145.12.131.7
(Public IP Address)
private network
the internet

NAT表

上图中路由器的 NAT表 的示例如下:

私有IP地址私有端口公有IP地址公有端口协议连接状态
192.168.100.312345145.12.131.754321TCPESTABLISHED
192.168.100.48888145.12.131.754322UDPNEW
192.168.100.515839145.12.131.754323TCPSYN_SENT
192.168.100.37890145.12.131.754324TCPESTABLISHED

表中条目 包含如下内容:

  • 内部私有IP地址:局域网中设备的私有IP地址。
  • 内部端口号:发送数据包的私有网络设备所使用的端口号。
  • 外部公有IP地址:路由器在广域网(WAN)侧使用的IP地址,通常是单个IP地址,但也可能有多个。
  • 外部端口号:与内部端口号对应的,由NAT分配用于标识特定会话的公有端口号。
  • 协议类型:数据包使用的协议(如TCP、UDP等)。

NAT表的条目通常是动态创建的。当内部设备发起到外部网络的连接时,路由器会在NAT表中创建一个条目。通过NAT表,路由器可以将从外部网络收到的数据包转发到正确的内部设备。当NAT表中的条目因为超时或者NAT表容量限制而被删除时,新的数据包会触发创建新的NAT条目。

地址转化过程

NAT的地址转化过程如下所示,分为数据包进入公网 或者 进入内网:

  • 当内网IP数据包经过NAT路由器向外部发送时,其源IP地址和端口会被修改成公有IP地址和公有端口。
  • 当IP数据包经过NAT路由器被发送往内网的某个机器时,其目的IP地址和端口会被修改位私有IP地址和私有端口。

私有IP地址

内网地址(私有IP地址)包含以下三个范围:

  • 10.0.0.0/8:从 10.0.0.010.255.255.255,用于大型网络和企业网
  • 172.16.0.0/12172.16.0.0172.31.255.255,用于中型网络
  • 192.168.0.0/16192.168.0.0192.168.255.255,用于小型网

优势

  • 安全性增强:通过隐藏内部网络的真实结构,NAT 提供了一定程度的安全性,可以有效减少攻击者直接访问内部网络的机会。
  • 地址空间节省:NAT 允许多个设备使用单一的公共 IP 地址,这有助于缓解 IPv4 地址枯竭的问题,尤其是在大规模部署中。
  • IPv4 地址重用:NAT 允许内部网络使用私有 IP 地址,因此可以重复使用相同的私有 IP 地址范围,而不会与其他网络冲突。

路由器接口的IP的地址

  • 点对点连接:当两个路由器直接相连时,它们的接口通常会使用一个小的子网,比如一个/30的IPv4子网,提供两个可用的IP地址,每个路由器接口配置一个。
  • 连接到子网:路由器的接口连接到局域网或子网时,接口将被分配一个该子网内的IP地址,通常选择子网的第一个或最后一个IP地址,用作该子网内设备的 默认网关
192.168.1.2/26
192.168.1.3/26
192.168.1.66/26
192.168.1.67/26
H1
H2
H3
H4
Internet
IF1
IF2
IF3
Network Destination
Network Mask
Interface
Gateway
default
0.0.0.0
IF1
192.168.1.254
192.168.1.0
255.255.255.192
IF2
192.168.1.1
192.169.1.64
255.255.255.192
IF3
192.168.1.65
192.168.1.253/30
101.1.2.10
Router 1
Router 2
Routing Table For Route2

5 - 传输层

本章是计算机网络中的重点,需熟练掌握TCP的滑动窗口机制、连接断开与建立、流量和拥塞控制。

学习思维导图

# 传输层

## 提供的服务

- 传输层功能
- 寻址和端口
- 无连接和面向连接服务

## UDP协议

- UDP数据报
- UDP校验

## TCP协议

- TCP段
- 连接管理
- 可靠传输
- 流量控制
- 拥塞控制

传输层功能

  1. 数据分段与重组:传输层将上层应用层提供的数据流划分为较小的数据段,以便在网络中传输。在接收端,传输层负责将这些数据段重新组装成完整的数据流,以交付给应用层。
  2. 端口标识与多路复用:传输层使用端口号来标识不同的应用程序或服务。当多个应用程序同时运行时,传输层可以将它们的数据段混合在一起传输,并在接收端根据端口号将数据分发给正确的应用程序,从而实现多路复用。
  3. 会话管理:传输层还可以支持会话管理,包括建立、维护和终止与远程主机之间的通信会话。这是通过传输层协议中的握手和挥手过程来实现的,例如TCP握手过程。
  4. 差错检测与纠正:传输层可以检测并纠正数据传输过程中的错误,确保数据的完整性和正确性。这通常涉及使用校验和和纠错码等技术。

5.1 - TCP

TCP 是计算机网络中重点,需要熟练掌握 TCP 的可靠传输机制,包含连接建立和断开、流量控制、拥塞控制,常常在选择题和大题中出现。

TCP 特点

  • 面向连接:发送数据前后需要分别通过三次握手和四次挥手进行连接的建立和断开。
  • 可靠交付:保证数据传输的无差错、不丢失、不重复、有序。
  • 面向字节流:以滑动窗口的形式对字节按照顺序进行发送和接收。
  • 全双工:通信双方在一个 TCP 连接中都可以发送和接收数据。

TCP 首部

Source Port (16)
Source Port (16)
Sequence Number (32)
Sequence Number (32)
Options
Options
Data
Data
Destination Port (16)
Destination Port (16)
Acknowledgement Number (32)
Acknowledgement Number (32)
Checksum (16)
Checksum (16)
Urgent (16)
Urgent (16)
Window (16)
Window (16)
Header
Length (4)
Header...
Reserved (6)
Reserved (6)
Flags (6)
Flags (6)
TCP Header
TCP Header
Bit 0
Bit 0
Bit 15
Bit 15
Bit 16
Bit 16
Bit 31
Bit 31
20 Bytes
20 Bytes
Text is not SVG - cannot display
  1. 源端口号(Source Port):16 位字段,指示发送端的端口号。
  2. 目标端口号(Destination Port):16 位字段,指示接收端的端口号。
  3. 序列号(Sequence Number):32 位字段,用于标识 TCP 报文段中第一个数据字节的序列号。这个字段用于实现 TCP 的可靠性机制,如数据的按序传递和重传。
  4. 确认号(Acknowledgment Number):32 位字段,如果设置了 ACK 标志位,该字段包含了期望接收的下一个数据字节的序列号。这个字段用于确认已经成功接收的数据。
  5. 数据偏移(Data Offset):4 位字段,指示 TCP 首部的长度,以 32 位字为单位。这个字段用于指示首部的长度,因为 TCP 首部长度可以变化,根据选项的存在而变化。
  6. 保留(Reserved):6 位字段,保留供未来使用,目前必须设置为 0。
  7. 控制标志位(Flags):TCP 报文段的控制标志,共有 6 个标志位,它们分别是:
    • URG(紧急指针有效位):用于指示紧急数据。
    • ACK(确认位):用于指示确认号字段有效。
    • PSH(推送位):用于指示接收端应立即交付数据给应用层,而不需要等待缓冲区满。
    • RST(复位位):用于强制释放连接,重置连接状态。
    • SYN(同步位):用于建立连接,用于初始化序列号。
    • FIN(终止位):用于关闭连接。
  8. 窗口大小(Window Size):16 位字段,指示发送端的可用接收窗口大小。接收端可以根据这个字段的值来告诉发送端可以发送多少数据而不会导致拥塞。
  9. 校验和(Checksum):16 位字段,用于检测 TCP 首部和数据部分的传输中的错误。
  10. 紧急指针(Urgent Pointer):16 位字段,仅当 URG 标志位设置时才有效。用于指示紧急数据的末尾位置。
  11. 选项(Options):可选字段,用于包含一些额外的控制信息,如最大报文段长度、时间戳等。长度可变,最长可达 40 字节。
  12. 填充(Padding):根据选项字段的长度而变化,用于确保 TCP 首部的总长度是 32 位的倍数。

三次握手

SYN SENT
SYN SENT
SYN  RECEIVED
SYN  RECEIVED
ESTABLISHMENT
ESTABLISHMENT
ESTABLISHMENT
ESTABLISHMENT
SYN = 1
seq: x
SYN = 1...
SYN = ACK = 1
seq: y
ack: x+1
SYN = ACK = 1...
ACK = 1
ack: y+1
ACK = 1...
Text is not SVG - cannot display
  1. 第一次握手(SYN-SENT):
    • 发送方:将 SYN(同步)标志位设置为 1,表示发起连接请求。
    • 序列号(Sequence Number):这是一个 32 位字段,用于标识发送方的 初始序列号ISN,Initial Sequence Number),用于后续的数据传输。ISN 是一个随机数,用于防止连接重放攻击。
    • 确认号(Acknowledgment Number):在第一次握手中,确认号字段被设置为 0,因为此时还没有确认数据的传输。
  2. 第二次握手(SYN-RECEIVED):
    • 接收方:接收到第一次握手的 TCP 报文段后,将 SYN 标志位设置为 1,表示同意建立连接。
    • 序列号(Sequence Number):接收方生成自己的初始序列号(ISN),并将其放入序列号字段。
    • 确认号(Acknowledgment Number):此时确认号字段被设置为发送方的初始序列号加 1,表示接收到了第一次握手中的序列号。
  3. 第三次握手(ESTABLISHED):
    • 发送方:接收到第二次握手的 TCP 报文段后,将 SYN 标志位设置为 0(因为连接已经建立),并将 ACK(确认)标志位设置为 1,表示确认接收到了第二次握手中的序列号。
    • 序列号(Sequence Number):发送方生成一个新的序列号,用于后续的数据传输。
    • 确认号(Acknowledgment Number):此时确认号字段被设置为接收方的初始序列号加 1,表示接收到了第二次握手中的序列号。

四次挥手

FIN-WAIT-1
FIN-WAIT-1
CLOSE-WAIT
CLOSE-WAIT
ESTABLISHMENT
ESTABLISHMENT
FIN=1
seq = u
FIN=1...
ACK = 1
seq = v
ack = u+1
ACK = 1...
ACK = 1
seq = u+1
ack = w+1
ACK = 1...
FIN = ACK = 1
seq = w
ack = u+1
FIN = ACK = 1...
FIN-WAIT-2
FIN-WAIT-2
TIME-WAIT
TIME-WAIT
ESTABLISHMENT
ESTABLISHMENT
LAST-ACK
LAST-ACK
Text is not SVG - cannot display
  1. 客户端发送连接关闭请求
    • 客户端首先决定不再发送数据,并希望关闭连接。
    • 客户端向服务器端发送一个 TCP 报文,其标志位中包含 FIN(Finish)标志,表示客户端已经完成数据的发送任务。
    • 客户端进入 FIN-WAIT-1 状态,等待服务器的确认。
  2. 服务器端确认客户端的关闭请求
    • 服务器端接收到客户端的 FIN 报文,知道客户端不再发送数据。
    • 服务器端向客户端发送一个 ACK(Acknowledgment)报文作为确认,表示它已收到了客户端的关闭请求。
    • 服务器端进入 CLOSE-WAIT 状态,表示服务器端已经完成数据的发送任务,但仍然可以接收来自客户端的数据。
  3. 服务器端关闭连接
    • 服务器端完成了数据的发送任务后,也想要关闭连接。
    • 服务器端向客户端发送一个 FIN 报文,告知客户端它已经完成了数据的发送,并请求关闭连接。
    • 服务器端进入 LAST-ACK 状态,等待客户端的确认。
  4. 客户端确认服务器端的关闭请求
    • 客户端接收到服务器端的 FIN 报文后,确认服务器端的请求。
    • 客户端向服务器端发送一个 ACK 报文作为确认。
    • 此时客户端进入 TIME-WAIT 状态,等待足够的时间,以确保服务器端收到了确认,然后再关闭连接。

滑动窗口机制

0
1
...
74
75
76
77
78
79
80
81
82
...
1660
1671
1672
1673
...
4194304
0
1
...
74
75
76
77
78
79
80
81
82
...
1660
1671
1672
1673
...
4194304
发送窗口
接收窗口
已被确认
已发送
未发送
已接收
未接收
所有的应用层数据
使用 seqno 封装下标进行发送

上图是滑动窗口的简图,滑动窗口代表当前 发送方正在发送 以及 接收方正在接收的 数据窗口,数据窗口是所有数据中的一部分。

每当发送方收到接收方的 ACK 确认后,滑动窗口就会向前滑动。这样,窗口中新位置允许新的数据发送

滑动窗口的大小表示发送方在未收到接收方确认(ACK)的情况下,最多可以发送多少字节的数据。窗口大小由接收方决定,并通过 ACK 报文中的窗口字段告知发送方。

可靠传输机制

TCP 的可靠传输通过多种机制共同实现,下文将对三个关键机制进行介绍。

序列号 和 确认号

序列号(seqno, sequence number) 和 确认号(ackno, acknowledge number) 是 TCP 首部的两个字段,TCP 协议通过 序列号 来记录目前已经发送了哪些数据,通过 确认号 记录哪些数据已经被接收方所接收。

发送方发送序列号 和 接收方返回确认号 的交互可能存在以下几种情况:

  • 如果发送的数据段丢失了,接收方不会发送更新的确认号,这会最终导致发送方超时并重传丢失的数据段。
  • 如果数据段到达了接收方,但是是乱序的,接收方将持续发送最后一个正确序列号的确认,提示发送方其中有数据段需要重新传输。
  • 如果数据段到达了接收方,并且是按顺序的,接收方发送一个新的确认号,提示发送方到目前为止的所有数据都已正确接收。

超时重传

TCP 协议在发送一个 数据段(segment) 时,它会记录目前正在传输的 segment,并为每一个 segment 设置一个定时器。

如果某个 segment 的定时器超时了,就说明发送方在 超时时间阈值 内没有接收到该 segment 的确认,发送方就会触发超时重传(Retransmission Timeout),重新发送超时的 segment。

校验和

TCP 首部包含一个校验和(Checksum)字段,用于检测数据在传输过程中的任何变化。如果接收方检测到校验和错误,该数据段会被丢弃,然后接收方会要求发送方重传该数据段。

TCP 的校验和计算方法和 IP校验和计算方法 一致,不过两者校验的范围和目的有所不同。

其IP校验和只针对IP头部进行校验,主要用于检测数据在传输过程中由于网络故障等原因造成的错误。 而TCP校验和不仅要校验TCP头部,还要校验TCP载荷(即数据部分)。因此,TCP校验和能提供更全面的错误检测。

流量控制

TCP(Transmission Control Protocol)流量控制是一种机制,用于确保在网络中的发送方和接收方之间协调数据传输速率,以防止接收方不堪重负并避免数据包的丢失。TCP 流量控制的主要目标是保证数据的可靠传输,同时有效地利用可用的网络带宽。

TCP 通过 滑动窗口机制 来实现流量控制:发送方根据接收方通告的窗口大小发送数据,而接收方根据自己的处理速度和可用内存来控制窗口大小。

  • 窗口大小(Window Size):TCP 流量控制使用窗口大小来管理数据流的速率。窗口大小表示发送方可以在没有接收方确认的情况下发送的未被确认的数据量。窗口大小由接收方通过 TCP 报文中的通告窗口字段通知发送方。
  • 滑动窗口的调整:窗口大小是动态调整的,它会根据网络条件和接收方的状态而变化。如果接收方的缓冲区快满了,通告窗口大小可能会减小,以减缓发送速率;如果接收方的缓冲区有足够的空间,通告窗口大小可能会增大,以提高发送速率。
  • 零窗口控制:如果接收方的缓冲区已满,它可以将窗口大小设置为零,表示不接受任何数据。发送方会注意到这一点并暂停数据的发送,直到接收方准备好接收数据。
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
22
22
23
23
24
24
25
25
26
26
27
27
28
28
29
29
30
30
Usable
Window
Usable...
TCP
Send Window
TCP...
Sent and Acked
Sent and Acked
Sent and  not acked
Sent and  not acked
Not sent
Recipient ready to recv
Not sent...
Not Sent
Recipient not ready to recv
Not Sent...
* * *
* * *
* * *
* * *
Text is not SVG - cannot display

TCP 的发送窗口可以按照逻辑划分为四个部分:

  1. 已经发送并且被确认的数据(字节流)
  2. 已经发送但还没有被确认
  3. 尚且还没有发送
  4. 暂时不可以发送

其中第 2、3 个部分构成 TCP 的发送窗口,当发送方收到 ackno 在第 2 个部分内的确认报文时,调整滑动窗口的大小后向前移动滑动窗口,并且发送接下来可以发送的数据。

13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
22
22
23
23
24
24
25
25
26
26
27
27
28
28
29
29
30
30
Available
Window
Available...
TCP
Recv Window
TCP...
Received and Accepted
by application
Received and Accepted...
Received but not accepted
Received but not accepted
Not Received
Not Received
Not ready to be received
Not ready to be received
* * *
* * *
* * *
* * *
Text is not SVG - cannot display

TCP 的接收窗口可以按照逻辑划分为四个部分:

  1. 已经被应用层接收的数据
  2. 已经被 TCP 接收,但是还没有被应用层接收的数据
  3. 还没有接收到的数据
  4. 还不可以接收到的数据

拥塞控制

tcp 的拥塞控制指的是 tcp 限制传输数据的速率,进而防止注入过多的数据到网络中,进而造成网络链路过载。

大家需要了解,tcp 不是一个 “自私” 的算法,一段链路上可以同时包含很多 tcp 连接,tcp 的拥塞控制的目的是尽量去实现一个总体的最优,而不是个体的最优。当 tcp 检测到数据传输出现拥塞之时,即一段时间内没有接收到一些确认,它就会降低自己传输数据的速率。

需了解如下的TCP拥塞控制算法:

1. 慢开始 (slow start)

慢开始是 TCP 连接开始时的一个阶段,相较于直接以较高的速率发送数据,慢开始会以一个较低的速率开始,然后逐步试探当前网络传输的能力,以指数的速率增加发送速率。慢开始的流程如下:

  • 初始化:当一个 TCP 连接开始时,拥塞窗口 cwnd 设置为一个很小的值,通常是 1MSS (最大段大小)。
  • 指数增长:对于每个收到的 ACKcwnd 会增加一个 MSS 。这意味着每个 RTT (往返时间) cwnd 都会翻倍,导致了指数增长。
  • 转换阈值:当 cwnd 达到 ssthresh (慢开始阈值)时, TCP 会从慢开始模式转换到拥塞避免模式。
Data
Data
ACK
ACK
Data
Data
ACK
ACK
Text is not SVG - cannot display

2. 拥塞避免 (congestion avoidance)

  • 线性增长:在这个阶段,每收到一个 ACK, cwnd 增加 1/cwnd 的大小。这导致了每个 RTTcwnd 只增加约一个 MSS ,这是一个线性的增长。
  • 拥塞检测:如果发生了超时或者收到三个重复的 ACK (意味着网络中的数据分段丢失),则认为发生了网络拥塞。此时, ssthresh 会被设置为当前 cwnd 的一半,并将 cwnd 重新设置为 1MSS ,然后重新进入慢开始阶段。

3. 快速重传 (Fast Retransmit) 和 快速恢复 (Fast Recovery)

传统的TCP重传是基于重传计时器的:当计时器到期而没有收到ACK时,TCP会重新发送数据(超时重传)。然而,在有高带宽或低延迟的网络中,等待这个计时器到期可能是低效的。

快速重传 机制是当发送方连续收到三个重复的ACK(表示同一个数据段)时,它会立即重传下一个待确认的数据段,而不是等待重传计时器到期。这三个重复的ACK是网络中丢失一个分段的一个早期指示。

一旦触发了快速重传,TCP进入 快速恢复 模式,按照书上的说法,触发了快速重传后,ssthreshcwnd 都被设定为快速重传前 cwnd 值的一半,然后执行拥塞避免算法。

但是在实际 TCP 的实现中 ssthresh 被设定为当前 cwnd (拥塞窗口)的一半。同时, cwnd 也会被设定为 ssthresh 加上三个 MSS (最大段大小),然后执行如下策略:

  • cwnd 的增加:在快速恢复期间,每当收到一个重复的 ACKcwnd 都会增加一个分段的大小。这是为了用新的数据分段平衡可能在传输路径中出现的丢失。
  • 退出快速恢复:当发送方接收到一个新的、非重复的 ACK ,这表示之前丢失的分段已被成功接收。这时, TCP 会退出快速恢复模式,并将 cwnd 设置为 ssthresh 的值,然后进入拥塞避免阶段。

这里注意一下即可,考试考到的话按照书中方式计算 cwnd

0
2
4
6
8
10
12
14
16
18
20
22
24
4
8
12
16
20
24
28
32
36
40
ssthresh
Congestion
avoidance
RTO
expiration
cwnd(new)
slow
start
slow
start
Congestion
avoidance
ssthresh (new)
0
2
4
6
8
10
12
14
4
8
12
16
20
24
28
32
36
40
ssthresh
Congestion
avoidance
cwnd(new)
Congestion
avoidance
slow
start
ssthresh (new)
TCP slow start and contgestion avoidance
TCP fast retransmit and fast recovery
16
18
20
22
24
Three duplicate
ACKs
Congestion
avoidance
expected ACK
Round Trip Time (RTT)
congestion window (cwnd)
Round Trip Time (RTT)
congestion window (cwnd)
Fast retransmit
and fast recovery

总结一下:

  • cwmd < ssthresh时,使用慢开始算法,swnd以指数增长
  • cwmd >= ssthresh时,使用拥塞避免算法,swnd线性增长
  • 当在 RTO 内没有收到发送的某个分组的确认时
    • 如果启动了快速恢复,则设置cwnd = ssthresh = cwnd / 2,开始使用拥塞控制算法
    • 如果没有启动快速恢复,则设置ssthresh = cwnd / 2, cwnd = 1,开始使用慢开始算法
  • 如果启用了快速重传,并且收到 3 个与先前重复的 ACK(总共收到 4 个相同的 ACK),则不用等待超时器 RTO 结束,可以马上重传该数据包,cwnd 可能会减少(这里不考察)

窗口大小

初始窗口大小?

TCP连接的初始窗口大小可以根据TCP/IP协议栈的实现和操作系统的配置而有所不同。通常情况下,初始窗口大小是根据TCP的初始拥塞窗口(Initial Congestion Window,ICW)来确定的。

RFC 6928建议了一种用于确定TCP连接初始拥塞窗口大小的算法,该算法是根据实验和观察得出的最佳实践。根据这个RFC,初始拥塞窗口大小(ICW)的推荐值为10个MSS (了解即可)。

发送窗口的大小?

发送窗口大小为拥塞窗口和接收窗口中的较小值,swnd = min(cwnd, rwnd),当发送方收到来自接收方的确认报文时,会根据其中的 window 字段来调整 rwnd 大小,也会根据收到的确认信息或者超时去调整 cwnd 的大小。当 cwnd 或者 rwnd 变化时,会调整 swnd 的大小。

接收窗口的大小?

接收方会根据自身处理能力和缓冲区的情况来动态调整窗口大小。如果接收方的应用程序不能及时处理接收到的数据,或者接收方的缓冲区已经满了,它就会减小窗口大小,以通知发送方降低发送速率。

5.2 - UDP

了解UDP的概念和应用,对比与TCP的不同,可能在选择题中考察。

UDP数据报

Source Port (16)
Source Port (16)
Data
Data
Destination Port (16)
Destination Port (16)
Checksum (16)
Checksum (16)
Length (16)
Length (16)
UDP Header
UDP Header
Bit 0
Bit 0
Bit 15
Bit 15
Bit 16
Bit 16
Bit 31
Bit 31
8 Bytes
8 Bytes
Text is not SVG - cannot display

UDP(User Datagram Protocol)首部的长度固定为8个字节(64位),不论UDP携带的数据量大小如何,其首部都保持不变。UDP首部的各个字段如下:

  • 源端口(Source Port):占用2个字节(16位),用于标识发送方应用程序的端口号。
  • 目标端口(Destination Port):占用2个字节(16位),用于标识接收方应用程序的端口号。
  • 长度(Length):占用2个字节(16位),指示UDP数据报的总长度,包括首部和数据。因此,最小长度为8字节。
  • 校验和(Checksum):占用2个字节(16位),用于检测UDP数据报在传输过程中是否受到损坏。

UDP校验

UDP(User Datagram Protocol)使用一个16位的校验和字段来检测数据在传输过程中是否受到了损坏。UDP校验和是一种简单的错误检测机制,它用于验证UDP数据报的完整性,但不提供数据的恢复功能。以下是UDP校验和的工作原理:

  1. 校验和计算:在发送端,UDP计算校验和。计算的过程包括以下步骤:
    • 数据报中的所有16位字(包括UDP首部和数据部分)被分成16位的块。
    • 这些块被依次加和,得到一个32位的中间结果。
    • 将32位的中间结果分成两个16位的字,将它们相加,直到最终得到一个16位的校验和。
    • 将计算出的16位校验和存储在UDP首部的校验和字段中。
  2. 校验和验证:在接收端,UDP接收数据报后,它也会计算校验和,使用与发送端相同的算法。然后,它将接收到的校验和与计算得到的校验和进行比较:
    • 如果接收到的校验和与计算得到的校验和匹配,数据被认为是完整的。
    • 如果校验和不匹配,数据报被认为已经受损,并且通常会被丢弃。

UDP特点

  • 无连接性:UDP是一种无连接的协议,这意味着在发送数据之前,发送方和接收方之间不建立连接。每个UDP数据报都是独立的,没有先后顺序的要求。
  • 轻量级:UDP非常轻量级,因为它不涉及连接建立和维护,也不包括复杂的拥塞控制算法。这使得UDP非常适用于低延迟和高吞吐量的应用。
  • 无序性:UDP数据报在传输过程中不保持顺序。这意味着发送方发送的多个UDP数据报可能以不同的顺序到达接收方,并且接收方需要自行处理数据的顺序问题。
  • 不可靠性:UDP不提供可靠性。它不保证数据的传输成功,也不负责重新发送丢失的数据。如果数据在传输过程中丢失或损坏,接收方将不会收到任何通知,并且需要根据应用程序的要求自行处理这些问题。
  • 广播和多播:UDP支持广播和多播,允许一个UDP数据报同时发送到多个接收方。
  • 用途:UDP常用于需要低延迟和快速数据传输的应用程序,如实时音视频传输、在线游戏、网络广播等。它也常被用于一些特定的应用层协议,如DNS(Domain Name System)和DHCP(Dynamic Host Configuration Protocol)。

6 - 应用层

可能会在选择题中考察,主要涉及到一些应用层协议的基本概念。

学习思维导图:

# 应用层

## 网络应用模型

- C/S模型
- P2P模型

## DNS系统

- 层次域名空间
- 域名服务器
- 域名解析过程

## FTP

- FTP协议的工作原理
- 控制连接和数据连接

## 电子邮件

- 电子邮件系统的组成结构
- 电子邮件格式和MIME
- SMTP协议与POP3协议

## WWW

- 概念和组成结构
- HTTP协议

6.1 - 网络应用模型

了解CS模型和P2P模型的概念,可能在选择题中考察。
Client-Server Network
P2P Network

C/S模型

  1. 端通常是用户终端设备,例如个人计算机、移动设备等。服务器是一个专门的设备或应用程序,负责提供某种服务或资源,例如文件存储、网站内容、数据库访问等。
  2. 通信方式:在C/S模型中,客户端和服务器之间的通信是基于请求和响应的方式进行的。客户端向服务器发出请求,服务器响应请求并提供所需的服务或资源。
  3. 中心化:C/S模型通常具有中心化的架构,服务器是中心节点,客户端通过与服务器通信来获取服务或资源。
  4. 例子:典型的C/S应用包括Web浏览器与Web服务器之间的通信、电子邮件客户端与电子邮件服务器之间的通信等。

P2P模型

  1. 角色分配:在P2P模型中,网络中的设备通常是对等的(Peer),没有明确的客户端和服务器的区分。每个设备都可以充当客户端和服务器的角色。
  2. 通信方式:P2P模型中,设备之间的通信是对等的,它们可以相互协作、共享资源和服务,而不需要中心服务器的介入。设备可以直接连接到其他设备,而不需要经过中间服务器。
  3. 分布式:P2P模型通常是分布式的,没有单一的中心节点。设备之间可以相互通信和共享资源,形成一个分散的网络。
  4. 例子:典型的P2P应用包括文件共享网络(如BitTorrent)、实时音视频通信应用(如Skype)以及加密货币网络(如比特币)等。

6.2 - DNS

了解DNS的功能以及域名查询的步骤,可能在选择题中考察。

层次域名空间

DNS 使用层次域名空间来组织域名,将域名划分为多个级别,每个级别之间以点(.)分隔。域名从右到左逐级递增,最右边是顶级域名(TLD),然后是二级域名,三级域名,以此类推。

例如, www.example.com 中, .com “是顶级域名, example.com 是二级域名, www.example.com 是子域名。

DNS 层次域名空间的设计使得域名分布在不同的管理区域中,每个管理区域负责管理其自己的域名空间。这种分层结构有助于提高 DNS 的可扩展性和效率。

域名服务器

  1. 根域名服务器 (Root Name Servers):
    • 这些服务器位于 DNS 解析的最顶端。它们不直接回答关于哪个域名映射到哪个 IP 地址的查询,而是告诉查询者下一步应该询问哪个顶级域名 (TLD) 服务器。
    • 根服务器的数量是有限的,并且它们的位置在全球都是已知的。
  2. 顶级域名服务器 (Top-Level Domain Name Servers, TLD Name Servers):
    • 这些服务器负责特定的顶级域名(如 .com, .org, .net 等)。它们为下一级的域名(如 example.com)提供有关权威名称服务器的信息。
  3. 权威域名服务器 (Authoritative Name Servers):
    • 这些服务器为特定的域名(如 example.com)提供详细的 DNS 记录信息(例如 A 记录、MX 记录等)。只有权威服务器才能为其负责的域名提供这些信息。
    • 大多数组织拥有权威 DNS 服务器来为他们的域名提供解析服务。
  4. 本地域名服务器 (Local Name Server)
    • 是在本地网络环境中运行的 DNS 服务器,它为该网络中的设备提供域名解析服务。
    • 每个 ISP 或一所大学都可以有一个本地域名服务器。

域名解析过程

Recursive Query
Iterative Query
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server
Root DNS Server
Top-Level DNS Server
Authoritative DNS Server
Local DNS Server

域名解析是将人类可读的域名转换为计算机可理解的 IP 地址的过程。以下以递归查询为例说明DNS查询的步骤:

  1. 客户端发出域名解析请求:当用户在 Web 浏览器中输入域名(例如www.example.com)时,客户端设备会向本地递归域名服务器发送 DNS 解析请求。
  2. 本地域名服务器查询:
    • 本地域名服务器收到请求后,首先检查自己的缓存,如果有匹配的域名/IP 地址映射,它会立即返回响应。
    • 如果没有缓存或已过期,递归域名服务器将迭代地查询其他域名服务器,从根域名服务器开始,然后逐步向下查询,直到找到权威域名服务器。
  3. 权威域名服务器响应:一旦递归域名服务器找到了域名的权威域名服务器,它会向权威域名服务器发送查询请求。权威域名服务器将提供域名对应的 IP 地址或其他相关信息。
  4. 递归域名服务器响应客户端:递归域名服务器收到权威域名服务器的响应后,将结果存储在缓存中,并将 IP 地址返回给客户端。客户端可以使用此 IP 地址建立连接到目标服务器。

6.3 - FTP

了解FTP的工作原理和两种连接方式,可能在选择题中考察。

工作原理

  1. 建立连接:
    • FTP通常使用TCP作为传输层协议。客户端和服务器之间首先建立一个TCP连接。FTP默认使用两个端口,一个用于控制连接(命令连接,通常是端口21),另一个用于数据传输连接。
  2. 身份验证:
    • 一旦建立了控制连接,客户端需要提供用户名和密码以进行身份验证。有些FTP服务器还支持匿名FTP,允许用户使用一个通用的用户名(通常是"anonymous")和电子邮件地址作为密码进行访问。
  3. 命令与响应:
    • 控制连接用于传输FTP命令和服务器的响应。客户端可以向服务器发送各种FTP命令,如上传文件、下载文件、列出目录内容等。服务器将对每个命令响应一个状态码,指示命令执行的结果(例如,成功、失败等)。
  4. 数据连接:
    • 当需要传输文件或目录列表时,FTP使用数据连接来进行实际的数据传输。数据连接可以以两种方式之一建立:
    • 主动模式(Active Mode):客户端打开一个本地端口,并通知服务器连接到该端口以进行数据传输。
    • 被动模式(Passive Mode):服务器打开一个本地端口,并通知客户端连接到该端口以进行数据传输。
    • 数据连接用于传输文件的内容或目录列表等信息。
  5. 文件传输:
    • 一旦建立了数据连接,文件传输开始。客户端可以向服务器上传文件(将本地文件发送到服务器)或下载文件(从服务器获取文件)。
    • 文件传输可以在ASCII模式和二进制模式之间切换。ASCII模式适用于文本文件,而二进制模式适用于二进制文件(如图像、音频等)。
  6. 关闭连接:
    • 一旦文件传输完成或用户完成FTP会话,客户端可以发送QUIT命令以终止FTP连接。服务器会响应,并关闭连接。

控制连接和数据连接

  1. 控制连接(Control Connection):
    • 控制连接是FTP会话的首要连接,通常使用TCP的端口21。
    • 控制连接用于传输FTP命令和服务器的响应,用来控制FTP会话的行为。客户端通过控制连接向服务器发送各种FTP命令,如登录、列出文件目录、切换工作目录等。
    • 服务器通过控制连接发送状态码和响应消息,以指示每个FTP命令的执行结果(例如,成功、失败等)。
    • 控制连接始终保持打开状态,直到用户完成FTP会话,或者用户发送QUIT命令以终止连接。
  2. 数据连接(Data Connection):
    • 数据连接用于实际的文件传输,以及在某些情况下,传输文件的目录列表信息。数据连接通常使用不同的端口,其端口号由控制连接中的FTP命令指定。
    • 有两种主要的数据连接模式:
    • 主动模式(Active Mode):在主动模式下,客户端在一个本地端口打开,并通过控制连接告知服务器连接到该端口以进行数据传输。服务器主动连接到客户端的本地端口。
    • 被动模式(Passive Mode):在被动模式下,服务器在一个本地端口打开,并通过控制连接告知客户端连接到该端口以进行数据传输。客户端主动连接到服务器的本地端口。
    • 数据连接用于上传文件(将文件从客户端发送到服务器)和下载文件(从服务器获取文件)。

6.4 - 电子邮件

了解SMTP和POP3协议,可能在选择题中考察。

SMTP邮件发送过程

MSA
MSA
MTA
MTA
MX
MX
MDA
MDA
UA
UA
UA
UA
Text is not SVG - cannot display

SMTP(Simple Mail Transfer Protocol)是用于电子邮件传输的协议。其邮件处理模型涉及到邮件的发送、中继和接收。下面是 SMTP 的邮件处理模型的简要概述:

  1. 用户代理 (User Agent, UA):
    • 用户代理是用户用来创建、读取和回复邮件的应用程序。常见的用户代理有 Outlook、Thunderbird 等电子邮件客户端。
  2. 邮件提交代理 (Mail Submission Agent, MSA):
    • 当用户准备好发送电子邮件时,用户代理将邮件提交给邮件提交代理。MSA 负责接收从用户代理发来的邮件,并将其转发到邮件传输代理。
    • 在某些情况下,MSA 和 MTA 可能是同一个服务器或服务,但它们的功能是分开的。
  3. 邮件传输代理 (Mail Transfer Agent, MTA):
    • MTA 负责从 MSA 接收邮件并将其传输到接收方的邮件交换代理或其他 MTA。
    • 如果收件人的邮箱与发件人在同一域名下,MTA 也可能直接将邮件传递给邮件传递代理 (MDA)。
    • 如果收件人位于不同的域,MTA 可能会中继邮件,经过一系列的其他 MTAs,直到邮件到达收件人的域。
  4. 邮件交换代理 (Mail Exchanger, MX):
    • 当电子邮件需要被发送到另一个域时,发件人的 MTA 会查找该域的 DNS MX 记录以确定邮件应该发送到哪个服务器或 MTAs。
    • MX 记录指向接收邮件的服务器。
  5. 邮件传递代理 (Mail Delivery Agent, MDA):
    • 当邮件到达目的地后,MTA 将邮件传递给 MDA。MDA 负责将邮件放入用户的邮箱中。
    • 在用户准备读取邮件时,他们的用户代理会与邮件存储服务(例如 IMAP 或 POP3 服务器)交互,从中提取邮件。

SMTP和POP3协议

特点SMTP(Simple Mail Transfer Protocol)POP3(Post Office Protocol 3)
用途用于发送电子邮件用于接收电子邮件
工作原理将电子邮件从发件人的客户端传递到接收方的邮件服务器从邮件服务器下载电子邮件到本地设备
端口通常使用TCP的25号端口进行通信通常使用TCP的110号端口进行通信
协议类型传输协议接收协议
主要功能发送电子邮件接收和下载电子邮件
邮件存储不涉及电子邮件存储电子邮件通常会从服务器中删除
适用性用于发送邮件用于接收邮件
邮件管理不涉及邮件管理允许用户下载、管理和删除邮件
同步和多设备支持不涉及同步和多设备支持通常不支持同步和多设备管理

电子邮件格式和MIME

  1. 电子邮件的基本结构:
    • 一个标准的电子邮件通常由以下部分组成:
    • 头部(Header):包含了电子邮件的元数据,如发件人、收件人、主题、日期等信息。
    • 主体(Body):包含了邮件的主要内容,可以是纯文本或HTML格式的富文本内容。
    • 附件(Attachments):可以包括一个或多个附件,如文档、图像、音频或其他文件。附件是电子邮件的一部分,但它们通常不会直接显示在邮件主体中。
  2. MIME标头:
    • MIME引入了一些新的标头字段,用于描述电子邮件的内容类型和编码方式。这些标头字段包括:
    • Content-Type:指定了邮件主体或附件的内容类型(如文本、图像、音频、视频等)和字符集。
    • Content-Disposition:指定了附件的显示方式,如内联显示(Inline)或作为附件下载(Attachment)。
    • Content-Transfer-Encoding:指定了内容的传输编码方式,如Base64编码,用于二进制数据的传输。
  3. 文本和HTML格式:
    • MIME允许电子邮件既可以包含纯文本内容,也可以包含HTML格式的富文本内容。这使得电子邮件能够呈现更丰富的视觉和格式化效果。
    • 在MIME中,文本内容通常使用Content-Type标头字段指定为"text/plain",而HTML内容使用Content-Type标头字段指定为"text/html"。
  4. 附件:
    • MIME允许将文件附件添加到电子邮件中,以便发送和接收文件。附件通常使用Content-Disposition标头字段来指定其显示方式。
    • 附件的数据通常使用Base64编码进行传输,以确保二进制文件的可靠传输。
  5. 内联图像和嵌入式内容:
    • MIME允许内联图像和嵌入式内容,这些内容可以直接显示在电子邮件的主体中。这在创建富文本邮件和HTML格式邮件时很有用。
  6. Multipart电子邮件:
    • MIME引入了多部分电子邮件的概念,允许将不同类型的内容(如文本、HTML、图像、附件)组合在一个电子邮件中。
    • 多部分电子邮件使用multipart标头字段指定邮件的不同部分,并为每个部分指定相应的Content-Type。

6.5 - 万维网

本节的重点在于了解HTTP协议的特点,报文组成部分以及一些首部选项,可能在选择题中考察。

WWW

WWW,也称为万维网(World Wide Web),是一个信息系统,在这个系统中,文档和其他资源通过统一资源标识符(Uniform Resource Identifiers,或 URI,通常为 URL)进行标识和互相链接。用户可以使用网络浏览器访问万维网上的资源。

组成结构

  1. URL (统一资源定位符):每个网页或资源都有一个唯一的地址,称为 URL,它定义了资源的位置和如何访问它。
  2. HTTP/HTTPS (超文本传输协议/安全超文本传输协议):这是用于从服务器传输网页到浏览器的协议。
  3. HTML (超文本标记语言):大多数网页使用 HTML 编写,它是用于描述和呈现超文本的标准标记语言。

HTTP协议

HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议。它是一个属于应用层的协议,常基于 TCP/IP 协议通信。HTTP 用于客户端和服务器之间的数据传输,特别是在万维网(WWW)中,用于传输网页(HTML 文件)以及与其关联的资源(如图片、音频、视频等)。

无状态

HTTP 本身不保持用户的状态信息,每个请求都是独立的,服务器无法识别是不是同一个用户发送的多个请求。这一点在现实中通常通过 Cookie 和 Session 技术来弥补。

组成部分

  1. 请求和响应:HTTP 通信通常包括客户端向服务器发送请求,然后服务器返回响应的过程。
  2. 方法:HTTP 定义了一组请求方法,用于表示对资源的不同操作:
    • GET:请求指定资源。
    • POST:提交数据以供处理。
    • PUT:更新指定资源。
    • DELETE:删除指定资源。
    • HEAD:与 GET 相似,但只请求资源的头部信息。
    • OPTIONS:获取可以应用于目标资源的通信选项。
    • PATCH:对资源进行部分修改。
    • 其他方法还包括 CONNECT, TRACE 等。
  3. 状态码:响应返回一个状态码,用于表示请求的结果,例如:
    • 200 OK:请求成功。
    • 404 Not Found:资源未找到。
    • 500 Internal Server Error:服务器内部错误。
    • 以及其他众多状态码,用于表示不同的响应状态。
  4. 头部字段:HTTP 请求和响应都包含头部信息,提供有关请求或响应的元数据,例如 Content-Type(内容类型)或 User-Agent(用户代理)。
    • 消息体:请求或响应的主体部分,通常包含要传输的数据。例如,POST 请求的数据或服务器返回的网页内容。

关键字段

以下首部字段可能在考试中被考察,需要了解一下:

长连接和短连接

Open
Close
Open
Close
Open
Close
Open
Close
短连接
长连接

长连接和短连接含义

HTTP 根据首部的 keepalive 选项是否被设置被分为长连接和短连接。

  • 长连接(持久连接,persistant connection)通过设置 keepalive 选项,可以在一个 TCP 连接中发送多个 HTTP 请求。
  • 短连接(非持久连接,multiple connection)没有设置 keepalive 选项,那么每一次发送 HTTP 请求都必须单独建立一个 TCP 连接。

HTTP不同版本中的keepalive

  • HTTP/1.0 中,持久连接不是默认行为。要在 HTTP/1.0 中启用它,必须在请求头部添加 Connection: keep-alive
  • HTTP/1.1 中及之后,持久连接是默认行为。如果想关闭它,必须在请求或响应头部添加 Connection: close

流水线和非流水线

Open
Close
非流水线
Open
Close
流水线

HTTP 流水线和非流水线含义

  • 流水线(HTTP Pipelining):HTTP 客户端在未等待前一个请求的响应的情况下,连续发送多个 HTTP 请求。
  • 非流水线(Non-pipelined):HTTP 客户端必须接收到上一个请求的响应,才能发送下一个请求。

HTTP 不同版本中的流水线支持

  • 在 HTTP/1.0 中,流水线 的功能并不支持。
  • 在 HTTP/1.1 中,引入了 HTTP 流水线 的支持,但由于使用中队头阻塞的问题,应用并不广泛。
  • 在 HTTP/2 中,进一步改进了请求处理机制,允许多个请求和响应在同一个连接中并行进行,解决了队头阻塞的问题。

HTTP 协议是无状态的,这意味着每个请求都是独立的,服务器默认情况下无法知道两个请求是否来自同一客户端或用户。Cookie 的引入使得服务器能够跨多个请求“识别”和“记住”用户。

HTTP 服务器通过 Set-Cookie 首部字段来设置每一个客户端的 Cookie 值,相应的 HTTP 响应的部分内容如下所示:

HTTP/1.1 200 OK
Set-Cookie: sessionId=abc123; Expires=Wed, 21 Oct 2025 07:28:00 GMT; Path=/; Secure; HttpOnly

当浏览器接收到带有 Set-Cookie 字段的 HTTP 响应时,就会在存储该 Cookie 字段,并在下次向对应的服务器发送 HTTP 请求时自动将 Cookie 字段添加在 HTTP 首部,之后的 HTTP 请求的部分内容如下所示:

GET /dashboard HTTP/1.1
Cookie: sessionId=abc123

当 HTTP 服务器接收到带有 Cookie 的请求时,它就可以区分这个请求是来自于那个客户端的了。