计算机网络复习笔记(自顶向下方法·补充版)

基于《Computer Networking: A Top-Down Approach》前五章整理的计算机网络复习笔记,覆盖分层模型、应用层、运输层、网络层、路由和链路层。

说明:本笔记是先人工通看了教材和教学PPT,整理出自己认为比较重点的知识点骨架(每个二级三级标题),然后再用GPT5.5进行填充。

教材语境主要对应《Computer Networking: A Top-Down Approach》前五章:计算机网络与因特网、应用层、运输层、网络层、链路层。


总览:分层思想与常见单位

五层因特网协议栈

层次核心任务典型协议/技术传输数据单位
应用层 Application为网络应用提供通信规则HTTP、FTP、SMTP、DNS、DHCPmessage 报文
运输层 Transport进程到进程通信;复用/分解;可靠传输;拥塞控制TCP、UDPsegment 报文段 / datagram
网络层 Network主机到主机通信;路由选择;转发IP、ICMP、OSPF、RIP、BGPdatagram 数据报 / packet 分组
链路层 Link相邻节点间传输;成帧;介质访问;差错检测Ethernet、Wi-Fi、ARP、PPPframe 帧
物理层 Physical比特在物理介质上传输光纤、双绞线、无线电bit 比特

封装与解封装:

应用层报文在运输层加 TCP/UDP 首部形成报文段,网络层加 IP 首部形成 IP 数据报,链路层加帧首部/尾部形成帧。接收端逐层去掉首部并交付上层。

考试常用表述:

  • 网络层负责“主机到主机”的交付,不负责具体进程。
  • 运输层负责“进程到进程”的交付,通过端口号区分应用进程。
  • 链路层只负责“一跳”或“相邻节点”的传输。
  • IP 是尽力而为服务,TCP 在 IP 之上实现可靠字节流。

网络基础概述

网络核心图解:分组交换、电路交换与四种时延

网络核心图解:分组交换、电路交换与四种时延

网络边缘

网络边缘是什么

**网络边缘(network edge)**由端系统和接入网络组成。

  • 端系统 / 主机(end systems / hosts): PC、手机、服务器、IoT 设备等。
  • 客户与服务器: 客户发起请求,服务器提供服务。
  • 数据中心: 现代服务器通常集中部署在数据中心,由大量主机和交换机组成。
  • 接入网络(access network): 将端系统连接到第一台路由器,即“边缘路由器”的网络。

常见接入方式

DSL(Digital Subscriber Line,数字用户线)

  • 利用电话线接入互联网。
  • 家庭端通过 DSL modem 接入运营商 DSLAM。
  • DSL 将电话线频段划分为:电话语音、上行数据、下行数据。
  • 下行速率通常大于上行速率,属于非对称接入。

Cable access(电缆接入)

  • 利用有线电视系统的同轴电缆。
  • 共享介质:同一区域用户共享到电缆头端的带宽。
  • 常与 HFC(Hybrid Fiber Coax,混合光纤同轴)结构相关。

FTTH(Fiber To The Home,光纤到户)

  • 光纤直接到家庭或楼宇。
  • 典型形式:PON(Passive Optical Network,被动光网络)。
  • 优点:高带宽、低损耗、抗干扰强。

LAN 接入

  • 典型场景:校园网、公司网、家庭局域网。
  • 有线 LAN 主要使用以太网。
  • 无线 LAN 主要使用 Wi-Fi。

蜂窝网络接入

  • 3G/4G/5G 移动网络。
  • 支持移动性和广域覆盖。
  • 端到端性能受无线信道、基站负载、核心网路径等影响。

主机发送数据的基本过程

主机发送一个长度为 LL bit 的分组,接入链路传输速率为 RR bit/s,则将该分组“推入链路”所需时间为:

transmission delay=LR\text{transmission delay} = \frac{L}{R}

注意:

  • 这是传输时延,不是传播时延。
  • 传输时延看分组长度和链路速率。
  • 传播时延看物理距离和信号传播速度。

网络核心

网络核心由大量互联的路由器和链路组成,主要负责将分组从源主机转发到目的主机。

分组交换与电路交换

分组交换(packet switching)

思想: 把应用层数据切分为较小的分组,每个分组独立在网络中转发。

特点:

  • 分组携带目的地址。
  • 路由器根据转发表逐跳转发。
  • 多个用户按需共享链路带宽。
  • 适合突发型数据传输。
  • 可能出现排队时延和丢包。

典型机制:存储转发(store-and-forward)

路由器必须接收完整分组后,才能向下一条链路发送。如果分组长度为 LL bit,链路速率为 RR bit/s,则每一跳至少需要 LR\frac{L}{R} 的传输时间。

若有 NN 条速率均为 RR 的链路,忽略传播、排队、处理时延,单个分组端到端时延为:

NLRN\frac{L}{R}

如果有 PP 个分组连续发送,经过 NN 条链路,忽略其他时延,总时间为:

(N+P1)LR(N + P - 1)\frac{L}{R}

这里体现了流水线效果。

电路交换(circuit switching)

思想: 通信前先建立一条端到端专用电路,通信期间资源被独占或预留。

特点:

  • 先建立连接,再传输数据。
  • 资源预留,性能稳定。
  • 没有排队竞争或竞争较小。
  • 即使用户暂时不发送数据,预留资源也不能被其他用户使用,可能浪费。
  • 适合持续、稳定速率的业务,如传统电话。

分组交换 vs 电路交换

比较项分组交换电路交换
资源分配按需共享预先预留
是否建立专用路径通常不建立专用电路需要建立电路
资源利用率高,适合突发业务低,空闲时也占资源
时延稳定性不稳定,可能排队较稳定
丢包可能发生一般不因拥塞丢包
典型应用Internet 数据通信传统电话网络

考试答法:

分组交换利用统计多路复用提高资源利用率,但会引入排队时延和丢包;电路交换提供预留资源和较稳定性能,但资源利用率较低。


分组交换的四种时延及计算

一个分组从一个节点到下一个节点,通常包含四类时延:

dnodal=dproc+dqueue+dtrans+dprop d_{nodal}=d_{proc}+d_{queue}+d_{trans}+d_{prop}

处理时延 dprocd_{proc}

路由器检查首部、查找转发表、差错检测等所需时间。

特点:

  • 通常较小。
  • 取决于路由器处理能力。

排队时延 dqueued_{queue}

分组在输出队列中等待发送的时间。

特点:

  • 最不稳定。
  • 与网络拥塞程度强相关。
  • 队列满时会发生丢包。

常用交通强度:

LaR\frac{La}{R}

其中:

  • LL:分组长度,单位 bit。
  • aa:平均分组到达率,单位 packets/s。
  • RR:链路传输速率,单位 bit/s。

解释:

  • LaR\frac{La}{R} 接近 0:排队时延很小。
  • LaR\frac{La}{R} 接近 1:排队时延急剧增大。
  • LaR>1\frac{La}{R} > 1:到达速率超过服务速率,队列趋向无界增长,系统不稳定。

传输时延 dtransd_{trans}

把分组所有比特推入链路所需时间:

dtrans=LR d_{trans}=\frac{L}{R}

由分组长度和链路速率决定。

传播时延 dpropd_{prop}

一个比特在物理链路上传播所需时间:

dprop=ds d_{prop}=\frac{d}{s}

其中:

  • dd:链路物理长度。
  • ss:信号传播速度,通常约为 2×108m/s2\times 10^{8} m/s3×108m/s3\times 10^{8} m/s

传输时延和传播时延的区别

比较项传输时延传播时延
公式LR\frac{L}{R}ds\frac{d}{s}
由什么决定分组大小、链路速率链路长度、传播速度
类比把车队推上高速所需时间第一辆车从起点开到终点所需时间

电路交换中的复用

电路交换要在链路上为多个用户划分资源,常见复用方式如下。

FDM(Frequency Division Multiplexing,频分复用)

  • 把链路频谱划分为多个频带。
  • 每个用户占用一个频带。
  • 所有用户可同时通信。
  • 典型例子:传统有线电视、无线频段划分。

TDM(Time Division Multiplexing,时分复用)

  • 把时间划分为周期性帧。
  • 每个帧中为用户分配固定时隙。
  • 用户只在自己的时隙中发送。

WDM(Wavelength Division Multiplexing,波分复用)

  • 光纤通信中使用不同波长承载不同信道。
  • 本质上类似光纤中的频分复用。

与统计多路复用比较

分组交换通常使用统计多路复用:不预先固定分配资源,而是哪个用户有数据就使用链路。

复用方式是否固定分配资源利用率是否可能排队
FDM/TDM/WDM空闲时可能浪费一般不会因共享竞争排队
统计多路复用可能排队和丢包

应用层

应用层图解:体系结构、HTTP、FTP、Email、DNS

应用层图解:体系结构、HTTP、FTP、Email、DNS

C/S 架构和 P2P 架构

Client-Server 架构

定义: 客户端向一直在线的服务器请求服务。

特点:

  • 服务器通常有固定 IP 或固定域名。
  • 服务器长期在线。
  • 客户端之间通常不直接通信。
  • 扩展能力依赖服务器集群和数据中心。

例子:Web、电子邮件、DNS 的大部分查询过程。

优点:

  • 管理集中,易于维护。
  • 安全策略和数据一致性较容易控制。

缺点:

  • 服务器可能成为瓶颈。
  • 部署成本较高。

P2P 架构

定义: 端系统之间直接通信,节点既可以请求资源,也可以提供资源。

特点:

  • 不依赖或较少依赖中心服务器。
  • 对等方可能间歇性在线。
  • 节点 IP 地址可能变化。
  • 具有自扩展性:新节点加入时既带来下载需求,也带来上传能力。

例子:BitTorrent、部分实时通信系统、部分区块链网络。

优点:

  • 可扩展性强。
  • 服务器压力小。

缺点:

  • 管理复杂。
  • 节点动态变化导致可靠性和安全性问题。
  • NAT 穿越困难。

文件分发时间对比

设服务器上传速率为 usu_{s},第 ii 个客户下载速率为 did_{i},上传速率为 uiu_{i},文件大小为 FF,客户数为 NN

C/S 模型中,分发时间至少满足:

DCSmax{NFus,Fdmin}D_{CS} \ge \max\left\{\frac{NF}{u_s}, \frac{F}{d_{min}}\right\}

P2P 模型中,分发时间至少满足:

DP2Pmax{Fus,Fdmin,NFus+i=1Nui}D_{P2P} \ge \max\left\{\frac{F}{u_s}, \frac{F}{d_{min}}, \frac{NF}{u_s+\sum_{i=1}^{N}u_i}\right\}

结论:P2P 在大规模分发场景下更容易扩展,因为所有 peer 的上传能力也参与服务。


