reference:《计算机网络-自顶向下的方法》
目录
一、计算机网络概述
1.1 因特网概述
概念解释
因特网(Internet):全球最大的互联网络,连接了世界各地数以亿计的计算设备。
网络核心:由大量网络和连接这些网络的路由器组成的网状结构。
网络边缘:端系统(主机)及其应用程序。
基本原理
因特网采用分组交换技术,将数据分割成小的数据包(packet),每个数据包独立传输,在目的地重新组装。
三种交换方式对比:
| 交换方式 | 特点 | 优缺点 |
|---|---|---|
| 电路交换 | 建立专用通信路径 | 资源独占,适合实时通信 |
| 分组交换 | 存储转发,统计复用 | 资源共享,适合突发数据 |
| 报文交换 | 整体传输 | 延迟大,已较少使用 |
实际应用
- Web 浏览:HTTP 协议传输网页内容
- 电子邮件:SMTP 协议发送邮件
- 视频流媒体:实时传输音视频数据
- 在线游戏:低延迟数据传输
1.2 网络核心
概念解释
分组交换(Packet Switching):将报文分割成较小的数据包,每个分组独立传输。
存储转发传输:路由器在转发分组前必须接收完整个分组。
基本原理
分组交换的关键机制:
- 统计多路复用:多个通信流共享同一链路,按需分配带宽
- 排队延迟:分组在路由器缓冲区等待转发
- 丢包:缓冲区满时丢弃分组
延迟组成:
总延迟 = 处理延迟 + 排队延迟 + 传输延迟 + 传播延迟
d_nodal = d_proc + d_queue + d_trans + d_prop
- 处理延迟:检查分组首部、确定转发方向
- 排队延迟:在输出链路队列中等待
- 传输延迟:将分组推送到链路(L/R,L 为分组长度,R 为链路带宽)
- 传播延迟:信号在链路上传播(d/s,d 为距离,s 为传播速度)
实际应用
- CDN(内容分发网络):利用分组交换就近提供服务
- 负载均衡:通过分组调度优化网络性能
- 流量工程:优化网络路径选择
1.3 协议分层模型
概念解释
协议(Protocol):定义通信实体之间交换报文的格式、顺序、动作的规则。
分层架构:将复杂的网络功能分解为多个层次,每层提供特定服务。
基本原理
OSI 七层模型 vs TCP/IP 四层模型:
| OSI 七层模型 | TCP/IP 四层模型 | 功能 |
|---|---|---|
| 应用层 | 应用层 | 网络应用协议 |
| 表示层 | 应用层 | 数据格式转换 |
| 会话层 | 应用层 | 会话管理 |
| 传输层 | 传输层 | 端到端传输 |
| 网络层 | 网络层 | 路由选择 |
| 数据链路层 | 链路层 | 链路传输 |
| 物理层 | 物理层 | 比特传输 |
封装过程:
应用层报文
↓ 添加 TCP 首部
传输层报文段(Segment)
↓ 添加 IP 首部
网络层数据报(Datagram)
↓ 添加链路层首部
链路层帧(Frame)
↓ 物理传输
比特流
实际应用
- 网络故障排查:逐层分析定位问题
- 协议开发:各层独立设计和实现
- 网络设备设计:路由器工作在网络层,交换机工作在链路层
二、应用层
2.1 网络应用原理
概念解释
客户-服务器体系结构(Client-Server Architecture):
- 服务器:持续运行,提供服务的端系统
- 客户:发起通信,请求服务的端系统
对等(P2P)体系结构:
- 无需专用服务器
- 每个节点既是客户又是服务器
- 自扩展性强
基本原理
应用层协议定义内容:
- 报文类型:请求报文、响应报文
- 报文语法:字段及其格式
- 字段语义:字段含义
- 处理规则:发送和接收报文的动作
应用需要传输层提供的服务:
| 服务特性 | 说明 | TCP | UDP |
|---|---|---|---|
| 可靠数据传输 | 数据无丢失、无差错 | ✓ | ✗ |
| 吞吐量 | 单位时间传输数据量 | - | - |
| 定时 | 延迟保证 | - | - |
| 安全性 | 数据加密、认证 | ✓(SSL/TLS) | ✗ |
实际应用
- Web 浏览:客户-服务器模式
- BitTorrent:P2P 文件共享
- 视频会议:需要低延迟和足够吞吐量
- 在线游戏:实时性要求高,常用 UDP
2.2 Web 与 HTTP
概念解释
HTTP(HyperText Transfer Protocol):Web 应用的传输协议,定义了浏览器与服务器之间的通信规则。
URL(Uniform Resource Locator):统一资源定位符,标识 Web 资源的位置。
http://www.example.com:80/path/to/resource?query=value#fragment
↓ ↓ ↓ ↓ ↓
协议 主机名 端口 路径 查询参数
基本原理
HTTP 连接类型:
-
非持久连接(HTTP/1.0):
- 每个 TCP 连接只传输一个对象
- 每个对象需要 2 个 RTT(Round-Trip Time)
- 并行 TCP 连接可提高性能
-
持久连接(HTTP/1.1):
- 一个 TCP 连接可传输多个对象
- 默认开启持久连接
- 流水线技术:无需等待响应即可发送下一个请求
HTTP 报文格式:
请求报文:
GET /index.html HTTP/1.1 # 请求行:方法 URL 版本
Host: www.example.com # 首部行
Connection: close
User-agent: Mozilla/5.0
Accept-language: zh-CN
# 空行
[请求体] # 实体体(可选)响应报文:
HTTP/1.1 200 OK # 状态行:版本 状态码 短语
Connection: close # 首部行
Date: Tue, 09 Aug 2024 15:00:00 GMT
Server: Apache/2.4.1
Content-Length: 128
Content-Type: text/html
# 空行
<html>...</html> # 实体体常见状态码:
| 状态码 | 类别 | 示例 |
|---|---|---|
| 1xx | 信息性 | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created |
| 3xx | 重定向 | 301 Moved Permanently, 304 Not Modified |
| 4xx | 客户端错误 | 400 Bad Request, 404 Not Found |
| 5xx | 服务器错误 | 500 Internal Server Error, 503 Service Unavailable |
Cookie 技术:
HTTP 请求 → 服务器 → Set-Cookie 首部 → 浏览器存储 Cookie
下次请求 → 浏览器 → Cookie 首部 → 服务器识别用户
Web 缓存(代理服务器):
- 浏览器向代理服务器发送请求
- 代理检查是否有缓存
- 若有且未过期,直接返回
- 若无或已过期,向源服务器请求并缓存
实际应用
-
RESTful API:基于 HTTP 方法的资源操作
- GET:获取资源
- POST:创建资源
- PUT:更新资源
- DELETE:删除资源
-
HTTPS:HTTP + SSL/TLS 加密
- 数据加密传输
- 服务器身份认证
- 数据完整性保护
-
HTTP/2:
- 多路复用:单连接并行传输
- 头部压缩:减少开销
- 服务器推送:主动发送资源
2.3 电子邮件
概念解释
电子邮件系统组成:
- 用户代理(User Agent):邮件客户端软件
- 邮件服务器:存储和转发邮件
- SMTP(Simple Mail Transfer Protocol):邮件传输协议
基本原理
邮件发送流程:
发送方用户代理 → 发送方邮件服务器 → 接收方邮件服务器 → 接收方用户代理
↓ ↓ ↓
SMTP SMTP POP3/IMAP
SMTP 协议特点:
- 使用 TCP 可靠传输,端口 25
- 直接传输:发送服务器直接连接接收服务器
- 三阶段:握手、报文传输、关闭
- 使用持久连接
SMTP 命令示例:
HELO client.example.com # 标识发送方
MAIL FROM: <sender@example.com> # 发件人
RCPT TO: <receiver@example.com> # 收件人
DATA # 开始邮件内容
Subject: Test Email
This is a test email.
. # 结束邮件内容
QUIT # 关闭连接
邮件访问协议:
| 协议 | 端口 | 特点 |
|---|---|---|
| POP3 | 110 | 下载并删除(或保留),离线访问 |
| IMAP | 143 | 服务器端管理,多设备同步 |
| HTTP | 80/443 | Web 邮件(如 Gmail) |
实际应用
- 企业邮件系统:Exchange、Postfix
- 邮件安全:
- SPF(Sender Policy Framework):防止伪造发件人
- DKIM(DomainKeys Identified Mail):邮件签名验证
- DMARC:结合 SPF 和 DKIM 的策略框架
2.4 DNS 域名系统
概念解释
DNS(Domain Name System):将域名解析为 IP 地址的分布式数据库系统。
域名结构:层次化命名,从右到左逐级细化
www.example.com.
↓ ↓ ↓
三级 二级 顶级 根(隐含)
基本原理
DNS 服务器层次结构:
- 根 DNS 服务器:返回顶级域名服务器地址
- 顶级域名服务器(TLD):管理 .com、.org、.net 等
- 权威 DNS 服务器:提供域名到 IP 的最终映射
- 本地 DNS 服务器:缓存和代理查询
DNS 解析过程:
迭代查询:
主机 → 本地 DNS 服务器 → 根服务器 → TLD 服务器 → 权威服务器
↓
返回 IP 地址
递归查询:
主机 → 本地 DNS 服务器(负责所有查询)→ 最终返回 IP 地址
DNS 记录类型:
| 类型 | 作用 | 示例 |
|---|---|---|
| A | 域名到 IPv4 地址 | example.com. A 93.184.216.34 |
| AAAA | 域名到 IPv6 地址 | example.com. AAAA 2606:2800:220:1:248:1893:25c8:1946 |
| CNAME | 域名别名 | www.example.com. CNAME example.com. |
| MX | 邮件服务器 | example.com. MX 10 mail.example.com. |
| NS | 权威域名服务器 | example.com. NS ns1.example.com. |
| TXT | 文本记录 | 用于 SPF、DKIM 等 |
DNS 缓存:
- 本地 DNS 服务器缓存查询结果
- 减少根服务器和 TLD 服务器负载
- 缓存有效期由 TTL(Time To Live)控制
实际应用
- 负载均衡:轮询 DNS,返回多个 IP 地址
- CDN 加速:根据地理位置返回最近服务器 IP
- 故障转移:监控服务器状态,动态更新 DNS 记录
- 安全防护:
- DNSSEC:DNS 安全扩展,防止 DNS 欺骗
- DNS over HTTPS(DoH):加密 DNS 查询
2.5 P2P 应用
概念解释
P2P(Peer-to-Peer):对等网络,每个节点既是客户又是服务器。
基本原理
P2P 文件分发:
- BitTorrent 协议:
- 文件分为多个块(chunk,通常 256KB)
- 节点互相交换块
- 稀缺优先策略:优先下载最稀缺的块
- 激励机制:上传速度快的节点获得更好的下载速度
分布式哈希表(DHT):
- 环形标识符空间
- 每个节点负责一部分键值对
- 查找复杂度 O(log N)
实际应用
- 文件共享:BitTorrent、迅雷
- 区块链:比特币、以太坊
- 实时通信:WebRTC(P2P 视频通话)
三、传输层
3.1 传输层服务模型
概念解释
传输层:为应用层提供端到端的通信服务,运行在端系统上。
多路复用与多路分解:
- 多路复用:多个应用进程使用同一个传输层协议传输数据
- 多路分解:将传输层报文段中的数据交付给正确的应用进程
基本原理
端口(Port):
- 16 位端口号(0-65535)
- 0-1023:知名端口(Well-Known Ports)
- 1024-49151:注册端口
- 49152-65535:动态/私有端口
套接字(Socket):
套接字 = (IP 地址, 端口号)
TCP 套接字 = (源 IP, 源端口, 目的 IP, 目的端口)
UDP 套接字 = (目的 IP, 目的端口)
常见应用层协议端口:
| 协议 | 端口 | 传输层协议 |
|---|---|---|
| HTTP | 80 | TCP |
| HTTPS | 443 | TCP |
| FTP | 20/21 | TCP |
| SMTP | 25 | TCP |
| POP3 | 110 | TCP |
| DNS | 53 | UDP/TCP |
| SSH | 22 | TCP |
实际应用
- 网络编程:Socket API 开发网络应用
- 端口扫描:安全检测和渗透测试
- 防火墙配置:基于端口的访问控制
3.2 UDP 协议
概念解释
UDP(User Datagram Protocol):用户数据报协议,提供无连接、不可靠的传输服务。
基本原理
UDP 特点:
- 无连接:无需建立连接,直接发送
- 无连接状态:服务器可同时服务大量客户
- 分组开销小:首部仅 8 字节
- 应用层控制:开发者可精确控制发送时机
UDP 首部格式(8 字节):
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口号 | 目的端口号 | 0-1 字节
+--------+--------+--------+--------+
| 长度 | 校验和 | 2-3 字节
+--------+--------+--------+--------+
| 用户数据(应用层数据) |
+-----------------------------------+
- 源端口:发送方端口号(可选)
- 目的端口:接收方端口号
- 长度:UDP 数据报总长度(首部 + 数据)
- 校验和:检测传输错误
UDP 校验和计算:
- 添加伪首部(源 IP、目的 IP、协议类型、UDP 长度)
- 将数据视为 16 位整数序列
- 计算和的反码作为校验和
- 接收方重新计算,结果应为全 1
实际应用
适用场景:
- DNS 查询:简单请求-响应,UDP 更高效
- 实时音视频:容忍少量丢包,追求低延迟
- 在线游戏:实时性优先于可靠性
- SNMP:网络管理,简单高效
可靠性增强:
应用层可实现:
- ACK 确认机制
- 超时重传
- 序号和去重
3.3 可靠数据传输原理
概念解释
可靠数据传输(Reliable Data Transfer, RDT):确保数据无差错、无丢失、按序交付。
基本原理
RDT 协议演进:
RDT 1.0:完全可靠信道
- 假设信道完全可靠
- 无需任何控制机制
RDT 2.0:有比特差错信道
- **ARQ(Automatic Repeat reQuest)**协议
- 停等协议(Stop-and-Wait):
- 发送方发送数据,等待 ACK
- 接收方检测差错,发送 NAK
- 发送方收到 NAK,重传数据
发送方 接收方
|--- 数据分组 ------------>|
| | 检查差错
|<--- ACK/NAK -------------|
| 重传(若 NAK) |
RDT 2.1:处理 ACK/NAK 差错
- 添加序号(Sequence Number)
- 区分新分组和重传分组
- 发送方和接收方状态机
RDT 2.2:无 NAK 协议
- 接收方发送对上一个正确分组的 ACK(否定确认)
- 发送方收到重复 ACK,重传当前分组
RDT 3.0:处理丢包
- 添加超时重传机制
- 发送方启动定时器,超时未收到 ACK 则重传
发送方 接收方
|--- 分组 0 -------------->|
| 启动定时器 |
| | 收到,发送 ACK 0
|<--- ACK 0 ---------------|
| 停止定时器 |
|--- 分组 1 -------------->|
| 启动定时器 |
| (超时,未收到 ACK) |
|--- 分组 1(重传)-------->|
流水线技术:
停等协议效率低,流水线技术允许发送多个未确认分组:
-
回退 N 步(Go-Back-N, GBN):
- 发送方维护窗口大小 N
- 接收方只按序接收,丢弃失序分组
- 超时后重传所有已发送未确认分组
-
选择重传(Selective Repeat, SR):
- 发送方和接收方各维护窗口
- 接收方缓存失序分组
- 只重传丢失的分组
GBN 示例(窗口大小 N=4):
发送方: [0, 1, 2, 3] 已发送,等待 ACK
若分组 1 丢失,接收方丢弃 2, 3
超时后重传 1, 2, 3
SR 示例(窗口大小 N=4):
发送方: [0, 1, 2, 3] 已发送
若分组 1 丢失,接收方缓存 2, 3
只重传分组 1
实际应用
- TCP 可靠传输:基于流水线和选择重传思想
- 无线网络:链路层 ARQ 机制
- 卫星通信:长延迟环境下的可靠传输
3.4 TCP 协议
概念解释
TCP(Transmission Control Protocol):传输控制协议,提供面向连接、可靠的字节流传输服务。
基本原理
TCP 特点:
- 面向连接:传输前需建立连接
- 可靠传输:无差错、无丢失、无重复、按序
- 全双工:双向同时传输
- 点对点:一对一通信
- 字节流:无消息边界
TCP 首部格式(20 字节固定 + 选项):
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口号 | 目的端口号 | 0-1 字节
+--------+--------+--------+--------+
| 序号(Sequence Number) | 2-5 字节
+--------+--------+--------+--------+
| 确认号(ACK Number) | 6-9 字节
+--------+--------+--------+--------+
|首部长度|保留|U|A|P|R|S|F| 窗口大小 |
| (4位) | 6位|G|C|S|S|Y|I| |
+--------+--------+--------+--------+
| 校验和 | 紧急指针 | 12-15 字节
+--------+--------+--------+--------+
| 选项(可选) |
+-----------------------------------+
关键字段:
- 序号(Sequence Number):数据字节流的字节序号
- 确认号(ACK Number):期望收到的下一个字节序号
- 标志位:
- SYN:同步,建立连接
- ACK:确认
- FIN:结束,关闭连接
- RST:重置连接
- PSH:推送,立即交付应用层
- URG:紧急指针有效
- 窗口大小:接收窗口,流量控制
TCP 连接管理:
三次握手(建立连接):
客户端 服务器
|--- SYN, seq=x -------------->| 1. 客户端请求建立连接
| | SYN_SENT 状态
|<-- SYN, ACK, seq=y, ack=x+1 -| 2. 服务器同意建立连接
| | SYN_RCVD 状态
|--- ACK, seq=x+1, ack=y+1 --->| 3. 客户端确认
| | ESTABLISHED 状态
四次挥手(关闭连接):
主动关闭方 被动关闭方
|--- FIN, seq=u -------------->| 1. 请求关闭
| | FIN_WAIT_1 状态
|<-- ACK, ack=u+1 -------------| 2. 确认关闭请求
| | CLOSE_WAIT 状态
| | FIN_WAIT_2 状态
|<-- FIN, seq=v ---------------| 3. 请求关闭
| | LAST_ACK 状态
|--- ACK, ack=v+1 ------------>| 4. 确认关闭
| | TIME_WAIT 状态(2MSL)
| | CLOSED 状态
为什么需要 TIME_WAIT?
- 确保最后的 ACK 到达对方
- 等待旧连接的重复分组在网络中消失
TCP 可靠传输机制:
-
序号和确认:
- 每个字节有序号
- 累积确认:确认号表示期望收到的下一个字节
-
超时重传:
- 自适应超时时间:RTT 估计
TimeoutInterval = EstimatedRTT + 4 * DevRTTEstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT
-
快速重传:
- 收到 3 个重复 ACK,立即重传
- 无需等待超时
发送方 接收方
|--- 分组 1 -------------->|
|--- 分组 2 -------------->| 丢失
|--- 分组 3 -------------->|
|<--- ACK 1 ---------------| 期望收到 2
|--- 分组 4 -------------->|
|<--- ACK 1 ---------------| 重复 ACK(收到 3)
|--- 分组 5 -------------->|
|<--- ACK 1 ---------------| 重复 ACK(收到 4)
| | 收到 3 个重复 ACK
|--- 分组 2(重传)-------->| 快速重传
流量控制:
- 接收方在 ACK 中通告窗口大小
- 发送方维护发送窗口:
LastByteSent - LastByteAcked <= rwnd - 防止发送方淹没接收方
拥塞控制:
TCP 发送方维护拥塞窗口(cwnd),动态调整发送速率。
四种算法:
-
慢启动(Slow Start):
- 初始 cwnd = 1 MSS
- 每个 RTT cwnd 加倍(指数增长)
- 达到慢启动阈值 ssthresh 后转为拥塞避免
-
拥塞避免(Congestion Avoidance):
- 每个 RTT cwnd 增加 1 MSS(线性增长)
- 检测到拥塞后:
- 超时:ssthresh = cwnd/2,cwnd = 1,重新慢启动
- 3 个重复 ACK:ssthresh = cwnd/2,cwnd = ssthresh + 3,快速恢复
-
快速重传(Fast Retransmit):
- 收到 3 个重复 ACK,立即重传
-
快速恢复(Fast Recovery):
- cwnd = ssthresh + 3
- 每收到重复 ACK,cwnd 增加 1
- 收到新 ACK,cwnd = ssthresh,进入拥塞避免
cwnd
^
| 慢启动 拥塞避免
| /------/-------------
| / /
| / / 快速恢复
| / / /----\
| / / / \
| / / / \
|----/------/--/----------\----> 时间
超时重传 3个重复ACK
实际应用
- Web 浏览:HTTP/1.1 持久连接,TCP 优化
- 文件传输:FTP、SFTP 可靠传输
- 数据库连接:MySQL、PostgreSQL 客户端连接
- TCP 性能优化:
- TCP Fast Open:减少握手延迟
- BBR 拥塞控制:基于带宽和 RTT 的拥塞控制
- 窗口扩大因子:支持高速网络
四、网络层
4.1 网络层概述
概念解释
网络层:负责将数据报从源主机传输到目的主机,核心功能是路由选择。
数据报(Datagram):网络层的传输单元,包含 IP 首部和数据。
转发(Forwarding):将分组从输入接口移动到正确的输出接口。
路由选择(Routing):确定分组从源到目的的路径。
基本原理
网络层功能:
- 转发:路由器查表决定输出端口
- 路由选择:路由算法计算最佳路径
- 连接建立:某些网络架构(如 ATM)需要
数据平面 vs 控制平面:
| 数据平面 | 控制平面 |
|---|---|
| 本地操作,转发分组 | 网络范围,路由选择 |
| 纳秒级处理 | 秒级计算 |
| 路由器硬件实现 | 路由器软件实现 |
实际应用
- 路由器:网络层核心设备
- 三层交换机:支持 IP 路由的交换机
- SDN(软件定义网络):控制平面与数据平面分离
4.2 IPv4 协议
概念解释
IPv4(Internet Protocol version 4):当前广泛使用的网络层协议,32 位地址。
基本原理
IPv4 数据报格式:
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
|版本(4)|首部长度|服务类型| 总长度 | 0-3 字节
+--------+--------+--------+--------+
| 标识字段 |标志| 片偏移 | 4-7 字节
+--------+--------+--------+--------+
| 生存时间 | 协议 | 首部校验和 | 8-11 字节
+--------+--------+--------+--------+
| 源 IP 地址 | 12-15 字节
+--------+--------+--------+--------+
| 目的 IP 地址 | 16-19 字节
+--------+--------+--------+--------+
| 选项(可选) |
+-----------------------------------+
关键字段:
- 版本:IPv4 为 4
- 首部长度:以 4 字节为单位,最小 5(20 字节)
- 服务类型(TOS):区分服务
- 总长度:首部 + 数据,最大 65535 字节
- 标识、标志、片偏移:IP 分片
- TTL(Time To Live):生存时间,每经过路由器减 1,防止循环
- 协议:上层协议(TCP=6, UDP=17, ICMP=1)
- 首部校验和:检测首部错误
IPv4 地址:
- 32 位,点分十进制表示:
192.168.1.1 - 网络号 + 主机号:网络号标识网络,主机号标识主机
IP 地址分类:
| 类别 | 范围 | 网络号位数 | 主机号位数 | 用途 |
|---|---|---|---|---|
| A | 1.0.0.0 - 126.255.255.255 | 8 | 24 | 大型网络 |
| B | 128.0.0.0 - 191.255.255.255 | 16 | 16 | 中型网络 |
| C | 192.0.0.0 - 223.255.255.255 | 24 | 8 | 小型网络 |
| D | 224.0.0.0 - 239.255.255.255 | - | - | 组播地址 |
| E | 240.0.0.0 - 255.255.255.255 | - | - | 保留地址 |
子网划分:
-
子网掩码:区分网络号和主机号
- A 类默认:255.0.0.0
- B 类默认:255.255.0.0
- C 类默认:255.255.255.0
-
CIDR(无类别域间路由):
- 格式:
192.168.1.0/24(前 24 位为网络号) - 路由聚合:合并连续网络
- 格式:
私有地址:
| 范围 | CIDR | 用途 |
|---|---|---|
| 10.0.0.0 - 10.255.255.255 | 10.0.0.0/8 | A 类私有 |
| 172.16.0.0 - 172.31.255.255 | 172.16.0.0/12 | B 类私有 |
| 192.168.0.0 - 192.168.255.255 | 192.168.0.0/16 | C 类私有 |
NAT(网络地址转换):
内网主机(私有 IP)→ NAT 路由器 → 外网(公网 IP)
↑
地址转换表
- 内网主机使用私有 IP
- NAT 路由器将私有 IP 转换为公网 IP
- 节省 IPv4 地址
IP 分片:
- MTU(Maximum Transmission Unit):链路层最大传输单元
- 以太网 MTU = 1500 字节
- IP 数据报大于 MTU 时需分片
- 目的主机重组分片
原数据报:4000 字节
MTU:1500 字节
分片:
- 片 1:标识=x, 标志=1(更多片), 偏移=0
- 片 2:标识=x, 标志=1(更多片), 偏移=185
- 片 3:标识=x, 标志=0(最后一片), 偏移=370
实际应用
- 子网规划:企业网络划分
- NAT 配置:家庭路由器、企业防火墙
- IP 地址管理:DHCP 动态分配
4.3 IPv6 协议
概念解释
IPv6(Internet Protocol version 6):下一代 IP 协议,128 位地址,解决 IPv4 地址枯竭问题。
基本原理
IPv6 地址格式:
- 128 位,冒号十六进制表示
2001:0db8:85a3:0000:0000:8a2e:0370:7334- 简化规则:
- 连续的 0 可用
::表示(只能用一次) - 前导 0 可省略
- 示例:
2001:db8:85a3::8a2e:370:7334
- 连续的 0 可用
IPv6 数据报格式:
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
|版本(6)| 流量类型 | 流标签 | 0-3 字节
+--------+--------+--------+--------+
| 有效载荷长度 |下一个首部|跳数限制| 4-7 字节
+--------+--------+--------+--------+
| 源地址(128 位) |
| |
| |
| |
+-----------------------------------+
| 目的地址(128 位) |
| |
| |
| |
+-----------------------------------+
| 扩展首部(可选) |
+-----------------------------------+
IPv6 特点:
- 更大的地址空间:2^128 个地址
- 简化的首部:固定 40 字节,提高处理效率
- 无分片:路由器不分片,由源主机负责
- 内置安全:IPsec 支持
- 更好的 QoS:流标签支持流量识别
IPv4 到 IPv6 迁移:
- 双栈(Dual Stack):同时支持 IPv4 和 IPv6
- 隧道(Tunneling):IPv6 数据报封装在 IPv4 数据报中
- 协议转换:NAT64 转换 IPv6 和 IPv4 地址
实际应用
- 下一代互联网:IPv6 普及
- 物联网:海量设备需要大量 IP 地址
- 5G 网络:IPv6 为基础
4.4 路由算法
概念解释
路由算法:确定分组从源到目的的最佳路径。
链路状态(Link State, LS)算法:掌握全局网络拓扑信息。
距离向量(Distance Vector, DV)算法:只知道邻居节点信息。
基本原理
链路状态算法(Dijkstra 算法):
- 每个节点广播链路状态(连接的邻居及费用)
- 所有节点构建完整的网络拓扑图
- 使用 Dijkstra 算法计算最短路径
初始化:
N' = {u} // 已知最短路径的节点集合
对所有节点 v:
D(v) = c(u, v) // u 到 v 的费用
循环:
找出不在 N' 中且 D(w) 最小的节点 w
将 w 加入 N'
对 w 的每个邻居 v:
D(v) = min(D(v), D(w) + c(w, v))
直到 N' 包含所有节点
距离向量算法(Bellman-Ford 方程):
dx(y) = min { c(x, v) + dv(y) }
所有邻居 v
dx(y):x 到 y 的最短距离
c(x, v):x 到邻居 v 的费用
dv(y):邻居 v 到 y 的最短距离
算法特点:
| 特性 | 链路状态 | 距离向量 |
|---|---|---|
| 全局/局部 | 全局信息 | 局部信息 |
| 消息复杂度 | O(nE) | 收敛时交换 |
| 收敛速度 | O(n^2) | 可能慢,可能震荡 |
| 健壮性 | 节点计算错误影响局部 | 错误传播全网 |
距离向量算法的问题:
无穷计数问题:
初始:
A --1-- B --1-- C
A 到 C 的距离 = 2
若 B-C 链路断开:
B 认为 A 到 C 距离为 2,所以 B 到 C = 1 + 2 = 3
A 认为 B 到 C 距离为 3,所以 A 到 C = 1 + 3 = 4
... 无限循环
解决方法:
- 毒性逆转:如果 A 通过 B 到达 C,则 A 告诉 B 自己到 C 的距离为无穷大
- 定义无穷大:将无穷大定义为较小值(如 16)
实际应用
- OSPF 协议:链路状态算法
- RIP 协议:距离向量算法
- BGP 协议:路径向量算法
4.5 路由协议
概念解释
自治系统(AS):在单一技术管理下的一组路由器。
内部网关协议(IGP):AS 内部路由协议(OSPF、RIP)。
外部网关协议(EGP):AS 之间路由协议(BGP)。
基本原理
OSPF(Open Shortest Path First):
- 链路状态协议
- 特点:
- 洪泛链路状态信息
- Dijkstra 算法计算最短路径
- 支持层次化路由
- 快速收敛
- 支持负载均衡
OSPF 区域:
骨干区域(Area 0)
|
+---------+---------+
| | |
Area 1 Area 2 Area 3
BGP(Border Gateway Protocol):
- 路径向量协议
- AS 间路由:
- 每个 AS 有唯一 AS 号
- BGP 路由器交换可达性信息
- 路径包含经过的 AS 序列
BGP 路由选择策略:
- 本地偏好值
- 最短 AS 路径
- 最近的下一跳
- 其他标准
实际应用
- 企业网络:OSPF 内部路由
- 互联网:BGP AS 间路由
- 数据中心:定制化路由协议
4.6 ICMP 协议
概念解释
ICMP(Internet Control Message Protocol):互联网控制消息协议,用于网络层差错报告和诊断。
基本原理
ICMP 报文类型:
| 类型 | 报文 | 说明 |
|---|---|---|
| 0 | Echo Reply | ping 响应 |
| 3 | Destination Unreachable | 目的不可达 |
| 8 | Echo Request | ping 请求 |
| 11 | Time Exceeded | TTL 超时 |
| 12 | Parameter Problem | 参数错误 |
ICMP 应用:
-
ping:测试主机可达性
- 发送 ICMP Echo Request
- 接收 ICMP Echo Reply
-
traceroute:追踪路由路径
- 发送 TTL=1 的数据报,第一跳路由器返回 ICMP Time Exceeded
- 发送 TTL=2 的数据报,第二跳路由器返回 ICMP Time Exceeded
- … 直到到达目的主机
实际应用
- 网络诊断:ping、traceroute
- 路径 MTU 发现:ICMP Destination Unreachable(需要分片)
- 路由重定向:ICMP Redirect
五、数据链路层
5.1 链路层服务
概念解释
链路层:负责在单个链路上传输数据帧,将网络层的数据报封装成帧。
节点(Node):主机和路由器。
链路(Link):连接相邻节点的通信信道。
帧(Frame):链路层的传输单元。
基本原理
链路层服务:
- 成帧:将网络层数据报封装成帧
- 链路接入:协调帧的传输(MAC 协议)
- 可靠交付:差错检测和纠正
- 差错检测:检测传输错误
链路层实现位置:
- 主机的网络接口卡(NIC)
- 路由器的接口卡
实际应用
- 以太网:有线局域网
- Wi-Fi:无线局域网
- PPP:点对点协议
5.2 差错检测与纠正
概念解释
差错检测:检测传输过程中的比特错误。
差错纠正:不仅检测错误,还能纠正错误。
基本原理
差错检测技术:
1. 奇偶校验(Parity Check):
- 单比特奇偶校验:添加 1 位,使 1 的个数为偶数(偶校验)或奇数(奇校验)
- 二维奇偶校验:行列都添加校验位,可检测并纠正单比特错误
数据:
1 0 1 1 | 1 (行偶校验)
0 1 1 0 | 0
1 1 0 1 | 1
-------+--
0 0 0 0 | 0 (列偶校验)
2. 循环冗余检测(CRC, Cyclic Redundancy Check):
- 发送方和接收方约定生成多项式 G(x)
- 数据 D(x) 左移 r 位(r 为 G(x) 的阶)
- 计算 R(x) = D(x)·x^r mod G(x)
- 发送 D(x)·x^r + R(x)
- 接收方用 G(x) 除,余数为 0 则无错
CRC 示例:
数据:1101
生成多项式:G(x) = x^3 + x + 1 → 1011
1101000 ÷ 1011 = 1011 余 001
余数 001 即为 CRC
发送:1101001
3. 前向纠错(FEC, Forward Error Correction):
- 发送方添加冗余信息
- 接收方可直接纠正错误,无需重传
- 适用于高延迟或高误码率环境
实际应用
- 以太网:CRC-32 校验
- Wi-Fi:更强的纠错编码
- 存储系统:RAID、ECC 内存
5.3 多路访问协议
概念解释
多路访问问题:多个节点共享同一广播信道,如何协调传输。
多路访问协议:协调多个节点在共享信道上的传输。
基本原理
三类多路访问协议:
1. 信道划分协议:
- 频分多路复用(FDM):每个节点分配固定频带
- 时分多路复用(TDM):每个节点分配固定时隙
- 码分多路访问(CDMA):每个节点分配唯一编码
2. 随机接入协议:
ALOHA 协议:
- 纯 ALOHA:有数据就发送,冲突后随机等待重发
- 最大效率:18%
- 时隙 ALOHA:在时隙开始时发送
- 最大效率:37%
CSMA(载波侦听多路访问):
- 1-坚持 CSMA:信道空闲立即发送,忙则持续侦听
- 非坚持 CSMA:信道忙则随机等待后重试
- p-坚持 CSMA:信道空闲以概率 p 发送
CSMA/CD(以太网使用):
1. 侦听信道
2. 若空闲,开始发送
3. 发送时持续检测冲突
4. 若检测到冲突:
- 发送干扰信号
- 二进制指数退避
- 重传
二进制指数退避:
第 n 次冲突后,从 {0, 1, 2, ..., 2^n - 1} 中随机选择 K
等待 K·512 比特时间后重传
3. 轮流协议:
- 轮询协议:主节点轮流询问从节点
- 令牌传递协议:节点持有令牌才能发送
实际应用
- 以太网:CSMA/CD
- Wi-Fi:CSMA/CA(冲突避免)
- 蜂窝网络:FDMA、TDMA、CDMA
5.4 以太网
概念解释
以太网(Ethernet):最广泛使用的有线局域网技术。
基本原理
以太网帧格式:
前导码 目的地址 源地址 类型 数据 CRC
8 字节 6 字节 6 字节 2 字节 46-1500 4 字节
- 前导码:同步时钟(7 字节前导 + 1 字节 SFD)
- 目的地址/源地址:MAC 地址(48 位)
- 类型:上层协议类型(IP=0x0800, ARP=0x0806)
- 数据:46-1500 字节(最小 46 字节,不足需填充)
- CRC:循环冗余校验
MAC 地址:
- 48 位,全球唯一
- 前 24 位:厂商标识(OUI)
- 后 24 位:厂商分配
以太网技术演进:
| 标准 | 速率 | 传输介质 | 最大距离 |
|---|---|---|---|
| 10Base-T | 10 Mbps | 双绞线 | 100m |
| 100Base-TX | 100 Mbps | 双绞线 | 100m |
| 1000Base-T | 1 Gbps | 双绞线 | 100m |
| 10GBase-T | 10 Gbps | 双绞线 | 100m |
以太网特点:
- 无连接:无需建立连接
- 不可靠:无 ACK、无重传
- CSMA/CD:冲突检测(全双工模式已不用)
实际应用
- 局域网:企业、家庭网络
- 数据中心:服务器互联
- 工业以太网:工业自动化
5.5 链路层交换
概念解释
交换机(Switch):链路层设备,根据 MAC 地址转发帧。
交换机表:记录 MAC 地址与端口的映射。
基本原理
交换机转发过程:
- 接收帧,提取源 MAC 地址,学习端口映射
- 查找目的 MAC 地址:
- 找到:转发到对应端口
- 未找到:泛洪到所有端口(除源端口)
交换机表自学习:
1. 收到帧:源 MAC = A,端口 = 1
2. 记录:MAC A → 端口 1
3. 表项老化时间:通常几分钟
交换机 vs 集线器:
| 特性 | 交换机 | 集线器 |
|---|---|---|
| 工作层次 | 链路层 | 物理层 |
| 转发方式 | 基于 MAC 地址 | 广播 |
| 冲突域 | 每端口独立 | 所有端口共享 |
| 带宽 | 端口独享 | 所有端口共享 |
虚拟局域网(VLAN):
- 逻辑上划分局域网
- 一个物理交换机可划分多个 VLAN
- 隔离广播域,提高安全性
实际应用
- 企业网络:多交换机互联
- 数据中心:大规模交换网络
- 网络隔离:VLAN 划分安全区域
六、物理层
6.1 物理层概述
概念解释
物理层:网络体系结构的最底层,负责在物理介质上传输比特流。
基本原理
物理层功能:
- 定义电气特性:电压电平、数据速率
- 定义机械特性:接口形状、引脚数量
- 定义功能特性:各引脚功能
- 定义规程特性:传输时序
传输介质:
导引型介质:
-
双绞线:
- 无屏蔽双绞线(UTP):便宜,易受干扰
- 屏蔽双绞线(STP):抗干扰,价格高
- 类别:Cat5(100Mbps)、Cat6(1Gbps)、Cat7(10Gbps)
-
同轴电缆:
- 基带同轴电缆:数字信号
- 宽带同轴电缆:模拟信号
-
光纤:
- 单模光纤:长距离,激光光源
- 多模光纤:短距离,LED 光源
- 优点:高速、抗干扰、安全
非导引型介质:
- 无线电波:全向传播,穿透能力强
- 微波:直线传播,需要中继
- 卫星:覆盖范围广,延迟大
实际应用
- 家庭网络:双绞线、Wi-Fi
- 骨干网络:光纤
- 移动通信:无线电波
6.2 编码与调制
概念解释
编码:将数字数据转换为数字信号。
调制:将数字数据转换为模拟信号。
基本原理
数字编码方式:
-
不归零编码(NRZ):
- 高电平 = 1,低电平 = 0
- 问题:连续 0 或 1 时无法同步
-
曼彻斯特编码:
- 位周期中间跳变:低→高 = 1,高→低 = 0
- 以太网使用
- 优点:自同步
- 缺点:带宽利用率低
-
差分曼彻斯特编码:
- 位周期中间总有跳变
- 位开始有跳变 = 0,无跳变 = 1
模拟调制方式:
- 调幅(AM):载波幅度随信号变化
- 调频(FM):载波频率随信号变化
- 调相(PM):载波相位随信号变化
数字调制方式:
- 幅移键控(ASK):幅度表示 0/1
- 频移键控(FSK):频率表示 0/1
- 相移键控(PSK):相位表示 0/1
实际应用
- 以太网:曼彻斯特编码
- Wi-Fi:QAM(正交幅度调制)
- 光纤:光强度调制
七、网络安全
7.1 网络安全基础
概念解释
网络安全:保护网络系统免受攻击、破坏、窃取。
安全目标:
- 机密性(Confidentiality):只有授权方可以访问
- 完整性(Integrity):数据未被篡改
- 可用性(Availability):服务正常可用
基本原理
常见攻击类型:
- 窃听攻击:截获通信内容
- 篡改攻击:修改传输数据
- 重放攻击:重复发送旧数据
- 拒绝服务攻击(DoS):耗尽资源,使服务不可用
- 中间人攻击:冒充通信双方
密码学基础:
对称加密:
- 加密和解密使用相同密钥
- 算法:AES、DES、3DES
- 优点:速度快
- 缺点:密钥分发问题
非对称加密:
- 公钥加密,私钥解密
- 算法:RSA、ECC
- 优点:解决密钥分发问题
- 缺点:速度慢
混合加密:
- 使用非对称加密交换对称密钥
- 使用对称加密传输数据
实际应用
- HTTPS:SSL/TLS 加密
- VPN:虚拟专用网络
- 数字签名:身份认证和完整性
7.2 加密与认证
概念解释
加密:将明文转换为密文。
认证:验证身份或数据来源。
基本原理
对称加密算法:
AES(Advanced Encryption Standard):
- 分组加密,分组长度 128 位
- 密钥长度:128、192、256 位
- 工作模式:
- ECB:电子密码本模式(不安全)
- CBC:密码分组链接模式
- CTR:计数器模式
非对称加密算法:
RSA:
- 基于大数分解难题
- 密钥生成:
- 选择两个大素数 p, q
- 计算 n = p·q
- 计算 φ(n) = (p-1)(q-1)
- 选择公钥 e,满足 gcd(e, φ(n)) = 1
- 计算私钥 d,满足 e·d ≡ 1 (mod φ(n))
- 加密:c = m^e mod n
- 解密:m = c^d mod n
消息摘要(哈希函数):
- 输入任意长度,输出固定长度
- 单向性:不可逆
- 抗碰撞性
- 算法:MD5(已不安全)、SHA-1(已不安全)、SHA-256
数字签名:
发送方:
1. 计算消息摘要:H(m)
2. 用私钥签名:Sign = (H(m))^d mod n
3. 发送消息和签名
接收方:
1. 用公钥验证签名:H(m) = Sign^e mod n
2. 验证消息完整性
数字证书:
- 由证书颁发机构(CA)签名
- 包含:公钥、持有者信息、CA 签名、有效期
- 证书链验证
实际应用
- HTTPS:证书 + SSL/TLS
- SSH:公钥认证
- 区块链:数字签名
7.3 防火墙与入侵检测
概念解释
防火墙:控制网络访问的安全设备。
入侵检测系统(IDS):检测网络攻击。
入侵防御系统(IPS):检测并阻止攻击。
基本原理
防火墙类型:
-
包过滤防火墙:
- 基于 IP 地址、端口号过滤
- 无状态,效率高
-
状态检测防火墙:
- 维护连接状态表
- 可识别关联的分组
-
应用层网关(代理防火墙):
- 检查应用层内容
- 深度包检测(DPI)
防火墙规则:
规则示例:
允许:源 IP 192.168.1.0/24,目的端口 80
拒绝:源 IP 任意,目的端口 23
IDS/IPS 技术:
- 基于特征:匹配已知攻击特征
- 基于异常:检测异常行为
实际应用
- 企业网络:边界防火墙
- Web 应用:WAF(Web 应用防火墙)
- 云安全:安全组、网络 ACL
总结
关键概念速查表
| 层次 | 核心协议 | 关键概念 |
|---|---|---|
| 应用层 | HTTP, SMTP, DNS | 客户-服务器, P2P, URL |
| 传输层 | TCP, UDP | 端口, 套接字, 可靠传输, 拥塞控制 |
| 网络层 | IP, ICMP, OSPF, BGP | 路由, 转发, IP 地址, 子网划分 |
| 链路层 | Ethernet, PPP | MAC 地址, 帧, CSMA/CD, 交换机 |
| 物理层 | - | 比特, 编码, 调制, 传输介质 |
协议对比
| 协议 | 层次 | 可靠性 | 连接性 | 应用场景 |
|---|---|---|---|---|
| HTTP | 应用层 | 依赖 TCP | 无连接 | Web 浏览 |
| TCP | 传输层 | 可靠 | 面向连接 | 文件传输、邮件 |
| UDP | 传输层 | 不可靠 | 无连接 | DNS、流媒体 |
| IP | 网络层 | 不可靠 | 无连接 | 网络互联 |
| Ethernet | 链路层 | 不可靠 | 无连接 | 局域网 |
学习建议
- 自顶向下学习:从应用层开始,理解实际应用
- 抓包实践:使用 Wireshark 分析协议
- 动手实验:搭建网络环境,配置路由器、交换机
- 阅读 RFC:深入理解协议细节
参考资料
- 《计算机网络:自顶向下方法》- James F. Kurose, Keith W. Ross
- 《计算机网络》- 谢希仁
- RFC 文档:https://www.rfc-editor.org/
- Wireshark 网络分析:https://www.wireshark.org/