进程通信

进程与主机

网络应用之间真正通信的是进程(process),不是抽象的“主机”。

  • 同一主机内进程通信:由操作系统提供进程间通信机制。
  • 不同主机进程通信:通过网络交换报文。

客户进程与服务器进程

  • 客户进程: 发起通信。
  • 服务器进程: 等待被联系。

注意:P2P 中一个进程在某次通信中可以是客户,在另一次通信中可以是服务器。

套接字 Socket

**套接字(socket)**是应用进程和运输层之间的接口,也称为应用程序编程接口 API。

应用进程通过 socket:

  1. 把报文交给运输层;
  2. 从运输层接收报文;
  3. 指定目的 IP 地址和端口号;
  4. 选择 TCP 或 UDP 等运输层协议。

可以理解为:

应用进程  <—— socket ——>  运输层

进程寻址:IP 地址 + 端口号

要让一个进程收到数据,需要:

  • 主机地址:IP address。
  • 进程标识:port number。

例如:Web 服务器通常监听 TCP 80 或 TCP 443 端口。


应用层希望运输层提供的服务

应用层可能需要以下服务。

可靠数据传输

要求数据不丢失、不出错、按序到达。

  • 文件传输、电子邮件、Web 页面通常要求可靠。
  • 音视频可以容忍少量丢失。

TCP 提供可靠数据传输;UDP 不提供。

吞吐量保证

有些应用希望获得最低吞吐率。例如视频播放希望带宽不低于某个码率。

现实中的普通 TCP/UDP 并不直接提供最低吞吐量保证。应用通常通过自适应码率、缓存等方式处理带宽波动。

定时 / 时间敏感性

实时语音、视频会议、在线游戏对时延敏感。

普通 Internet 运输层协议不提供严格时延保证。

安全性

应用可能需要:

  • 机密性:防窃听。
  • 完整性:防篡改。
  • 身份认证:确认通信对方身份。

TCP/UDP 本身不提供这些安全服务。现代 Web 通常使用 TLS 在应用与运输层之间提供安全通信。


SSL/TLS 安全套接层

教材中可能称 SSL(Secure Sockets Layer),现代标准通常称 TLS(Transport Layer Security)

TLS 的位置

TLS 通常位于应用层和运输层之间:

HTTP / SMTP / IMAP 等应用协议
TLS
TCP
IP
链路层

HTTPS = HTTP + TLS + TCP。

TLS 提供的核心安全服务

  • 加密:防止报文内容被窃听。
  • 完整性校验:防止报文被篡改。
  • 身份认证:通常通过服务器证书验证服务器身份。
  • 密钥协商:通信双方协商会话密钥。

SSL 与 TLS 的关系

  • SSL 是早期名称和早期协议版本。
  • TLS 是 SSL 的后续标准化版本。
  • 实际考试中若教材写 SSL,答题可写“SSL/TLS”,但应知道现代部署主要使用 TLS。

HTTP

HTTP(HyperText Transfer Protocol)是 Web 的核心协议。

HTTP 的基本特点

  • 应用层协议。
  • 使用客户-服务器模式。
  • 默认 HTTP/1.1 使用 TCP 80 端口。
  • HTTPS 使用 TCP 443 端口,并在 TCP 上使用 TLS。
  • HTTP 是无状态协议:服务器默认不保存客户端过去请求的状态。

HTTP 无状态的含义

**无状态(stateless)**指每个请求在协议语义上相互独立,服务器不依赖先前请求来理解当前请求。

但实际 Web 应用可以借助:

  • Cookie;
  • Session;
  • Token;
  • 数据库;

来实现用户登录状态、购物车等应用层状态。

因此要区分:

  • HTTP 协议本身无状态。
  • Web 应用可以在 HTTP 之上实现状态管理。

本书常见协议:有状态/无状态、端口号、运输层

协议层次默认运输层常见端口有状态/无状态说明
HTTP应用层TCP80协议本身无状态Web 请求/响应
HTTPS应用层TCP + TLS443HTTP 语义无状态,TLS 连接有状态安全 Web
FTP 控制连接应用层TCP21有状态保存登录状态、当前目录等
FTP 数据连接应用层TCP20 或临时端口与传输任务相关控制连接与数据连接分离
SMTP应用层TCP25;提交常用 587会话有状态邮件发送/中继
POP3应用层TCP110;加密 995有状态authorization、transaction、update 状态
IMAP应用层TCP143;加密 993有状态服务器保存邮箱状态,支持多设备同步
DNS应用层UDP 为主,TCP 也可用53查询/响应近似无状态;递归解析器维护缓存域名解析
DHCP应用层UDPserver 67,client 68有状态地址租约分配
SNMP应用层UDP161/162管理状态在设备中网络管理
NTP应用层UDP123通常无连接时间同步
BGP应用/控制平面协议TCP179有状态AS 间路由协议
RIP网络层控制协议UDP520路由表有状态基于距离向量
OSPF网络层控制协议直接封装在 IPIP 协议号 89邻接关系/LSDB 有状态链路状态协议
ICMP网络层辅助协议直接封装在 IP无端口无连接差错报告和诊断
ARP链路层/网络接口层辅助协议不使用 TCP/UDP无端口ARP 缓存有状态IP 到 MAC 地址解析

易错点:

  • 端口号属于运输层概念;ICMP、ARP、OSPF 不使用 TCP/UDP 端口。
  • DNS 通常用 UDP 53,但在区域传送、大响应、某些扩展场景下可用 TCP 53。
  • BGP 使用 TCP 179,虽然它服务于路由控制平面。
  • DHCP 是应用层协议,但使用 UDP 67/68,并与 IP 地址配置密切相关。

非持久连接、持久连接与流水线

非持久 HTTP 连接

非持久连接(non-persistent connection): 每请求一个对象,就建立一个 TCP 连接,传输完成后关闭。

获取一个对象大致需要:

  1. 1 RTT 建立 TCP 连接;
  2. 1 RTT 发送 HTTP 请求并接收响应首字节;
  3. 对象传输时间。

所以单个对象大致需要:

2RTT+transmission time2RTT + \text{transmission time}

若一个网页包含 1 个 HTML 文件和 10 张图片,非持久连接可能需要多次 TCP 连接,时延较大。

持久 HTTP 连接

持久连接(persistent connection): 多个 HTTP 请求/响应复用同一条 TCP 连接。

优点:

  • 减少 TCP 连接建立开销。
  • 避免每个对象都经历慢启动初期。
  • 降低服务器和客户端资源消耗。

HTTP/1.1 默认使用持久连接。

流水线 pipelining

在 HTTP/1.1 中,客户端可以连续发送多个请求,不必等待前一个响应返回后再发下一个请求。

但流水线存在队头阻塞问题:前一个响应未完成时,后续响应可能被阻塞。现代 Web 更多依赖 HTTP/2 多路复用或 HTTP/3/QUIC 来优化。


HTTP 报文格式:请求与响应

HTTP 请求报文

一般格式:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Connection: keep-alive

可选实体体

组成:

  1. 请求行:方法、URL 路径、HTTP 版本。
  2. 首部行:键值对。
  3. 空行:表示首部结束。
  4. 实体体:GET 通常没有;POST/PUT 常有。

常见方法:

方法含义
GET请求资源
POST提交数据,常用于表单、创建资源
HEAD类似 GET,但只要响应首部
PUT上传/替换资源
DELETE删除资源

HTTP 响应报文

一般格式:

HTTP/1.1 200 OK
Date: Tue, 01 Jul 2026 12:00:00 GMT
Server: Apache
Content-Type: text/html
Content-Length: 1024

<html>...</html>

组成:

  1. 状态行:HTTP 版本、状态码、原因短语。
  2. 首部行。
  3. 空行。
  4. 实体体。

常见状态码:

状态码含义
200 OK请求成功
301 Moved Permanently永久重定向
302 Found临时重定向
304 Not Modified缓存对象仍有效
400 Bad Request请求格式错误
401 Unauthorized未认证
403 Forbidden服务器拒绝访问
404 Not Found资源不存在
500 Internal Server Error服务器内部错误
503 Service Unavailable服务不可用

Cookies

HTTP 无状态,但 Web 需要识别用户,因此引入 Cookie。

Cookie 技术通常包含四部分:

  1. HTTP 响应报文中的 Set-Cookie 首部。
  2. HTTP 请求报文中的 Cookie 首部。
  3. 用户端系统中的 cookie 文件或浏览器存储。
  4. Web 站点后端数据库。
  1. 用户首次访问网站。
  2. 服务器生成用户标识,并通过 Set-Cookie 返回。
  3. 浏览器保存 Cookie。
  4. 后续请求自动携带 Cookie。
  5. 服务器根据 Cookie 识别用户。

作用:

  • 登录状态保持。
  • 购物车。
  • 个性化推荐。
  • 用户行为追踪。

问题:

  • 隐私风险。
  • 被窃取后可能导致会话劫持。
  • 需要配合 SecureHttpOnlySameSite 等属性提高安全性。

Web caches / proxy

Web 缓存是什么

Web cache,也称代理服务器 proxy server,代表原始服务器保存对象副本。

用户请求对象时:

  • 若缓存命中:代理直接返回对象。
  • 若缓存未命中:代理向原始服务器请求,保存副本后返回给用户。

Web 缓存的作用

  • 降低用户响应时间。
  • 减少机构接入链路流量。
  • 减少原始服务器负载。
  • 使内容更靠近用户。

条件 GET

缓存需要确认对象是否过期。HTTP 使用条件 GET:

GET /index.html HTTP/1.1
If-Modified-Since: Tue, 01 Jul 2026 12:00:00 GMT

若对象未修改,服务器返回:

HTTP/1.1 304 Not Modified

此时不返回对象实体,节省带宽。


FTP:out-of-band

FTP(File Transfer Protocol)用于文件传输。

FTP 的两个连接

FTP 使用两个 TCP 连接:

  1. 控制连接 control connection:传输命令和响应,通常使用 TCP 21。
  2. 数据连接 data connection:传输文件数据,主动模式中服务器数据端口常与 TCP 20 相关;被动模式中常使用服务器临时端口。

out-of-band 的含义

FTP 的控制信息和文件数据不在同一连接上传输,称为 out-of-band control(带外控制)

对比:HTTP 的请求控制信息和对象数据通常在同一个 TCP 连接中传输,因此是 in-band。

FTP 有状态

FTP 服务器在控制连接中维护用户状态,例如:

  • 用户登录身份;
  • 当前目录;
  • 传输模式;
  • 控制连接状态。

因此 FTP 是典型有状态协议。


Email 构成

电子邮件系统主要由三部分构成。

User Agent 用户代理

用户读写邮件的软件,例如 Outlook、Thunderbird、Webmail。

功能:

  • 撰写邮件;
  • 读取邮件;
  • 管理邮件夹;
  • 与邮件服务器交互。

Mail Server 邮件服务器

每个用户在邮件服务器上有邮箱 mailbox。

邮件服务器负责:

  • 存储用户邮件;
  • 与其他邮件服务器交换邮件;
  • 为用户代理提供收取邮件服务。

邮件发送路径

SMTP 用于发送邮件。

典型路径:

发送方 user agent
    -> 发送方 mail server
    -> 接收方 mail server
    -> 接收方 user agent

前两段和服务器之间的邮件转发主要使用 SMTP。


SMTP、POP3、IMAP、HTTP

SMTP

SMTP(Simple Mail Transfer Protocol)用于邮件发送和邮件服务器之间的转发。

特点:

  • 使用 TCP。
  • 默认服务器间传输端口 TCP 25。
  • 是推协议 push protocol:发送方主动把邮件推给接收方服务器。
  • 报文使用 ASCII 文本命令与响应。

常见命令:

HELO/EHLO
MAIL FROM:
RCPT TO:
DATA
QUIT

POP3

POP3 用于从邮件服务器取回邮件。

特点:

  • 使用 TCP 110;加密常用 995。
  • 模式简单。
  • 通常下载并可删除服务器上的邮件。
  • 状态阶段:Authorization、Transaction、Update。

IMAP

IMAP 用于访问和管理服务器上的邮件。

特点:

  • 使用 TCP 143;加密常用 993。
  • 邮件主要保存在服务器上。
  • 支持文件夹、服务器端搜索、多设备同步。
  • 比 POP3 更适合多终端邮箱管理。

HTTP Webmail

使用浏览器访问邮箱时,用户代理和 Web 邮件服务器之间使用 HTTP/HTTPS。

但邮件服务器之间转发仍通常依靠 SMTP。

对比表

协议主要用途方向默认端口特点
SMTP发送/转发邮件push25;提交 587服务器间邮件传输核心协议
POP3用户取信pull110/995简单,常下载到本地
IMAP用户取信和管理邮箱pull/同步143/993邮件保留服务器,支持同步
HTTP/HTTPSWebmail 访问请求/响应80/443浏览器访问邮箱界面

DNS:提供的服务、层次、递归查询与迭代查询

DNS(Domain Name System)是互联网的命名系统。

DNS 提供的服务

DNS 不仅提供主机名到 IP 地址的转换,还提供:

  • 主机名到 IP 地址映射:A 记录、AAAA 记录。
  • 主机别名:CNAME。
  • 邮件服务器别名:MX。
  • 负载分配:一个域名对应多个 IP 地址。

DNS 层次结构

DNS 是分布式层次数据库。

根 DNS 服务器
  -> 顶级域 TLD DNS 服务器(.com、.org、.cn 等)
      -> 权威 DNS 服务器(example.com)

常见 DNS 服务器类型:

  1. 根 DNS 服务器 root server:指向 TLD 服务器。
  2. TLD DNS 服务器:管理顶级域。
  3. 权威 DNS 服务器 authoritative server:保存具体域名记录。
  4. 本地 DNS 服务器 local DNS server:通常由 ISP、学校、公司提供,负责代替主机递归查询。

递归查询与迭代查询

递归查询 recursive query

被查询服务器负责继续查询,并最终返回完整答案。

例子:主机把查询交给本地 DNS,本地 DNS 负责查完整个过程。

迭代查询 iterative query

被查询服务器不知道最终答案时,只返回“下一步应该问谁”。

典型过程:

本地 DNS -> 根 DNS:问 www.example.com?
根 DNS -> 本地 DNS:去问 .com TLD
本地 DNS -> .com TLD:问 www.example.com?
.com TLD -> 本地 DNS:去问 example.com 权威服务器
本地 DNS -> 权威 DNS:问 www.example.com?
权威 DNS -> 本地 DNS:返回 IP 地址

DNS 缓存

DNS 广泛使用缓存。

优点:

  • 减少查询时延。
  • 降低上层 DNS 服务器负载。

缓存记录有 TTL,到期后需要重新查询。

DNS 报文与端口

  • DNS 通常使用 UDP 53。
  • 大响应、区域传送等情况可使用 TCP 53。
  • DNS 报文首部固定 12 字节。

套接字编程

UDP socket 编程基本过程

服务器端:

socket()
bind(server_port)
recvfrom()
sendto()

客户端:

socket()
sendto(server_ip, server_port)
recvfrom()

UDP 特点:

  • 不需要建立连接。
  • 每个报文需要指定目的地址。
  • 可能丢失、乱序、重复。

TCP socket 编程基本过程

服务器端:

socket()
bind(server_port)
listen()
accept()
recv()/send()
close()

客户端:

socket()
connect(server_ip, server_port)
send()/recv()
close()

TCP 特点:

  • 需要连接建立。
  • 面向字节流。
  • 可靠、按序交付。
  • 服务器欢迎套接字 listening socket 用于接收连接;每个连接由 accept 产生一个新的连接套接字。

运输层

运输层图解:UDP、RDT、GBN/SR、TCP

运输层图解:UDP、RDT、GBN/SR、TCP

运输层协议通常不提供严格时延保证和带宽保证。TCP 提供可靠数据传输、流量控制、拥塞控制;UDP 提供最小化服务。

多路复用和多路分解

你原文写的是“多路服用”,应为 多路复用

多路复用 multiplexing

发送端运输层从多个 socket 收集数据,给每块数据加上首部,交给网络层。

关键:在运输层首部中加入端口号等信息。

多路分解 demultiplexing

接收端运输层根据报文段首部信息,把数据交付给正确 socket。


无连接的多路分解:UDP

UDP socket 的分解主要依据:

目的 IP 地址 + 目的端口号

教材常说:UDP socket 由二元组标识:

目的 IP 地址,目的端口号

含义:如果两个 UDP 数据报有相同的目的 IP 和目的端口,即使源 IP、源端口不同,也会被交付给同一个 UDP socket。

例子:

A: 1.1.1.1:50000 -> S: 2.2.2.2:53
B: 3.3.3.3:40000 -> S: 2.2.2.2:53

这两个报文都会交给服务器 2.2.2.2:53 的 DNS UDP socket。


有连接的多路分解:TCP

TCP socket 由四元组标识:

源 IP 地址,源端口号,目的 IP 地址,目的端口号

服务器可以在同一个端口上同时服务多个客户端,因为每条 TCP 连接的四元组不同。

例子:

Client A: 1.1.1.1:50000 -> Server: 2.2.2.2:80
Client B: 3.3.3.3:50000 -> Server: 2.2.2.2:80

虽然目的端口都是 80,但源 IP 不同,四元组不同,因此是不同连接。


本书常见协议使用 UDP 还是 TCP

协议/应用通常使用 TCP通常使用 UDP说明
HTTP/1.1、HTTP/2Web 传统版本基于 TCP
HTTP/3HTTP/3 基于 QUIC,QUIC 基于 UDP
HTTPSHTTP + TLS + TCP;HTTP/3 例外
FTP控制和数据连接都使用 TCP
SMTP邮件发送/服务器转发
POP3邮件读取
IMAP邮件读取和同步
DNS可用主要使用普通查询多用 UDP,区域传送/大响应可用 TCP
DHCPUDP 67/68
RIPUDP 520
BGPTCP 179
OSPF直接封装在 IP,协议号 89
ICMP直接封装在 IP
ARP链路层协议,不走 IP/TCP/UDP
RTP/实时音视频常用容忍少量丢失,重视时延
SNMP常用UDP 161/162
NTPUDP 123

UDP

UDP(User Datagram Protocol)提供一种非常简单的运输层服务。

UDP 的特点

  • 无连接:发送前不握手。
  • 不保证可靠:不保证到达、不保证按序、不保证不重复。
  • 不进行拥塞控制。
  • 首部开销小,只有 8 字节。
  • 支持多播/广播场景。
  • 应用可以自行实现需要的可靠性或时序控制。

适合:

  • DNS 查询。
  • DHCP。
  • 实时音视频。
  • 在线游戏。
  • 简单请求响应。

UDP 报文段结构

UDP 首部固定 8 字节:

0                   15 16                  31
+---------------------+---------------------+
| Source Port         | Destination Port    |
+---------------------+---------------------+
| Length              | Checksum            |
+---------------------+---------------------+
| Application Data ...                      |
+-------------------------------------------+

字段:

字段长度作用
Source Port16 bit源端口
Destination Port16 bit目的端口
Length16 bitUDP 首部 + 数据总长度
Checksum16 bit差错检测

UDP 校验和:端回进位 + 取反

UDP checksum 使用 16 位反码加法。

计算步骤:

  1. 把 UDP 首部、数据和伪首部按 16 bit 分组。
  2. 所有 16 bit 字相加。
  3. 如果最高位产生进位,将进位回卷加到低位,即端回进位
  4. 对最终和逐位取反,得到校验和。

例子:

  0110 0110 0110 0000
+ 0101 0101 0101 0101
= 1011 1011 1011 0101

+ 1000 1111 0000 1100
=1 0100 1010 1100 0001
端回进位:0100 1010 1100 0010
取反:    1011 0101 0011 1101

接收方验证:把所有 16 bit 字,包括 checksum 一起相加。若结果为全 1,则认为未检测到差错。

UDP 没有纠错功能

UDP checksum 只做差错检测:

  • 能发现一部分比特错误。
  • 不负责重传。
  • 不负责纠错。
  • 发现错误后通常直接丢弃,是否恢复由应用决定。

可靠数据传输 RDT

可靠数据传输讨论的是:在不可靠信道上,如何实现可靠交付。

rdt1.0:完全可靠信道

假设底层信道:

  • 不出错。
  • 不丢包。

因此发送方只需发送,接收方只需接收。

新增机制:无。

解决问题:无,因为信道理想。


rdt2.0:信道可能出现比特错误

假设:

  • 分组可能出现比特错误。
  • 分组不会丢失。

新增机制:

  • checksum:检测差错。
  • ACK:肯定确认。
  • NAK:否定确认。
  • 重传:收到 NAK 后重传。

问题:ACK/NAK 本身也可能损坏。如果 ACK/NAK 损坏,发送方不知道接收方到底是否正确收到。


rdt2.1:解决 ACK/NAK 损坏

新增机制:

  • 序号 sequence number。
  • 接收方通过序号识别重复分组。

由于停等协议中最多只需区分“当前分组”和“下一个分组”,所以 0/1 两个序号即可。

解决问题:

  • ACK/NAK 损坏时,发送方可重传。
  • 接收方通过序号判断是否重复,重复则丢弃但重新 ACK。

rdt2.2:无 NAK 协议

rdt2.2 去掉 NAK,只使用 ACK。

思想:

  • 接收方收到正确分组,发送对应 ACK。
  • 接收方收到错误分组或重复分组,重新发送上一个正确分组的 ACK。
  • 发送方收到重复 ACK,可理解为当前分组没有被正确接收,从而重传。

新增机制:

  • ACK 中携带被确认分组的序号。

rdt3.0:信道可能丢包

假设:

  • 分组可能出错。
  • 分组可能丢失。
  • ACK 也可能丢失。

新增机制:

  • 定时器 timer。
  • 超时重传 timeout retransmission。

发送方发送分组后启动定时器:

  • 超时前收到正确 ACK:发送下一个分组。
  • 超时仍未收到 ACK:重传当前分组。

rdt3.0 是停等协议,性能较低。原因是发送方每次只能有一个未确认分组。

rdt 版本总结表

版本信道假设新增机制解决的问题遗留问题
rdt1.0不出错不丢包理想信道传输不现实
rdt2.0会出错不丢包checksum、ACK、NAK、重传数据分组比特错误ACK/NAK 可能损坏
rdt2.1会出错不丢包序号、重复检测ACK/NAK 损坏导致的不确定性仍使用 NAK,较复杂
rdt2.2会出错不丢包只用 ACK,ACK 带序号去掉 NAK不能处理丢包
rdt3.0会出错会丢包定时器、超时重传分组或 ACK 丢失停等,效率低

GBN 和 SR

停等协议信道利用率低,因此引入流水线协议:允许多个分组未确认。

Go-Back-N(GBN,回退 N 步)

GBN 的特点

  • 发送方窗口大小为 NN
  • 允许连续发送多个未确认分组。
  • 接收方只按序接收。
  • 接收方丢弃失序分组。
  • 使用累积 ACK。
  • 发送方通常只为最早未确认分组设置一个定时器。
  • 超时后,从最早未确认分组开始全部重传。

GBN 接收方行为

如果期望收到分组 kk

  • 收到 kk:交付上层,发送 ACK k。
  • 收到 k+1k+1 或更后面的失序分组:丢弃,重新发送 ACK k-1。

GBN 发送方窗口

设:

  • base\text{base}:最早未确认分组序号。
  • nextseqnum\text{nextseqnum}:下一个可发送分组序号。
  • NN:窗口大小。

可发送条件:

nextseqnum<base+Nnextseqnum < base + N

Selective Repeat(SR,选择重传)

SR 的特点

  • 发送方窗口大小为 NN
  • 接收方可以缓存失序分组。
  • 每个分组单独确认。
  • 每个分组通常有独立定时器。
  • 只重传丢失或出错的分组。

SR 接收方行为

如果收到窗口内分组:

  • 若未收到过,则缓存并发送 ACK。
  • 若正好是窗口基序号,则向上层按序交付,并滑动窗口。
  • 若重复分组,则重新 ACK。

SR 序号空间限制

为了避免新旧分组序号混淆,SR 通常要求:

N序号空间大小2N \le \frac{序号空间大小}{2}

如果序号空间为 2k2^k,则:

N2k1N \le 2^{k-1}

GBN vs SR

比较项GBNSR
接收方是否缓存失序分组不缓存,直接丢弃缓存
ACK 类型累积 ACK单独 ACK
重传范围从丢失处分组开始回退重传只重传出错/丢失分组
定时器通常一个通常每个分组一个
实现复杂度较低较高
带宽利用率丢包时较低较高

TCP

TCP 是面向连接的可靠字节流协议。

TCP 提供的服务

  • 面向连接。
  • 可靠数据传输。
  • 按序交付。
  • 全双工通信。
  • 流量控制。
  • 拥塞控制。

TCP 不提供:

  • 固定时延保证。
  • 最小带宽保证。
  • 报文边界保留。
  • 原生加密。

TCP 报文结构与 MSS

TCP 首部

TCP 首部最小 20 字节。

0                   15 16                  31
+---------------------+---------------------+
| Source Port         | Destination Port    |
+---------------------+---------------------+
| Sequence Number                           |
+-------------------------------------------+
| Acknowledgment Number                     |
+----+------+---------+----------------------+
|Hdr |Flags | Window Size                    |
+----+------+---------+----------------------+
| Checksum            | Urgent Pointer       |
+---------------------+----------------------+
| Options (variable)                         |
+-------------------------------------------+
| Data ...                                  |
+-------------------------------------------+

重要字段:

字段作用
Source/Destination Port标识应用进程
Sequence Number本报文段数据第一个字节的序号
Acknowledgment Number期望收到的下一个字节序号
ACK确认号字段有效
SYN建立连接
FIN关闭连接
RST重置连接
Receive Window接收窗口,用于流量控制
Checksum差错检测
OptionsMSS、窗口扩大、时间戳等选项

MSS

MSS(Maximum Segment Size)指 TCP 报文段中应用层数据部分的最大长度,不包括 TCP 首部和 IP 首部。

典型以太网 MTU 为 1500 字节时:

  • IPv4 首部通常 20 字节。
  • TCP 首部通常 20 字节。
  • MSS 常为:
15002020=1460 bytes1500 - 20 - 20 = 1460 \text{ bytes}

注意:MSS 不是 TCP 报文段总长度,也不是 IP 数据报总长度。


TCP 可靠数据传输

TCP 序号与确认号

TCP 把数据看作字节流。

  • 序号:本报文段第一个数据字节的编号。
  • 确认号:接收方期望收到的下一个字节编号。

例子:

若接收方已经正确收到字节 0~999,则 ACK = 1000。

TCP 使用累积确认。ACK 1000 表示 1000 之前的字节都已收到。

TCP 重传机制

TCP 主要通过以下方式触发重传:

  1. 超时重传。
  2. 快速重传:收到 3 个冗余 ACK 后,推断某报文段丢失。

RTT 估计与超时间隔

TCP 维护 EstimatedRTT:

EstimatedRTT=(1α)EstimatedRTT+αSampleRTTEstimatedRTT=(1-\alpha)EstimatedRTT+\alpha SampleRTT

教材常取:

α=0.125\alpha=0.125

RTT 偏差:

DevRTT=(1β)DevRTT+βSampleRTTEstimatedRTTDevRTT=(1-\beta)DevRTT+\beta |SampleRTT-EstimatedRTT|

教材常取:

β=0.25\beta=0.25

超时时间:

TimeoutInterval=EstimatedRTT+4DevRTTTimeoutInterval=EstimatedRTT+4DevRTT

TCP 流量控制

流量控制解决什么问题

流量控制防止发送方发送太快,压垮接收方缓存。

接收方维护接收缓存,向发送方通告接收窗口 rwnd\text{rwnd}

发送方需要满足:

LastByteSentLastByteAckedrwndLastByteSent - LastByteAcked \le rwnd

rwnd 计算

设:

  • RcvBuffer\text{RcvBuffer}:接收缓存大小。
  • LastByteRcvd\text{LastByteRcvd}:最后收到的字节编号。
  • LastByteRead\text{LastByteRead}:应用进程最后读取的字节编号。

则接收窗口:

rwnd=RcvBuffer(LastByteRcvdLastByteRead)rwnd = RcvBuffer - (LastByteRcvd - LastByteRead)

与拥塞控制区别

比较项流量控制拥塞控制
目的防止接收方缓存溢出防止网络拥塞
依据接收方通告窗口 rwnd拥塞窗口 cwnd、丢包、ACK
控制对象接收端处理能力网络路径承载能力

TCP 实际发送窗口受两者共同限制:

SendWindow=min(rwnd,cwnd)SendWindow = min(rwnd, cwnd)

TCP 连接管理

三次握手

TCP 建立连接使用三次握手。

Client -> Server: SYN, seq = x
Server -> Client: SYN + ACK, seq = y, ack = x + 1
Client -> Server: ACK, ack = y + 1

作用:

  • 双方确认对方收发能力。
  • 协商初始序号。
  • 建立连接状态。

为什么不是两次握手

两次握手可能导致历史连接请求报文被服务器误认为新连接,从而建立半开连接。

三次握手可以让客户端最终确认服务器的 SYN,降低旧报文造成错误连接的风险。

四次挥手

TCP 是全双工,两个方向需要分别关闭。

A -> B: FIN
B -> A: ACK
B -> A: FIN
A -> B: ACK

主动关闭方通常进入 TIME_WAIT,等待一段时间,确保最后 ACK 可重传,并让旧连接报文在网络中消失。


TCP 拥塞控制

拥塞控制解决网络中路由器缓存溢出、排队时延过大、丢包等问题。

基本变量

  • cwnd\text{cwnd}:拥塞窗口,发送方根据网络拥塞情况维护。
  • rwnd\text{rwnd}:接收窗口,由接收方通告。
  • ssthresh\text{ssthresh}:慢启动阈值。
  • MSS\text{MSS}:最大报文段长度。

发送方最多可发送未确认数据量:

min(cwnd,rwnd)\min(\text{cwnd}, \text{rwnd})

慢启动 Slow Start

cwnd<ssthresh\text{cwnd}<\text{ssthresh} 时,处于慢启动阶段。

规则:

  • 初始 cwnd 通常较小。
  • 每收到一个 ACK,cwnd 增加 1 MSS。
  • 每经过一个 RTT,cwnd 大约翻倍。

所以慢启动是指数增长。

拥塞避免 Congestion Avoidance

cwndssthresh\text{cwnd}\ge \text{ssthresh} 时,进入拥塞避免。

规则:

  • 每 RTT,cwnd 约增加 1 MSS。
  • 线性增长。

可以理解为 AIMD 中的 Additive Increase。

丢包事件:超时

超时通常表示拥塞严重。

典型 TCP Reno 处理:

ssthresh=cwnd2\text{ssthresh}=\frac{\text{cwnd}}{2}

然后:

cwnd=1MSS\text{cwnd}=1\text{MSS}

重新进入慢启动。

丢包事件:3 个冗余 ACK

3 个冗余 ACK 表示某个报文段丢失,但后续报文段仍到达接收方,因此网络不一定严重拥塞。

触发:

  • 快速重传 fast retransmit。
  • 快速恢复 fast recovery。

TCP Reno 典型过程:

  1. 收到 3 个冗余 ACK:
ssthresh=cwnd2\text{ssthresh}=\frac{\text{cwnd}}{2}
  1. 进入快速恢复时:
cwnd=ssthresh+3MSS\text{cwnd}=\text{ssthresh}+3\text{MSS}

这里的 +3MSS+3\text{MSS} 是因为 3 个冗余 ACK 表明有 3 个报文段已经离开网络并被接收方收到,发送方可适当“膨胀”窗口。

  1. 每收到一个额外冗余 ACK,cwndcwnd+1MSS\text{cwnd} \leftarrow \text{cwnd}+1\text{MSS}
  2. 当收到对重传报文段的新 ACK,退出快速恢复:
cwnd=ssthresh\text{cwnd}=\text{ssthresh}

然后进入拥塞避免。

Tahoe、Reno 与“ssthresh = cwnd/2 + 3”问题

严格说:

  • ssthresh\text{ssthresh} 通常设置为丢包前 cwnd\text{cwnd} 的一半。
  • +3MSS+3\text{MSS} 加在 cwnd\text{cwnd} 上,不是加在 ssthresh\text{ssthresh} 上。

即:

ssthresh = cwnd / 2
cwnd = ssthresh + 3 MSS

若某些题目写成“快速重传变化时 ssthresh = cwnd/2 + 3”,通常是表述混淆。更标准的 Reno 快速恢复写法是 cwnd=ssthresh+3MSS\text{cwnd}=\text{ssthresh}+3\text{MSS}

TCP Tahoe 没有快速恢复:检测到 3 个冗余 ACK 后也会把 cwnd 降到 1 MSS,重新慢启动。

AIMD

TCP 拥塞控制核心思想:

  • Additive Increase:未检测到拥塞时线性增加窗口。
  • Multiplicative Decrease:检测到拥塞时乘性减小窗口。

这能在多个 TCP 连接之间形成较公平的带宽共享。


网络层

网络层图解:IP、子网、分片、DHCP、NAT、IPv6

网络层图解:IP、子网、分片、DHCP、NAT、IPv6

网络服务模型:模型及其保证的服务

网络层服务模型规定网络层为运输层提供什么服务。

Internet 的网络服务模型

Internet 的 IP 层提供尽力而为服务(best-effort service)

它不保证:

  • 分组一定到达。
  • 分组按序到达。
  • 分组不重复。
  • 分组之间间隔固定。
  • 最小时延。
  • 最小带宽。

它尽力转发,但可靠性由上层协议或应用处理。

其他可能的服务模型

理论上网络层可以提供:

  • 保证交付。
  • 保证有界时延。
  • 保证按序交付。
  • 保证最小带宽。
  • 安全服务。

但 Internet IP 层为了简单、可扩展,选择了尽力而为模型。


ATM 异步传输模式

ATM(Asynchronous Transfer Mode)是一种曾被广泛研究和部署的虚电路网络技术。

ATM 的特点

  • 面向连接,使用虚电路。
  • 固定长度信元 cell:53 字节,其中 5 字节首部,48 字节负载。
  • 通过虚电路标识转发,而不是每个分组携带完整目的地址。
  • 支持不同服务类别。

ATM 服务类别

服务类别含义适合业务
CBRConstant Bit Rate,恒定比特率语音、传统视频
VBRVariable Bit Rate,可变比特率压缩视频
ABRAvailable Bit Rate,可用比特率弹性数据业务
UBRUnspecified Bit Rate,未指定比特率尽力而为数据

ATM 的核心价值是提供可预测 QoS,但 Internet 最终以 IP 的简单尽力而为模型占主流。


虚电路网络和数据报网络

虚电路网络 VC network

虚电路网络在数据传输前建立路径。

过程:

  1. VC setup:建立虚电路。
  2. 数据传输:分组沿固定路径转发。
  3. VC teardown:拆除虚电路。

每条链路上的分组携带 VC number,路由器根据 VC 转发表替换 VC number 并转发。

虚电路转发表可表示为:

入接口,入 VC号 -> 出接口,出 VC号

特点:

  • 路由器需要维护连接状态。
  • 分组首部较短。
  • 可预留资源。
  • 链路或路由器故障会影响经过该虚电路的连接。

数据报网络 datagram network

Internet 是典型数据报网络。

特点:

  • 不需要网络层连接建立。
  • 每个分组携带目的地址。
  • 路由器根据目的地址和转发表逐跳转发。
  • 不同分组可走不同路径。
  • 路由器不维护端到端连接状态。

与传输层连接/无连接比较

比较项网络层虚电路TCP 连接网络层数据报UDP
层次网络层运输层网络层运输层
是否连接
路由器是否维护连接状态否,TCP 状态在端系统
分组转发依据VC 号IP 层仍按目的地址转发目的地址IP 层按目的地址转发
可靠性取决于网络设计TCP 提供可靠传输IP 不可靠UDP 不可靠

易错点:

TCP 是端系统上的运输层连接,不代表网络中的路由器为 TCP 连接建立虚电路。Internet 中 TCP 报文段仍被封装进 IP 数据报,由 IP 层逐跳转发。


最长前缀匹配

路由器转发时,可能有多个转发表项匹配目的 IP 地址。此时选择匹配前缀最长的一项。

原因:前缀越长,地址块越具体。

例子:

前缀输出接口
11001000 00010111 000100
11001000 00010111 000110001
11001000 00010111 000112
otherwise3

如果目的地址同时匹配多个前缀,应选择最长的匹配项,而不是最先出现的表项。


IPv4 数据报结构

IPv4 首部最小 20 字节,最大 60 字节。

0                   15 16                  31
+----+----+----------+----------------------+
|Ver |IHL | DS/ECN   | Total Length         |
+--------------------+----------------------+
| Identification     | Flags | Frag Offset  |
+--------------------+----------------------+
| TTL | Protocol     | Header Checksum      |
+--------------------+----------------------+
| Source IP Address                         |
+-------------------------------------------+
| Destination IP Address                    |
+-------------------------------------------+
| Options (optional)                        |
+-------------------------------------------+
| Data                                      |
+-------------------------------------------+

重要字段:

字段作用
VersionIP 版本,IPv4 为 4
IHL首部长度,单位为 4 字节
Total LengthIP 数据报总长度,首部 + 数据
Identification分片重组标识
FlagsDF、MF 等分片控制
Fragment Offset分片偏移,单位 8 字节
TTL生存时间,每经过一个路由器减 1
Protocol上层协议,如 TCP=6、UDP=17、ICMP=1
Header ChecksumIPv4 首部校验和
Source/Destination IP源/目的 IP 地址

常见协议典型首部长度总结

协议/帧典型首部长度备注
Ethernet II14 字节首部 + 4 字节 FCS前导码 8 字节通常不计入帧长度
ARP28 字节 ARP 报文封装在以太网帧中
IPv420 字节最小,60 字节最大IHL 指定首部长度
IPv6固定 40 字节基本首部扩展首部另算
ICMP Echo8 字节 ICMP 首部Type、Code、Checksum 等
UDP8 字节固定长度
TCP20 字节最小,60 字节常见上限Options 可变
DNS12 字节固定首部后接问题区/回答区等
DHCP/BOOTP固定部分 236 字节 + optionsUDP 67/68
TLS record5 字节记录层首部TLS 在 TCP 之上
HTTP无固定二进制首部长度文本/语义首部,可变

IP 检验和:为什么需要反复重新计算

IPv4 首部有 Header Checksum,只覆盖 IPv4 首部,不覆盖数据部分。

每经过一个路由器:

  • TTL 减 1。
  • 首部字段发生变化。
  • 因此 IPv4 首部校验和必须更新。

如果发生分片,首部中的 Total Length、Flags、Fragment Offset 等字段也会变化,也需要重新计算。

为什么运输层和网络层都有校验和?

层次校验范围作用
IPv4 首部校验和只保护 IPv4 首部逐跳检测 IP 首部错误;TTL 等字段每跳变化
TCP/UDP 校验和覆盖运输层首部、数据和伪首部端到端检测运输层数据和关键 IP 地址信息错误

关键区别:

  • IPv4 checksum 是网络层、逐跳、只管 IP 首部。
  • TCP/UDP checksum 是运输层、端到端、覆盖应用数据。

IPv6 去掉了首部校验和,减少路由器处理负担,差错检测主要依靠链路层和运输层。


IP 分片:MTU 与重组

MTU

MTU(Maximum Transmission Unit)是链路层帧能承载的最大网络层数据报长度。

例如以太网常见 MTU 为 1500 字节。

若 IP 数据报长度大于下一条链路 MTU,且 DF 位未设置,则路由器可以分片。

IPv4 分片字段

  • Identification:同一个原始数据报的所有分片具有相同 ID。
  • MF(More Fragments):后面是否还有分片。
  • Fragment Offset:当前分片数据相对原始数据报数据部分的偏移,单位为 8 字节。

分片规则

假设:

  • 原始 IP 数据报总长度为 LL
  • IP 首部长度为 HH
  • 数据部分长度为 D=LHD=L-H
  • 下一链路 MTU 为 MM

每个分片最多可携带数据:

MHM - H

除最后一个分片外,每个分片的数据长度必须是 8 字节的整数倍。

因此非最后分片最大数据长度为:

MH8×8\left\lfloor \frac{M-H}{8}\right\rfloor \times 8

分片例题模板

例:IP 数据报 1020 字节,其中 IP 首部 20 字节,数据 1000 字节。链路 MTU = 500 字节。

每片最多总长度 500,首部 20,所以每片最多数据 480 字节。480 是 8 的倍数。

分片:

分片数据字节范围数据长度总长度OffsetMF
10–47948050001
2480–959480500601
3960–99940601200

Offset 计算:

第 1 片 offset = 0 / 8 = 0
第 2 片 offset = 480 / 8 = 60
第 3 片 offset = 960 / 8 = 120

因此最后一个分片 offset 为 120。

重组

IPv4 分片只在目的主机重组,中间路由器不负责重组。

原因:

  • 减少路由器状态。
  • 避免中间路由器缓存大量分片。
  • 保持网络核心简单。

IP 地址分配/寻址

IP 地址与接口

严格说,IP 地址分配给接口 interface,不是直接分配给主机或路由器整体。

  • 一台主机通常有一个或多个接口。
  • 一台路由器有多个接口。
  • 每个路由器接口通常连接不同子网,并拥有该子网中的一个 IP 地址。

你原文中的句子是正确的:

一台路由器有多个接口,每个接口可以接入不同子网,所以一台路由器通常同时连接多个子网。

子网 subnet

子网是指不经过路由器即可直接互达的一组接口。

判断子网:

  • 同一子网内接口具有相同网络前缀。
  • 不同子网之间需要路由器转发。

CIDR 表示法

CIDR 使用斜线表示网络前缀长度:

192.168.1.0/24

含义:前 24 bit 是网络前缀,后 8 bit 是主机号。

子网计算方法

给定 IP 地址和子网掩码:

  1. 网络地址:IP 与 mask 按位与。
  2. 广播地址:网络地址的主机位全置 1。
  3. 可用主机范围:网络地址 + 1 到 广播地址 - 1。
  4. 主机数:一般为 2主机位数22^{\text{主机位数}}-2

例题:128.36.199.3,掩码 255.255.240.0

掩码:

255.255.240.0 = /20

二进制对应:

IP:   128. 36.199.  3
      10000000.00100100.11000111.00000011
Mask: 255.255.240.  0
      11111111.11111111.11110000.00000000
AND:  128. 36.192.  0
      10000000.00100100.11000000.00000000

因此:

  • 网络地址:128.36.192.0/20
  • 广播地址:第三个字节主机低 4 位全 1,第四个字节全 1:128.36.207.255
  • 地址范围:128.36.192.0128.36.207.255
  • 可用主机范围:128.36.192.1128.36.207.254
  • 主机位数:3220=1232-20=12
  • 可用主机数:
2122=40942^{12}-2=4094

特殊 IP 地址与私有 IP 地址

私有 IPv4 地址

私有地址不能在公共互联网中全局路由,常配合 NAT 使用。

地址块范围说明
10.0.0.0/810.0.0.0 – 10.255.255.255私有地址
172.16.0.0/12172.16.0.0 – 172.31.255.255私有地址
192.168.0.0/16192.168.0.0 – 192.168.255.255私有地址

易错点:

  • 不是所有 172 开头都是私有地址,只有 172.16.0.0172.31.255.255
  • 不是所有 192 开头都是私有地址,只有 192.168.0.0/16

常见特殊地址

地址/地址块含义
0.0.0.0本主机未知地址;也可表示默认路由 0.0.0.0/0
255.255.255.255受限广播地址
127.0.0.0/8回环地址,常用 127.0.0.1
169.254.0.0/16链路本地地址,自动配置失败时常见
224.0.0.0/4IPv4 多播地址
100.64.0.0/10运营商级 NAT 共享地址空间
192.0.2.0/24文档示例地址 TEST-NET-1
198.51.100.0/24文档示例地址 TEST-NET-2
203.0.113.0/24文档示例地址 TEST-NET-3

路由聚合 route aggregation

路由聚合也称前缀聚合、CIDR 聚合。

基本思想

把多个连续的小地址块合并成一个较大的前缀通告,减少路由表项。

例:

200.23.16.0/24
200.23.17.0/24
...
200.23.31.0/24

可聚合为:

200.23.16.0/20

为什么能减少路由表

如果一个 ISP 拥有一段连续地址空间,它可以向外部只通告一个聚合前缀,而不是通告每个客户子网。

这样可降低全球 BGP 路由表规模。

最长前缀匹配与聚合例外

如果存在更具体的前缀,会优先匹配更具体路由。

例如:

200.23.16.0/20 -> ISP A
200.23.18.0/23 -> ISP B

目的地址属于 200.23.18.0/23 时,会选择 ISP B,因为 /23/20 更长。


DHCP:即插即用协议

DHCP(Dynamic Host Configuration Protocol)用于自动为主机分配网络配置。

DHCP 提供的信息

DHCP 不仅分配 IP 地址,还可提供:

  • 子网掩码。
  • 默认网关。
  • DNS 服务器地址。
  • 租约时间。

DHCP 四阶段:DORA

Discover -> Offer -> Request -> ACK
阶段发送方目的说明
DHCP Discover客户端广播客户端寻找 DHCP 服务器
DHCP Offer服务器广播或单播服务器提供 IP 地址等配置
DHCP Request客户端广播客户端请求使用某个地址
DHCP ACK服务器广播或单播服务器确认租约

源/目的 IP 与端口

首次获取地址时,客户端尚无 IP 地址,因此:

  • 客户端源 IP 常为 0.0.0.0
  • 目的 IP 常为 255.255.255.255
  • 客户端 UDP 端口 68。
  • 服务器 UDP 端口 67。

典型 DORA:

报文源 IP目的 IP源端口目的端口yiaddr
Discover0.0.0.0255.255.255.2556867
OfferDHCP server IP255.255.255.255 或客户端可接收地址6768服务器提供的 IP
Request0.0.0.0255.255.255.2556867请求使用的 IP
ACKDHCP server IP255.255.255.255 或单播6768确认分配的 IP

注意:续租阶段客户端已经有 IP 地址,可能使用单播与服务器通信。所以“整个过程中客户端源 IP 都是 0.0.0.0”只适合教材中首次获取地址的简化 DORA 场景,不适合所有 DHCP 运行阶段。

DHCP 是应用层协议吗?

是。DHCP 运行在 UDP 之上,从协议栈角度属于应用层协议。

但它的功能是给网络层配置 IP 地址、子网掩码、默认网关等参数,因此常放在网络层章节讨论。


NAT 与 NAT traversal problem

NAT 是什么

NAT(Network Address Translation)把内部私有地址转换为公网地址。

常见家庭网络:

内网主机 192.168.1.10:50000
    -> NAT 路由器公网地址 203.0.113.5:62000
        -> Internet server 93.184.216.34:80

NAT 维护转换表:

内网 IP:端口 <-> 公网 IP:端口

NAT 的优点

  • 缓解 IPv4 地址不足。
  • 内网地址可复用。
  • 更换 ISP 时内网地址不必改变。
  • 对外隐藏内部主机结构。

NAT 的问题

  • 破坏端到端原则。
  • 外部主机难以主动连接内网主机。
  • P2P、VoIP、在线游戏等需要 NAT 穿越。
  • 某些协议把 IP/端口写入应用层数据,NAT 仅改 IP/TCP/UDP 首部会导致不一致。

NAT traversal problem

NAT 穿越问题:NAT 后的主机没有公网可达地址,外部 peer 难以直接建立连接。

常见解决方式:

方法思想说明
静态端口映射手动配置公网端口转发到内网主机简单但需人工配置
UPnP / NAT-PMP / PCP内网主机请求 NAT 自动建立映射依赖路由器支持
STUN发现自己的公网映射地址常用于实时通信
TURN通过中继服务器转发数据可靠但增加时延和带宽成本
ICE综合 STUN/TURN,选择可用路径WebRTC 常用
UDP hole punching双方同时向对方公网映射发包打洞P2P 常见

ICMP

ICMP(Internet Control Message Protocol)用于网络层差错报告和诊断。

ICMP 的作用

ICMP 不用于传输应用数据,主要用于:

  • 差错报告。
  • 网络诊断。
  • 路径探测。

ICMP 报文封装在 IP 数据报中,但属于网络层辅助协议,不使用端口号。

常见 ICMP 报文类型

类型名称用途
0Echo Replyping 响应
3Destination Unreachable目的不可达
8Echo Requestping 请求
11Time ExceededTTL 归零,traceroute 常用
12Parameter ProblemIP 首部参数问题

ping 与 traceroute

ping

使用 ICMP Echo Request 和 Echo Reply 测试可达性和 RTT。

traceroute

利用 TTL:

  1. 发送 TTL=1 的探测包。
  2. 第一跳路由器把 TTL 减为 0,丢弃并返回 ICMP Time Exceeded。
  3. 发送 TTL=2,第二跳返回 ICMP Time Exceeded。
  4. 逐渐增加 TTL,得到路径上的路由器。

所以 traceroute 测到的 delay 是从本机到该路由器再返回本机的往返时间 RTT,不是单程时延。


IPv6

IPv6 与 IPv4 差异

项目IPv4IPv6
地址长度32 bit128 bit
首部长度20~60 字节固定 40 字节基本首部
首部校验和
分片路由器和主机都可分片路由器不分片,源主机负责分片
地址表示点分十进制冒号十六进制
TTL 字段TTLHop Limit
可选字段IPv4 optionsIPv6 extension headers
NAT 依赖常见理论上显著减少 NAT 需求

IPv6 首部

IPv6 基本首部固定 40 字节,主要字段:

字段作用
Version版本号 6
Traffic Class流量类别
Flow Label流标签
Payload Length负载长度
Next Header下一个首部类型,类似 IPv4 Protocol
Hop Limit跳数限制,类似 TTL
Source Address128 bit 源地址
Destination Address128 bit 目的地址

IPv6 改进点

  • 地址空间巨大。
  • 固定长度基本首部便于高速处理。
  • 去掉首部校验和,减少路由器每跳处理开销。
  • 路由器不再分片,简化网络核心。
  • 更好支持自动配置和扩展首部。

IPv4 到 IPv6 的两种过渡方法

双栈 dual stack

设备同时支持 IPv4 和 IPv6。

  • 与 IPv4 主机通信时使用 IPv4。
  • 与 IPv6 主机通信时使用 IPv6。

优点:兼容性好。

缺点:需要同时维护两套协议栈。

隧道 tunneling

把 IPv6 数据报封装在 IPv4 数据报中,通过 IPv4 网络传输。

IPv6 packet -> 封装进 IPv4 packet -> IPv4 网络 -> 解封装为 IPv6 packet

优点:可穿越尚未支持 IPv6 的 IPv4 网络。

缺点:增加封装开销,路径和排错更复杂。


路由算法

路由图解:LS、DV、毒性逆转、层次路由与路由协议

路由图解:LS、DV、毒性逆转、层次路由与路由协议

路由算法决定从源到目的的路径。

三种分类

按信息来源

类型说明代表
全局式 global每个路由器掌握完整网络拓扑和链路代价LS、Dijkstra
分散式 decentralized每个路由器只知道邻居和从邻居收到的信息DV、Bellman-Ford

按路径是否随负载变化

类型说明
静态路由 static路径变化慢,通常人工配置
动态路由 dynamic根据网络拓扑和链路代价自动更新

按是否考虑负载

类型说明
负载敏感 load-sensitive链路代价会随拥塞变化
负载不敏感 load-insensitive链路代价不显式反映当前拥塞

全局式路由算法 LS:链路状态算法

LS(Link State)算法的核心:每个节点掌握完整拓扑,然后独立运行 Dijkstra 算法计算最短路径。

LS 的工作过程

  1. 每个节点发现自己的邻居和链路代价。
  2. 通过链路状态广播,把本节点链路状态发给所有节点。
  3. 所有节点获得相同的网络拓扑信息。
  4. 每个节点以自己为源点运行 Dijkstra 算法。
  5. 得到最短路径树和转发表。

链路状态广播使所有节点最终拥有相同 LSDB(Link-State Database)。

每个链路状态分组通常包含:

  • 发送节点 ID。
  • 邻居列表。
  • 到邻居的链路代价。
  • 序号。
  • 老化时间。

序号和老化时间用于避免旧信息长期存在。


Dijkstra 算法详细介绍

符号

  • NN':已经确定最短路径的节点集合。
  • D(v)D(v):从源节点到 vv 的当前最小代价估计。
  • p(v)p(v):当前最短路径上 vv 的前驱节点。
  • c(u,v)c(u,v):节点 uuvv 的链路代价。

初始化

源节点为 uu

N' = {u}
对每个节点 v:
    若 v 与 u 相邻,则 D(v)=c(u,v), p(v)=u
    否则 D(v)=∞

迭代步骤

重复:

  1. 在不属于 NN' 的节点中,选择 D(w)D(w) 最小的节点 ww
  2. ww 加入 NN'
  3. 对每个不在 NN' 中且与 ww 相邻的节点 vv,更新:
D(v)=min(D(v),D(w)+c(w,v))D(v)=\min(D(v),D(w)+c(w,v))

如果更新成功,则:

p(v)=wp(v)=w

输出

最终 D(v)D(v) 是源节点到各节点的最短路径代价,p(v)p(v) 可回溯出最短路径树。

做题步骤模板

  1. 画表:列出 NN'D(v),p(v)D(v),p(v)
  2. 初始化源点邻居代价。
  3. 每轮选择当前 DD 最小且未确定的节点。
  4. 用新加入节点松弛其邻居。
  5. 重复直到所有节点确定。
  6. 根据前驱节点写出路径和下一跳。

分散式路由算法 DV:距离向量算法

DV(Distance Vector)基于 Bellman-Ford 方程。

Bellman-Ford 方程

节点 xx 到目的 yy 的最短路径代价:

dx(y)=minvneighbors(x){c(x,v)+dv(y)}d_x(y)=\min_{v \in neighbors(x)}\{c(x,v)+d_v(y)\}

含义:

xxyy,第一跳必须先到某个邻居 vv,总代价等于 xxvv 的代价加上 vvyy 的最短代价。选择最小者。

DV 算法过程

每个节点维护:

  • 自己到所有目的地的距离向量。
  • 从每个邻居收到的距离向量。
  • 到每个邻居的链路代价。

过程:

  1. 初始只知道到邻居的代价。
  2. 周期性或发生变化时,把自己的距离向量发给邻居。
  3. 收到邻居距离向量后,用 Bellman-Ford 方程更新自己的距离向量。
  4. 如果发生变化,再通知邻居。
  5. 最终收敛。

DV 做题模板

对于节点 xx,要计算到目的 yy 的新距离:

经邻居 A: c(x,A) + d_A(y)
经邻居 B: c(x,B) + d_B(y)
经邻居 C: c(x,C) + d_C(y)
取最小值

下一跳就是使表达式最小的邻居。


好消息传得快,坏消息传得慢

好消息传得快

如果某条链路代价降低或出现更短路径,邻居很快能用 Bellman-Ford 更新出更小值,并继续传播。

坏消息传得慢

如果某条链路代价升高或断开,节点可能错误地相信“邻居还有通往目的地的好路径”。

这会导致路由环路和 count-to-infinity(计数到无穷)问题。

例子

假设:

X -- Y -- Z

原来 Y 到 X 代价为 1,Z 通过 Y 到 X 代价为 2。

若 X-Y 断开,Y 可能听到 Z 说“我到 X 代价为 2”,于是 Y 误以为可以经 Z 到 X,更新为 3;Z 又经 Y 更新为 4,如此逐步增大。


Poisoned reverse 毒性逆转

基本思想

如果节点 ZZ 到目的 XX 的路径下一跳是 YY,那么 ZZ 在告诉 YY 自己到 XX 的距离时,故意说:

dZ(X)=d_Z(X)=\infty

这样 YY 就不会以为可以通过 ZZ 到达 XX

作用

  • 可消除两个节点之间的简单路由环路。
  • 缓解 count-to-infinity。

局限

毒性逆转不能完全解决三个及以上节点形成的复杂环路。


层次路由

互联网规模巨大,不可能让所有路由器运行一个全局路由算法。因此引入层次路由。

AS 自治系统

AS(Autonomous System)是由同一管理机构控制的一组路由器和网络。

层次路由结构

  • AS 内部:使用 IGP,如 OSPF、RIP。
  • AS 之间:使用 BGP。

优点

  • 降低路由表规模。
  • 隐藏 AS 内部拓扑。
  • 支持自治管理和策略控制。

IGP 与 BGP

OSPF

OSPF(Open Shortest Path First)是内部网关协议 IGP,基于链路状态算法。

特点:

  • 在单个 AS 内运行。
  • 使用链路状态广播。
  • 每个路由器维护 LSDB。
  • 使用 Dijkstra 算法计算最短路径树。
  • 支持层次化区域 area。
  • 直接封装在 IP 中,协议号 89。

OSPF 中的典型概念:

概念含义
LSALink-State Advertisement,链路状态通告
LSDBLink-State Database,链路状态数据库
Area区域,用于层次化和扩展性
Backbone Area骨干区域,Area 0

OSPF vs DV

OSPF 不是距离向量协议,而是链路状态协议。它依赖全网拓扑数据库和 Dijkstra 算法。


RIP

RIP(Routing Information Protocol)是内部网关协议,基于距离向量算法。

特点:

  • 使用跳数 hop count 作为路径代价。
  • 最大有效跳数为 15,16 表示不可达。
  • 周期性向邻居发送路由表。
  • 使用 UDP 520。
  • 简单,但收敛较慢,适合小规模网络。

RIP 的问题:

  • count-to-infinity。
  • 收敛慢。
  • 度量单一,只看跳数,不看带宽/时延。

BGP

BGP(Border Gateway Protocol)是 AS 之间的路由协议,属于外部网关协议 EGP。

特点:

  • 用于 AS 间路由。
  • 使用 TCP 179 建立 BGP 会话。
  • 不是简单最短路径协议,而是路径向量 path-vector 协议。
  • 路由选择受策略影响。
  • 通过 AS-PATH 防止环路。

BGP 通告的是网络前缀及其属性,例如:

  • AS-PATH:到达该前缀经过的 AS 序列。
  • NEXT-HOP:下一跳地址。
  • LOCAL-PREF:本地偏好。
  • MED:多出口鉴别器。

BGP 与 OSPF/RIP 比较

协议类型运行范围算法/思想典型用途
RIPIGPAS 内距离向量小型网络
OSPFIGPAS 内链路状态中大型企业/ISP 内部
BGPEGPAS 间路径向量 + 策略全球互联网路由

链路层

链路层图解:差错检测、MAC、ARP、以太网

链路层图解:差错检测、MAC、ARP、以太网

链路层提供的服务

链路层负责相邻节点之间的数据传输。

主要服务

服务说明
成帧 framing把网络层数据报封装成帧
链路接入 link access在共享介质上决定谁可以发送
可靠交付某些链路层协议提供本跳可靠传输,如 Wi-Fi
差错检测检测帧中比特错误,如 CRC
差错纠正某些协议可纠正错误
流量控制防止相邻节点发送过快
半双工/全双工控制协调发送和接收方式

链路层可靠性和 TCP 可靠性的区别

比较项链路层可靠交付TCP 可靠交付
范围相邻节点之间一跳端到端进程之间
目的处理单条链路错误处理端到端丢包、乱序、错误
是否一定存在不一定TCP 必须提供
典型场景无线链路常用Internet 端到端通信

错误检验 Error detection

差错检测用于发现帧在传输过程中是否发生比特错误。

发送方发送:

数据 D + 差错检测比特 EDC

接收方根据收到的数据和 EDC 判断是否出错。

注意:差错检测不是 100% 保证。强检测算法能降低漏检概率。


Parity checking 奇偶检验

一维奇偶检验

增加 1 bit,使整个比特串中 1 的个数满足某种奇偶性。

  • 偶校验:1 的个数为偶数。
  • 奇校验:1 的个数为奇数。

例:数据 1011001 中有 4 个 1。

  • 偶校验位为 0。
  • 奇校验位为 1。

能检测什么错误

一维奇偶检验:

  • 能检测奇数个比特错误。
  • 不能检测偶数个比特错误。

二维奇偶检验

把数据排成矩阵,对每行、每列都加奇偶校验位。

优点:

  • 可检测更多错误。
  • 对单比特错误可以定位并纠正。

CRC 循环冗余检测

CRC(Cyclic Redundancy Check)把比特串看作 GF(2) 上的多项式,使用模 2 除法计算冗余位。

基本符号

  • DD:待传输数据,比特串。
  • GG:生成多项式,对应比特串。
  • rr:CRC 冗余位长度,等于 GG 的阶数,即 GG 比特长度减 1。
  • RR:CRC 冗余位。

发送方构造:

T=D2r+RT = D \cdot 2^r + R

要求:

TmodG=0T \mod G = 0

也就是发送出去的比特串能被生成多项式整除。

已知 D 和 G,计算 R

步骤:

  1. GG 长度为 r+1r+1,因此冗余位长度为 rr
  2. DD 后补 rr 个 0,得到 D2rD\cdot 2^r
  3. 用模 2 除法除以 GG
  4. 得到余数 RR
  5. 若余数不足 rr 位,左侧补 0。
  6. 发送 D+RD+R

模 2 除法规则

模 2 运算中:

  • 加法等于异或 XOR。
  • 减法也等于异或 XOR。
  • 不考虑借位和进位。
1 - 1 = 0
1 - 0 = 1
0 - 1 = 1   这里不是普通减法,而是 XOR
0 - 0 = 0

CRC 例题模板

题目:D=101110D=101110G=1001G=1001

  1. GG 长度 4,所以 r=3r=3
  2. 在 D 后补 3 个 0:
101110000
  1. 1001 做模 2 除法,得到 3 位余数 RR
  2. 发送比特串:
101110 + R

答题时要把除法过程写出来。若只问方法,写清“补 0、模 2 除、取余数、拼接发送”。

CRC 的检测能力

取决于生成多项式 G。合适的 G 可以检测:

  • 所有单比特错误。
  • 许多双比特错误。
  • 所有长度小于等于 r 的突发错误。
  • 绝大多数更长突发错误。

多路访问链路和协议 MAC

多路访问问题:多个节点共享同一个广播信道时,如何协调发送,避免或处理碰撞。

MAC 协议三大类

类型思想代表协议
信道划分协议把信道资源切分给节点TDMA、FDMA、CDMA
随机接入协议节点随机发送,发生冲突后恢复ALOHA、CSMA、CSMA/CD、CSMA/CA
轮流协议节点按某种顺序轮流发送polling、token passing

信道划分协议

TDMA

时间划分为帧,每帧划分为多个时隙。每个节点使用固定时隙。

优点:无碰撞。

缺点:节点无数据时,其时隙浪费。

FDMA

频带划分为多个频段,每个节点分配一个频段。

优点:无碰撞。

缺点:节点空闲时频段浪费。

CDMA

不同节点使用不同编码同时发送,接收方通过编码分离信号。

常见于无线通信场景。


ALOHA

纯 ALOHA

节点有数据就立即发送。

若发生碰撞,等待随机时间后重传。

最大效率约为:

12e0.18\frac{1}{2e} \approx 0.18

时隙 ALOHA

时间划分为等长时隙,节点只能在时隙开始发送。

要求:

  • 所有帧长度相同。
  • 节点时钟同步。

最大效率约为:

1e0.37\frac{1}{e} \approx 0.37

时隙 ALOHA 比纯 ALOHA 效率高,因为碰撞危险区间减半。


CSMA

CSMA(Carrier Sense Multiple Access,载波侦听多路访问)思想:发送前先监听信道。

基本原则

  • 信道空闲:发送。
  • 信道忙:推迟发送。

为什么仍会碰撞

由于传播时延,一个节点可能还没听到另一个节点已经开始发送,于是误以为信道空闲并发送,导致碰撞。

传播时延对 CSMA 的影响

传播时延越大,节点越难及时感知其他节点发送,碰撞概率越高。


CSMA/CD

CSMA/CD(Carrier Sense Multiple Access with Collision Detection)在发送时继续监听信道,检测碰撞。

工作过程

  1. 监听信道。
  2. 若空闲,开始发送。
  3. 发送过程中继续检测碰撞。
  4. 若检测到碰撞,立即停止发送,并发送 jam signal。
  5. 执行指数退避,等待随机时间后重传。

二进制指数退避

mm 次碰撞后,从以下集合随机选择 KK

K{0,1,2,,2m1}K \in \{0,1,2,\dots,2^m-1\}

等待时间:

K×512 bit timesK \times 512 \text{ bit times}

实际以太网中 mm 通常有上限。

以太网最小帧长为什么是 64 字节

为了保证发送方在发送完帧之前能检测到最远端可能发生的碰撞。

若帧太短,发送方已经发送完成并认为成功,但碰撞信号还没传播回来。

因此传统共享式以太网规定最小帧长 64 字节。

现代交换式以太网

现代以太网大多使用交换机和全双工链路,不再共享总线,因此基本不需要 CSMA/CD。

但考试中仍常考 CSMA/CD 原理。


轮询协议

Polling

主节点依次询问每个从节点是否有数据要发送。

优点:

  • 无碰撞。
  • 可控制发送顺序。

缺点:

  • 主节点故障会影响全网。
  • 轮询开销和等待时延。

Token passing

令牌在节点之间传递,只有持有令牌的节点可以发送。

优点:

  • 无碰撞。
  • 公平性较好。

缺点:

  • 令牌丢失或节点故障需要恢复机制。
  • 低负载时令牌传递有额外开销。

局域网 LANs

ARP

ARP(Address Resolution Protocol)用于在同一局域网内将 IP 地址解析为 MAC 地址。

ARP 的作用

发送 IP 数据报时,主机需要知道下一跳接口的 MAC 地址。

  • 若目的 IP 与自己在同一子网:解析目的主机 IP 的 MAC。
  • 若目的 IP 不在同一子网:解析默认网关 IP 的 MAC。

ARP 工作过程

假设主机 A 想知道主机 B 的 MAC 地址。

  1. A 发送 ARP Request,目的 MAC 为广播地址:
ff:ff:ff:ff:ff:ff
  1. 同一局域网所有主机都收到请求。
  2. 只有 IP 地址匹配的 B 回复 ARP Reply。
  3. ARP Reply 通常单播给 A。
  4. A 将映射写入 ARP cache。

ARP 报文特点

  • ARP 不使用 IP 数据报封装。
  • ARP 直接封装在链路层帧中。
  • ARP 不使用端口号。
  • ARP 请求广播,ARP 响应单播。

ARP 易错点

如果目的主机不在同一子网,源主机不会 ARP 查询远程目的主机的 MAC,而是查询默认网关的 MAC。


以太网

以太网帧格式

Ethernet II 帧:

+-------------------+----------------+------------+-----------+-----+
| Destination MAC   | Source MAC     | Type       | Data      | FCS |
| 6 bytes           | 6 bytes        | 2 bytes    | 46-1500   | 4   |
+-------------------+----------------+------------+-----------+-----+

说明:

  • 目的 MAC:接收方网卡地址。
  • 源 MAC:发送方网卡地址。
  • Type:上层协议类型,如 IPv4、ARP、IPv6。
  • Data:承载的网络层数据。
  • FCS:帧检验序列,通常使用 CRC。

MAC 地址

MAC 地址通常为 48 bit,写作 6 个十六进制字节:

00:1A:2B:3C:4D:5E

特殊地址:

ff:ff:ff:ff:ff:ff

表示以太网广播地址。

以太网服务特点

  • 无连接。
  • 不可靠交付:接收方不发送链路层 ACK。
  • 使用 CRC 检测错误,错误帧通常丢弃。

交换机 self-learning

以太网交换机通过学习源 MAC 地址建立交换表。

交换表项:

MAC 地址 -> 交换机端口 -> 时间戳

转发规则:

情况行为
目的 MAC 在表中转发到对应端口
目的 MAC 不在表中泛洪到除入端口外所有端口
目的 MAC 就在入端口丢弃,不转发
广播帧泛洪

交换机 vs 路由器

比较项交换机路由器
层次链路层网络层
使用地址MAC 地址IP 地址
转发表依据MAC 转发表路由表/转发表
分隔广播域默认不分隔分隔
典型功能局域网内部转发子网之间转发

高频综合表

常见协议默认端口号

协议TCPUDP端口
FTP data20
FTP control21
SSH22
Telnet23
SMTP25
DNS53
DHCP server67
DHCP client68
HTTP80
POP3110
NTP123
IMAP143
SNMP161/162
BGP179
HTTPS443
RIP520
SMTP Submission587
IMAPS993
POP3S995

常见协议号、类型与地址

项目说明
ICMP over IPv4IP protocol 1ping/traceroute 相关
TCPIP protocol 6可靠字节流
UDPIP protocol 17无连接数据报
OSPFIP protocol 89链路状态路由协议
IPv4 EtherType0x0800以太网帧 Type 字段
ARP EtherType0x0806以太网帧 Type 字段
IPv6 EtherType0x86DD以太网帧 Type 字段
Ethernet broadcastff:ff:ff:ff:ff:ffMAC 广播地址
IPv4 limited broadcast255.255.255.255受限广播
Loopback127.0.0.0/8本机回环

常用公式

主题公式含义
传输时延LR\frac{L}{R}L bit 分组推入 R bit/s 链路
传播时延ds\frac{d}{s}距离 d,传播速度 s
节点总时延dproc+dqueue+dtrans+dpropd_{proc}+d_{queue}+d_{trans}+d_{prop}四类时延之和
交通强度LaR\frac{La}{R}接近 1 时排队时延剧增
C/S 分发下界max{NFus,Fdmin}\max\left\{\frac{NF}{u_s},\frac{F}{d_{min}}\right\}文件分发
P2P 分发下界max{Fus,Fdmin,NFus+ui}\max\left\{\frac{F}{u_s},\frac{F}{d_{min}},\frac{NF}{u_s+\sum u_i}\right\}文件分发
UDP/TCP checksum16 bit 反码和再取反端回进位
TCP 估计 RTT(1α)EstimatedRTT+αSampleRTT(1-\alpha)\text{EstimatedRTT}+\alpha\text{SampleRTT}α 常取 0.125
TCP 超时EstimatedRTT+4DevRTT\text{EstimatedRTT}+4\text{DevRTT}自适应超时
接收窗口RcvBuffer(LastByteRcvdLastByteRead)\text{RcvBuffer}-(\text{LastByteRcvd}-\text{LastByteRead})TCP 流量控制
实际发送窗口min(cwnd,rwnd)\min(\text{cwnd},\text{rwnd})拥塞+流量控制
子网主机数232prefix22^{32-\text{prefix}}-2一般 IPv4 子网
分片 offset数据偏移字节数8\frac{\text{数据偏移字节数}}{8}IP 片偏移单位 8 字节
CRC(D2rR)modG=0(D\cdot 2^r \oplus R) \bmod G = 0模 2 除法
Slotted ALOHA 最大效率1e0.37\frac{1}{e}\approx 0.37随机接入
Pure ALOHA 最大效率12e0.18\frac{1}{2e}\approx 0.18随机接入

易错点集中整理

  1. DLS 应为 DSL。 DSL 是数字用户线。
  2. segment datagram 翻译: TCP 常说 segment(报文段),UDP 也常称 UDP segment 或 UDP datagram;IP 层称 datagram(数据报)。
  3. 传输时延不是传播时延。 LR\frac{L}{R} 对应传输时延,ds\frac{d}{s} 对应传播时延。
  4. HTTP 无状态不等于网站不能登录。 登录状态由 Cookie/Session/Token 等在 HTTP 之上实现。
  5. FTP 是 out-of-band。 控制连接和数据连接分离。
  6. UDP socket 分解看目的 IP+目的端口。 不同源 IP/端口发来的 UDP 数据报可进入同一个 UDP socket。
  7. TCP socket 用四元组区分连接。 同一服务器端口可服务多个客户端连接。
  8. UDP checksum 只检测,不纠错。 UDP 不负责重传。
  9. SR 窗口不能超过序号空间一半。 否则新旧分组会混淆。
  10. MSS 不包括 TCP/IP 首部。 以太网 MTU 1500 下常见 MSS 1460。
  11. TCP 的 +3MSS+3\text{MSS} 加在 cwnd,不是 ssthresh。 Reno 快速恢复:ssthresh=cwnd2\text{ssthresh}=\frac{\text{cwnd}}{2}cwnd=ssthresh+3MSS\text{cwnd}=\text{ssthresh}+3\text{MSS}
  12. TCP 连接不等于网络层虚电路。 Internet 路由器不为 TCP 维护端到端连接状态。
  13. 最长前缀匹配选择最具体路由。 不是选择第一个匹配项。
  14. IPv4 分片 offset 单位是 8 字节。 最后一片数据长度可以不是 8 的倍数。
  15. IP 地址属于接口。 路由器多个接口通常在多个不同子网。
  16. 不是所有 172 地址都是私有地址。 私有范围是 172.16.0.0/12
  17. DHCP 使用 UDP 67/68。 服务器 67,客户端 68。
  18. ICMP 没有端口号。 ICMP 直接封装在 IP 中。
  19. IPv6 基本首部固定 40 字节。 IPv6 路由器不分片。
  20. OSPF 是链路状态协议。 RIP 是距离向量协议;BGP 是路径向量协议。
  21. ARP 解析的是下一跳 MAC。 跨子网时 ARP 默认网关 MAC,不是远程主机 MAC。
  22. 现代交换式以太网通常不再使用 CSMA/CD。 但共享式以太网原理仍会考。

参考资料(用于核对标准细节)

评论