第一部分 简单阐述网络部分
一、数据通信基础:人类语言到电信号的转换
1. 数据转换流程
人类语言(抽象参数命令) → 编译 / 编码 → 二进制 → 电信号 → 网络传输
-
人机交互窗口:接收人类传递的参数命令,是应用层的核心作用
-
编码:将人类语言通过编码格式转换为二进制(ASCII 是最基础的编码标准)
-
二进制运算 :
100+1=101(二进制加法) -
标准化与协议:为了让不同设备互通,制定统一的网络标准(协议),ISO 七层参考模型是核心标准化成果
2. ASCII 可显示字符表(共 95 个)
ASCII 是最基础的字符编码,将人类可显示字符映射为二进制 / 十进制 / 十六进制,用于将文字转换为二进制数据。
| 二进制 | 十进制 | 十六进制 | 图形 | 二进制 | 十进制 | 十六进制 | 图形 | 二进制 | 十进制 | 十六进制 | 图形 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0010 0000 | 32 | 20 | (space) | 0100 0000 | 64 | 40 | @ | 0110 0000 | 96 | 60 | ` |
| 0010 0001 | 33 | 21 | ! | 0100 0001 | 65 | 41 | A | 0110 0001 | 97 | 61 | a |
| 0010 0010 | 34 | 22 | " | 0100 0010 | 66 | 42 | B | 0110 0010 | 98 | 62 | b |
| 0010 0011 | 35 | 23 | # | 0100 0011 | 67 | 43 | C | 0110 0011 | 99 | 63 | c |
| 0010 0100 | 36 | 24 | $ | 0100 0100 | 68 | 44 | D | 0110 0100 | 100 | 64 | d |
| 0010 0101 | 37 | 25 | % | 0100 0101 | 69 | 45 | E | 0110 0101 | 101 | 65 | e |
| 0010 0110 | 38 | 26 | & | 0100 0110 | 70 | 46 | F | 0110 0110 | 102 | 66 | f |
| 0010 0111 | 39 | 27 | ' | 0100 0111 | 71 | 47 | G | 0110 0111 | 103 | 67 | g |
| 0010 1000 | 40 | 28 | ( | 0100 1000 | 72 | 48 | H | 0110 1000 | 104 | 68 | h |
| 0010 1001 | 41 | 29 | ) | 0100 1001 | 73 | 49 | I | 0110 1001 | 105 | 69 | i |
| 0010 1010 | 42 | 2A | * | 0100 1010 | 74 | 4A | J | 0110 1010 | 106 | 6A | j |
| 0010 1011 | 43 | 2B | + | 0100 1011 | 75 | 4B | K | 0110 1011 | 107 | 6B | k |
| 0010 1100 | 44 | 2C | , | 0100 1100 | 76 | 4C | L | 0110 1100 | 108 | 6C | l |
| 0010 1101 | 45 | 2D | - | 0100 1101 | 77 | 4D | M | 0110 1101 | 109 | 6D | m |
| 0010 1110 | 46 | 2E | . | 0100 1110 | 78 | 4E | N | 0110 1110 | 110 | 6E | n |
| 0010 1111 | 47 | 2F | / | 0100 1111 | 79 | 4F | O | 0110 1111 | 111 | 6F | o |
| 0011 0000 | 48 | 30 | 0 | 0101 0000 | 80 | 50 | P | 0111 0000 | 112 | 70 | p |
| 0011 0001 | 49 | 31 | 1 | 0101 0001 | 81 | 51 | Q | 0111 0001 | 113 | 71 | q |
| 0011 0010 | 50 | 32 | 2 | 0101 0010 | 82 | 52 | R | 0111 0010 | 114 | 72 | r |
| 0011 0011 | 51 | 33 | 3 | 0101 0011 | 83 | 53 | S | 0111 0011 | 115 | 73 | s |
| 0011 0100 | 52 | 34 | 4 | 0101 0100 | 84 | 54 | T | 0111 0100 | 116 | 74 | t |
| 0011 0101 | 53 | 35 | 5 | 0101 0101 | 85 | 55 | U | 0111 0101 | 117 | 75 | u |
| 0011 0110 | 54 | 36 | 6 | 0101 0110 | 86 | 56 | V | 0111 0110 | 118 | 76 | v |
| 0011 0111 | 55 | 37 | 7 | 0101 0111 | 87 | 57 | W | 0111 0111 | 119 | 77 | w |
| 0011 1000 | 56 | 38 | 8 | 0101 1000 | 88 | 58 | X | 0111 1000 | 120 | 78 | x |
| 0011 1001 | 57 | 39 | 9 | 0101 1001 | 89 | 59 | Y | 0111 1001 | 121 | 79 | y |
| 0011 1010 | 58 | 3A | : | 0101 1010 | 90 | 5A | Z | 0111 1010 | 122 | 7A | z |
| 0011 1011 | 59 | 3B | ; | 0101 1011 | 91 | 5B | [ | 0111 1011 | 123 | 7B | { |
| 0011 1100 | 60 | 3C | < | 0101 1100 | 92 | 5C | \ | 0111 1100 | 124 | 7C | | |
| 0011 1101 | 61 | 3D | = | 0101 1101 | 93 | 5D | ] | 0111 1101 | 125 | 7D | } |
| 0011 1110 | 62 | 3E | > | 0101 1110 | 94 | 5E | ^ | 0111 1110 | 126 | 7E | ~ |
| 0011 1111 | 63 | 3F | ? | 0101 1111 | 95 | 5F | _ |
二、网络分层模型
1. 分层的意义
-
更利于标准化:统一不同厂商设备的通信规则
-
各层独立发展:每层只负责自身功能,互不干扰,便于迭代优化
2. OSI 七层参考模型(ISO 1979 年发布,国际标准化组织)
从上到下依次为 7 层,每层对应不同功能:
| 层级 | 核心功能 | 关键说明 |
|---|---|---|
| 应用层 | 人机交互的窗口,为应用程序提供网络服务 | 直接面向用户,接收人类参数命令,如 HTTP、FTP、DNS 等协议工作在此层 |
| 表示层 | 统一编码格式,将人类语言转换为二进制,负责数据加密、压缩、格式转换 | 解决不同系统间的编码兼容问题,ASCII 编码是表示层的核心应用之一 |
| 会话层 | 建立、维护、断开一次会话通信(主机与服务器之间的逻辑通道) | 提供会话层地址(账号),管理通信的生命周期,如登录、登出操作 |
| 传输层 | 端到端的传输(应用到应用之间的传输),利用端口号区分不同应用 / 服务 | 端口号本质是 16 位二进制,取值范围 0-65535:0 为保留端口,实际可用 1-655351-1023 为知名端口(如 SSH 22、HTTP 80) |
| 网络层 | 通过 IP 地址实现逻辑寻址,选择数据传输的最佳路径 | 核心协议为 IP,负责跨网段通信,解决 "如何找到目标主机" 的问题 |
| 数据链路层 | 通过 MAC 地址进行物理寻址(以太网独有),封装成帧,进行差错检测 | MAC 地址是 48 位物理地址,全球唯一,负责局域网内的设备定位 |
| 物理层 | 处理和传输电流信号,定义电气、机械、功能和规程特性 | 将二进制转换为电信号 / 光信号 / 无线电波,实现物理介质上的传输 |
3. TCP/IP 模型(实际网络中使用的标准)
TCP/IP 是互联网的核心协议簇,有两种常见模型,与 OSI 模型的对应关系如下:
| TCP/IP 标准模型 | TCP/IP 对等模型 | 对应 OSI 层级 | 核心功能 |
|---|---|---|---|
| 应用层 | 应用层 | 应用层、表示层、会话层 | 整合 OSI 上三层功能,提供应用服务,如 HTTP、DNS、DHCP 等 |
| 主机到主机层 | 传输层 | 传输层 | 端到端传输,TCP/UDP 协议工作在此层,端口号在此层使用 |
| 因特网层 | 网络层 | 网络层 | 逻辑寻址,IP 协议工作在此层 |
| 网络接入层 | 数据链路层 + 物理层 | 数据链路层、物理层 | 物理传输,MAC 地址、以太网帧、电信号处理在此层完成 |

三、数据封装与解封装
1. 协议数据单元(PDU)
不同层级封装后的数据单元名称不同:
-
应用层:数据报文
-
传输层:数据段(Segment)
-
网络层:数据包(Packet)
-
数据链路层:数据帧(Frame)
-
物理层:比特流(Bit)
2. 封装过程
封装:从应用层开始,逐层给上层数据添加本层头部,直到数据链路层结束(物理层不封装,仅转换为比特流)。

封装步骤:
-
应用层:将人类语言封装为应用层数据(如 HTTP 报文),添加应用层头部
-
传输层 :给应用层数据添加传输层头部(源端口、目的端口),封装为数据段
- 核心字段:源端口号、目的端口号(区分不同应用)
-
网络层 :给传输层数据段添加网络层头部(源 IP、目的 IP、协议号),封装为数据包
- 核心字段:源 IP、目的 IP、协议号(区分上层协议:TCP=6、UDP=17、OSPF=89)
-
数据链路层 :给网络层数据包添加数据链路层头部(源 MAC、目的 MAC、类型字段),封装为数据帧
- 核心字段:源 MAC、目的 MAC、类型字段(区分上层协议)
-
物理层:将数据帧转换为二进制比特流(0/1 电信号),通过物理介质传输
3. 解封装过程
解封装:接收方从物理层开始,逐层剥离本层头部,向上传递,直到应用层还原为人类语言。

4. 特殊封装:跨层封装
-
OSPF:跨四层封装的协议,直接在网络层封装,提升数据包转发效率
-
STP(生成树协议):跨三、四层进行封装,用于局域网环路消除
四、各层核心协议与报文结构
1. 传输层协议
(1)端口号与常用服务端口表
端口号用于区分同一主机上的不同应用,常用服务对应端口如下:
| 常用服务 | 协议 | 端口号 | 说明 |
|---|---|---|---|
| POP3 | TCP | 110 | 邮件接收协议 |
| IMAP | TCP | 143 | 邮件交互协议 |
| SMTP | TCP | 25 | 邮件发送协议 |
| Telnet | TCP | 23 | 远程终端(明文) |
| 终端服务 | TCP | 3389 | Windows 远程桌面 |
| PPTP | TCP | 1723 | VPN 协议 |
| HTTP | TCP | 80 | 网页访问(明文) |
| FTP (控制) | TCP | 21 | 文件传输控制连接 |
| FTP (数据) | TCP | 20 | 文件传输数据连接 |
| HTTPS | TCP | 443 | 网页访问(加密) |
| NTP | UDP | 123 | 网络时间协议 |
| RADIUS | UDP | 1645 | 认证授权计费 |
| DHCP | UDP | 67 | 服务器端口(客户端 68) |
| DNS | UDP | 53 | 域名解析(查询) |
| DNS | TCP | 53 | 域名解析(区域传输) |
(2)TCP 报文结构(面向连接、可靠传输)
TCP 是面向连接、可靠的传输层协议,报文结构如下:
| 字段 | 长度 | 核心功能 |
|---|---|---|
| 源端口号 | 16 位 | 发送方应用的端口号 |
| 目的端口号 | 16 位 | 接收方应用的端口号 |
| 序号 | 32 位 | 保证数据有序传输,解决乱序问题 |
| 确认序号 | 32 位 | 确认已收到的数据,实现可靠传输 |
| 首部长度 | 4 位 | 标识 TCP 头部长度 |
| 保留 | 6 位 | 预留字段 |
| 标志位(URG/ACK/PSH/RST/SYN/FIN) | 6 位 | 控制连接状态:SYN = 建立连接、ACK = 确认、FIN = 断开连接、RST = 重置连接 |
| 窗口大小 | 16 位 | 流量控制,告知对方自己的接收能力 |
| 校验和 | 16 位 | 校验数据完整性 |
| 紧急指针 | 16 位 | 标识紧急数据位置 |
| 选项 + 数据 | 可变 | 可选字段(如 MSS)+ 上层数据 |

(3)UDP 报文结构(无连接、不可靠传输)
UDP 是无连接、不可靠的传输层协议,头部简单、开销小,适合实时业务(如视频、语音):
| 字段 | 长度 | 核心功能 |
|---|---|---|
| 源端口号 | 16 位 | 发送方应用的端口号 |
| 目的端口号 | 16 位 | 接收方应用的端口号 |
| UDP 长度 | 16 位 | UDP 报文总长度 |
| UDP 校验和 | 16 位 | 校验数据完整性(可选) |
| 数据部分 | 可变 | 上层数据 |

2. 网络层:IP 协议与 IP 报文结构
IP 是网络层核心协议,负责逻辑寻址,IPv4 报文结构如下:
| 字段 | 长度 | 核心功能 |
|---|---|---|
| 版本 | 4 位 | IP 版本(IPv4=4,IPv6=6) |
| 首部长度 | 4 位 | IP 头部长度(单位 4 字节,默认 20 字节) |
| 区分服务 | 8 位 | 服务质量 QoS,标识报文优先级 |
| 总长度 | 16 位 | IP 报文总长度(头部 + 数据) |
| 标识 | 16 位 | 分片标识,用于重组分片报文 |
| 标志 | 3 位 | 分片控制(是否允许分片、是否为最后一片) |
| 片偏移 | 13 位 | 分片在原报文中的位置,用于重组 |
| 生存时间(TTL) | 8 位 | 报文最大跳数,每经过一个路由器减 1,防止环路 |
| 协议 | 8 位 | 区分上层协议(TCP=6、UDP=17、ICMP=1、OSPF=89) |
| 首部校验和 | 16 位 | 校验 IP 头部完整性 |
| 源地址 | 32 位 | 发送方 IP 地址 |
| 目的地址 | 32 位 | 接收方 IP 地址 |
| 可选字段 + 填充 | 可变 | 可选扩展字段,填充保证头部为 4 字节整数倍 |
| 数据部分 | 可变 | 上层数据(如 TCP/UDP 报文) |

3. 数据链路层:以太网帧结构
以太网是最常用的局域网技术,以太网帧结构如下:
| 字段 | 长度 | 核心功能 |
|---|---|---|
| 前导码 | 7 字节 | 同步时钟,用于接收方同步 |
| SFD(帧起始界定符) | 1 字节 | 标识帧的开始 |
| 目的 MAC 地址 | 6 字节 | 接收方物理地址(全 FF 为广播地址) |
| 源 MAC 地址 | 6 字节 | 发送方物理地址 |
| 长度 / 类型 | 2 字节 | 标识上层协议(0x0800=IP、0x0806=ARP) |
| 数据 | 46~1500 字节 | 上层数据(如 IP 报文),不足 46 字节填充 |
| FCS(帧校验序列) | 4 字节 | 校验帧的完整性,CRC 算法 |

五、核心应用协议:DHCP
DHCP(动态主机配置协议)是应用层协议,基于 UDP 传输,用于自动分配 IP 地址等网络参数。
- 客户端端口:68,服务器端口:67
1. 首次获取 IP 地址流程(4 步交互)
-
DHCP Discover(客户端→服务器,广播)
-
源 IP:0.0.0.0,目的 IP:255.255.255.255
-
源 MAC:客户端 MAC,目的 MAC:FF-FF-FF-FF-FF-FF(广播)
-
UDP:源端口 68,目的端口 67
-
作用:寻址网络中所有 DHCP 服务器,请求 IP 地址
-
-
DHCP Offer(服务器→客户端,广播 / 单播)
-
源 IP:服务器 IP,目的 IP:255.255.255.255 / 分配的 IP
-
源 MAC:服务器 MAC,目的 MAC:客户端 MAC/FF-FF-FF-FF-FF-FF
-
UDP:源端口 67,目的端口 68
-
作用:携带可用 IP 地址、子网掩码、网关、租期等参数
-
-
DHCP Request(客户端→服务器,广播)
-
源 IP:0.0.0.0,目的 IP:255.255.255.255
-
源 MAC:客户端 MAC,目的 MAC:FF-FF-FF-FF-FF-FF
-
UDP:源端口 68,目的端口 67
-
作用:① 确认使用某服务器下发的 IP;② 通知其他服务器释放未使用的 IP
-
-
DHCP ACK(服务器→客户端,广播 / 单播)
-
源 IP:服务器 IP,目的 IP:分配的 IP/255.255.255.255
-
源 MAC:服务器 MAC,目的 MAC:客户端 MAC/FF-FF-FF-FF-FF-FF
-
UDP:源端口 67,目的端口 68
-
作用:确认 IP 分配,下发完整网络参数,客户端正式使用该 IP
-
2. 续租 IP 地址流程
-
租期默认 24 小时,两个关键时间点:
-
T1 时间:50% 租期(12 小时),客户端单播发送 DHCP Request 给服务器,请求续租
-
T2 时间:87.5% 租期(21 小时),若 T1 续租失败,客户端广播发送 DHCP Request,请求续租
-
-
若续租成功,服务器回复 DHCP ACK,刷新租期;若失败,IP 到期后客户端释放该 IP
六、ARP 协议与设备转发原理
1. ARP 协议(地址解析协议)
ARP 是数据链路层协议,核心作用:已知一种地址,获取另一种地址
-
正向 ARP:通过 IP 地址获取 MAC 地址(最常用)
-
反向 ARP:通过 MAC 地址获取 IP 地址
-
免费 ARP:主机主动广播自身 IP-MAC 映射,用于 IP 地址冲突检测、网关地址宣告
2. 交换机转发原理
交换机是数据链路层设备,基于 MAC 地址表转发数据帧:
-
学习:收到数据帧后,记录入接口 + 源 MAC 地址到 MAC 地址表
-
转发:根据数据帧中的目的 MAC 地址查询 MAC 地址表:
-
若表中存在记录:单播转发,仅从对应接口发送
-
若表中无记录 / 目的 MAC 为全 FF(广播):洪泛(除入接口外,向所有接口复制转发)
-
3. 路由器转发原理
路由器是网络层设备,基于路由表转发 IP 数据包:
-
收到 IP 数据包后,提取目的 IP 地址
-
查询自身路由表,匹配最长前缀路由条目
-
若存在匹配条目:从对应接口转发,封装新的 MAC 地址
-
若无匹配条目:直接丢弃数据包(默认)
七、获取目标 IP 地址的 4 种方式
1. 直接获取(手动指定)
-
定义 :用户或管理员手动输入、配置目标服务器的固定公网 / 内网 IP 地址,不经过任何解析,直接使用。
-
适用场景
-
企业内部服务器、打印机、网关等固定 IP 设备
-
测试环境、局域网内直连访问
-
已知明确 IP,跳过 DNS 解析,提高访问速度
-
-
优点:速度最快、无解析依赖、稳定可靠
-
缺点:IP 变更后必须手动修改,不适合公网大规模服务
2. 域名访问(DNS 解析)
-
定义 :用户输入域名(如 www.baidu.com) ,系统自动通过 DNS 协议向 DNS 服务器发起查询,将域名映射为对应 IP 地址。
-
完整解析流程
-
查浏览器缓存 → 查系统 Hosts 文件 → 查本地 DNS 缓存
-
递归查询 → 迭代查询(根 DNS → 顶级 DNS → 权威 DNS)
-
返回 IP 并缓存,后续直接使用
-
-
适用场景
-
网站、网页、公众号、小程序等公网服务
-
域名变更不影响用户访问
-
-
优点:便于记忆、支持 IP 迁移、可负载均衡
-
传输方式:查询用 UDP 53,区域传输用 TCP 53
3. 应用程序获取(内置 / 后台获取)
-
定义 :用户无需输入 IP 或域名,APP、客户端软件、游戏、云服务在后台自动从服务器 / 配置中心获取目标 IP 或域名。
-
获取途径
-
应用内置固定域名 / IP 列表
-
从配置服务器、CDN、调度中心动态获取
-
通过接口请求后台返回最优 IP
-
-
适用场景
-
手机 APP、直播、游戏登录服务器
-
企业办公软件、云服务、远程工具
-
-
优点:对用户完全透明、可自动切换最优 IP、支持容灾
-
特点:用户无感知,由程序自动完成寻址
4. 广播获取
-
定义 :主机在不知道目标 IP 的情况下,向局域网内发送广播报文(255.255.255.255),目标设备收到后回复自身 IP 信息。
-
典型协议示例
-
DHCP Discover:客户端广播寻找 DHCP 服务器获取 IP
-
ARP 请求:已知网关 IP,广播获取网关 MAC
-
mDNS / 零配置网络:局域网设备自动发现
-
-
适用场景
-
内网设备自动发现(打印机、摄像头、NAS)
-
首次接入网络、无网关信息时
-
企业内网零配置部署
-
-
特点 :只能在同一广播域(局域网)内有效,不能跨网段
扩展总结:对比
| 方式 | 原理 | 范围 | 典型协议 | 适用场景 |
|---|---|---|---|---|
| 直接获取 | 手动配置 IP | 内网 / 公网 | - | 固定设备、测试 |
| 域名访问 | DNS 解析 | 公网 / 内网 | DNS | 网站、服务访问 |
| 应用程序获取 | 后台自动获取 | 公网 / 内网 | HTTP/HTTPS | APP、游戏、客户端 |
| 广播获取 | 广播报文发现 | 局域网 | DHCP、ARP、mDNS | 内网设备发现 |
八、协议号对照表
用于网络层 IP 报文的协议字段,区分上层协议:
-
TCP:6
-
UDP:17
-
ICMP:1
-
OSPF:89
-
GRE:47
-
ESP:50(IPSec)
-
AH:51(IPSec)
第二部分 基础协议
一、DNS 域名解析协议
DNS:Domain Name System,域名解析协议,负责将域名 ↔ IP 地址相互映射。
1. 基础概念
-
URL :统一资源定位符例:
https://www.baidu.com/ -
域名 :
www.baidu.com
-
DNS 作用:实现人类易记域名 → 机器识别 IP 的转换
2. DNS 两种查询模式
(1)递归查询
-
触发条件:主机本地
Hosts文件、浏览器缓存、本地 DNS 缓存都没有记录时触发 -
执行方:本地 DNS 服务器代替主机发起查询
-
特点:主机只发一次请求,剩下全部由本地 DNS 服务器完成
(2)迭代查询
-
触发条件:本地 DNS 服务器自身也没有记录,会向外部发起迭代查询
-
查询顺序:本地 DNS → 根域名服务器 → 返回顶级域名服务器 IP 本地 DNS → 顶级域名服务器 → 返回权威域名服务器 IP 本地 DNS → 权威域名服务器 → 获取最终 IP
-
特点:本地 DNS 服务器主动逐级询问,直到拿到结果
3. DNS 传输协议与端口
-
端口号 :53
-
普通 DNS 查询 :使用 UDP(速度快、开销小)
-
主备同步、区域传输、大数据传输 :使用 TCP(可靠、完整)
-
原因:递归与迭代查询包小,用 UDP;服务器备份数据量大,用 TCP
二、HTTP 访问流程
前提条件 :必须先通过 DNS 域名解析 获取到目标服务器的 IP 地址,否则无法建立 TCP 连接。
完整访问四步流程
-
TCP 三次握手 建立客户端与服务器之间可靠的、全双工的传输连接。
-
客户端发送 HTTP 请求浏览器封装 HTTP 请求报文(请求行、请求头、请求体)。
-
服务器处理并回复 HTTP 响应服务器解析请求 → 处理资源 → 返回状态码、响应头、网页数据。
-
TCP 四次挥手数据传输完成,双方安全断开连接,释放资源。
每一步说明
1. TCP 三次握手(建立连接)
-
客户端发送
SYN报文,请求建立连接 -
服务器回复
SYN+ACK,同意建立连接 -
客户端回复
ACK,连接正式建立 -
之后双方进入 ESTABLISHED 状态
2. 客户端发送 HTTP 请求
典型请求内容:
-
请求方法:GET / POST / PUT / DELETE
-
请求 URL:/index.html
-
请求头:Host、User-Agent、Cookie、Connection 等
-
空行
-
请求体(POST 才有)
3. 服务器回复 HTTP 响应
典型响应内容:
-
状态码:200 OK、404、301、302、500
-
响应头:Content-Type、Content-Length、Server、Set-Cookie
-
空行
-
响应体:HTML、CSS、JS、图片等网页数据
4. TCP 四次挥手(断开连接)
-
主动方发送
FIN -
被动方回复
ACK -
被动方发送
FIN -
主动方回复
ACK,并进入 TIME_WAIT 等待 2MSL -
确保连接可靠关闭
一次 HTTP 访问的完整报文封装结构(自顶向下)
数据从应用层到物理层会逐层添加头部(封装)。
1. 应用层
-
协议:HTTP
-
内容:请求 / 响应报文(HTML、文本、资源)
2. 传输层
-
协议:TCP
-
源端口 SPORT:随机高位端口(1024~65535)
-
目的端口 DPORT:80(HTTP) / 443(HTTPS)
-
作用:实现端到端的应用程序通信
3. 网络层
-
协议:IPv4
-
源 IP(SIP):主机自身 IP(DHCP 获取或静态配置)
-
目的 IP(DIP):DNS 解析出的服务器 IP
-
作用:跨网段路由寻址,找到目标服务器
4. 数据链路层
-
协议:以太网协议
-
源 MAC(SMAC):本机网卡 MAC 地址
-
目的 MAC(DMAC):网关 MAC 地址(下一跳)
-
作用:局域网内物理寻址,将帧发给网关
5. 物理层
-
信号:二进制 → 电信号 / 光信号
-
介质:双绞线、光纤、无线网络
-
作用:实际传输比特流
访问方向与回程路径
客户端 → 服务器(去程)
-
DIP:服务器 IP
-
DMAC:网关 MAC
服务器 → 客户端(回程)
-
DIP:客户端 IP
-
DMAC:运营商路由 MAC → 最终到客户端网关 → 客户端 MAC
HTTP 与 HTTPS 区别
-
HTTP:80 端口,明文传输,不安全
-
HTTPS:443 端口,SSL/TLS 加密,安全可靠
-
HTTPS 比 HTTP 多一步 TLS 握手
HTTP 1.0 / 1.1 / 2.0 区别
-
HTTP 1.0:一次请求一次连接,请求完就断开
-
HTTP 1.1:支持长连接(keep-alive),一次 TCP 传多个请求
-
HTTP 2.0:多路复用、二进制分帧、头部压缩、并发更快
三、TCP 协议
1. TCP 协议特点
-
面向连接
-
点到点 / 端到端:一对一通信
-
基于字节流传输
-
全双工通信
-
可靠传输:排序、确认、重传、流控四大机制
2. 基础单位换算
-
1G = 1000M
-
1M = 1024 比特
-
8 比特 = 1 字节
3. MSS 与 MTU
-
MTU(最大传输单元) 二层数据帧最大载荷,默认 1500 字节
-
MSS(最大段长度) TCP 一次能传输的最大数据段
MSS = MTU - IP头部 - TCP头部 -
必须在三次握手阶段协商 MSS
四、TCP 三次握手(连接建立)
1. 握手流程
-
客户端 → 服务器:
SYN=1,seq=x -
服务器 → 客户端:
SYN=1,ACK=1,ack=x+1,seq=y -
客户端 → 服务器:
ACK=1,ack=y+1连接进入 ESTABLISHED 状态
2. 序号(seq)作用
-
对传输的字节流编号排序
-
保证数据不乱序
-
为确认机制提供依据
3. PSH 推送标志位
-
表示数据需要立即推送给应用层
-
不缓存,直接上交
4. 连接建立状态变化
客户端状态
-
CLOSED:初始关闭状态
-
SYN_SENT:已发送 SYN,等待 SYN+ACK
-
ESTABLISHED:连接建立完成
服务器状态
-
CLOSED:初始关闭
-
LISTEN:监听端口,等待客户端连接
-
SYN_RCVD:已收到 SYN,回复 SYN+ACK
-
ESTABLISHED:双向连接建立
5. TCP 异常连接处理
-
访问无效端口 / 无服务端口
-
服务器直接回复 RST 报文(重置位 = 1)
-
立即中断连接,拒绝访问
五、TCP 四次挥手(连接断开)
-
挥手流程
-
主动方 → 被动方:
FIN=1(请求关闭) -
被动方 → 主动方:
ACK=1(确认收到) -
被动方 → 主动方:
FIN=1(准备关闭) -
主动方 → 被动方:
ACK=1(确认关闭)
2. 断开连接状态变化
主动关闭方(先发 FIN)
-
ESTABLISHED
-
FIN_WAIT_1:已发 FIN,等待 ACK
-
FIN_WAIT_2:已收 ACK,等待对方 FIN
-
TIME_WAIT:等待 2MSL
-
CLOSED:释放所有资源
被动关闭方
-
ESTABLISHED
-
CLOSE_WAIT:已收 FIN,回复 ACK
-
LAST_ACK:等待最后一个 ACK
-
CLOSED:关闭连接,释放资源
3. TIME_WAIT 状态作用(必须等待 2MSL)
-
确保最后一个 ACK 能到达对方
-
防止网络中残留旧报文干扰新连接
-
可靠关闭,避免异常断开
-
如果不等待,会导致对端收不到 ACK 而重传 FIN,最终收到 RST 异常断开
六、TCP 可靠传输四大机制
-
排序:序列号保证数据顺序
-
确认:ACK 确认收到数据
-
重传:丢失则自动补发
-
流控:控制发送速度,防止缓冲区溢出
TCP 之所以被称为可靠传输协议 ,核心就是依靠四大机制共同保证数据不丢失、不重复、不乱序、不溢出。
1. 排序(序列号 / Sequence Number)
-
作用 :给传输的每一个字节分配一个编号,保证数据按顺序到达。
-
原理:
-
发送方每发送一段数据,都会带上起始序列号。
-
接收方根据序列号对数据进行重新排序。
-
即使网络乱序,接收方也能按序列号恢复正确顺序。
-
-
关键点:
-
序列号基于字节流,不是基于报文段。
-
三次握手时初始化序列号(ISN),双方各自随机生成。
-
-
意义 :彻底解决网络传输乱序问题。
2. 确认(ACK 确认应答机制)
-
作用 :接收方告诉发送方 "我已经收到哪些数据了"。
-
原理:
-
接收方收到数据后,回送 ACK 确认号。
-
确认号 = 期望收到的下一个字节的序列号。
-
采用累计确认 :确认号 N 表示 N 之前所有数据都已收到。
-
-
特点:
-
可靠、高效,不需要每个字节都确认。
-
丢失的确认可以靠后面的确认 "顺带" 覆盖。
-
-
意义:让发送方明确知道数据是否送达。
3. 重传(超时重传 + 快速重传)
(1)超时重传
-
发送方发出数据后启动定时器。
-
若RTO 时间内没收到 ACK,认为数据丢失。
-
发送方自动重传该段数据。
-
RTO 会动态调整 (略大于 RTT),且支持超时间隔加倍,避免加重网络拥塞。
(2)快速重传(优化机制)
-
接收方收到乱序报文 ,连续发送 3 次重复 ACK。
-
发送方收到后,不等定时器超时,立刻重传丢失的数据。
-
速度更快、延迟更低。
-
意义 :解决数据丢失问题,保证最终一定能送达。
4. 流控(流量控制 / 滑动窗口)
-
作用 :防止发送方发送太快,导致接收方缓冲区溢出。
-
原理:
-
接收方在 TCP 头部中通告自己的接收窗口大小(rwnd)。
-
发送方严格按照窗口大小发送,不超过对方能力。
-
窗口是动态变化的:接收处理快 → 窗口变大;处理慢 → 窗口变小。
-
-
机制:
-
滑动窗口 = 无需等待确认就能连续发送的最大数据量。
-
窗口为 0 时,发送方停止发送,开始探询。
-
-
意义 :保证收发双方速度匹配,不丢包、不溢出、高效传输。
七、TCP 重传机制
TCP 重传是保证数据不丢失 的核心机制,分为 超时重传 和 快速重传 两种。
1. 超时重传
发送方发送数据后,如果在指定时间内没有收到 ACK 确认,就认为数据丢失,重新发送该数据段。
(1)关键概念
-
RTT(Round-Trip Time) 报文往返时间:发送数据 → 数据到达对方 → 对方回复 ACK → ACK 回到本机这一整个过程花费的时间。
-
RTO(Retransmission TimeOut) 超时重传时间 :发送方等待 ACK 的最大时间。规则:RTO 必须略大于 RTT
(2)RTO 设置不合理会出现的问题
-
RTO 太大
-
等待时间过长
-
丢包后很久才重传
-
传输效率极低、延迟高
-
-
RTO 太小
-
数据还在正常传输
-
还没等到 ACK 回来就重传
-
造成大量无效重传
-
浪费带宽、加剧网络拥塞
-
(3)超时间隔加倍机制(指数退避)
当同一个数据段多次超时,TCP 不会一直以相同 RTO 重试,而是:
-
第 1 次超时:RTO = 原值
-
第 2 次超时:RTO × 2
-
第 3 次超时:RTO × 4
-
第 4 次超时:RTO × 8
-
以此类推...... 呈指数级增长
目的:
-
网络连续丢包 → 判定网络拥塞
-
加倍 RTO → 降低发送频率
-
缓解网络拥塞,避免雪上加霜
2. 快速重传(更高效、更智能)
快速重传不需要等待定时器超时 ,依靠接收方的反馈,立刻重传。
(1)触发条件
接收方收到乱序报文:
-
期望收到序号 200
-
结果先收到了 300、400
-
说明 200 丢失
(2)接收方行为
接收方不会等待,而是:
-
连续发送 3 次重复 ACK(冗余 ACK)
-
三次 ACK 都确认同一个序号(如 200)
(3)发送方行为
发送方收到 3 次相同冗余 ACK:
-
立刻知道数据丢失
-
不等待定时器,马上重传
-
速度远快于超时重传
-
大幅降低网络延迟
八、TCP 流量控制(滑动窗口)
1. 作用
流量控制的核心目的:让发送方的发送速度,匹配接收方的接收 / 处理速度,防止发送方发送过快,导致接收方缓冲区被填满、数据被丢弃,最终引发大量重传、网络拥塞。
发送方不能任性发,必须看接收方的 "接收能力" 来发。
2. 滑动窗口原理
(1)窗口是什么
滑动窗口 = 允许发送方连续发送、无需等待确认的最大字节数量。
(2)接收窗口 rwnd(Receive Window)
-
由接收方维护
-
表示接收方当前还有多少空闲缓冲区
-
接收方会把自己的
rwnd写在 TCP 头部的窗口字段里,发给发送方 -
发送方必须严格遵守:已发送未确认的数据量 ≤ rwnd
(3)滑动窗口工作流程
-
接收方告诉发送方:"我现在窗口是 N"
-
发送方一次性最多发送 N 字节
-
接收方收到数据,放入缓冲区,交付应用程序
-
接收方处理完数据,缓冲区变空,窗口变大
-
接收方通过 ACK 报文把新窗口大小告诉发送方
-
发送方根据新窗口继续发送
(4)累计确认机制
TCP 不是对每个字节单独确认,而是累计确认:
-
ACK 确认号 = 期望收到的下一个字节序号
-
表示:这个序号之前的所有数据我都收到了
-
中间丢一个 ACK 不影响,后面的 ACK 可以 "顺带确认" 前面所有数据
(5)窗口为 0 处理
如果接收方缓冲区满,会发送:rwnd = 0 发送方停止发送数据,并启动**持续计时器(Persistent Timer)**定时发送窗口探测包,防止窗口更新消息丢失导致死锁。
3. 窗口大小计算(BDP 带宽延迟积)
为了让线路跑满、不浪费带宽,最优窗口大小由 BDP(Bandwidth-Delay Product) 决定。
公式
窗口大小(字节)= 带宽(字节/秒)× RTT(秒)
解释
-
带宽:线路最大传输速度
-
RTT:数据来回一次的时间
-
BDP 代表:链路上最多可以同时 "在途" 的数据量
-
窗口 ≥ BDP 才能让线路跑满
示例
带宽 100Mbps = 12.5MB/sRTT = 50ms = 0.05s
窗口大小 = 12.5 × 0.05 = 0.625MB = 625KB
4. 小窗口处理机制
(1)什么是小窗口问题
接收方处理慢,每次只腾出很少的空间 (比如几十字节),就通告发送方发送,导致:大量 TCP + IP 头部(40 字节以上) + 极少数据(几个字节)→ 传输效率极低,浪费带宽。
(2)接收方策略(避免通告小窗口)
-
设置最小窗口阈值
-
通常取
MSS和1/2 缓冲区大小中较小的一个 -
当可用窗口 < 最小值时,通告窗口为 0
-
直到缓冲区腾出足够空间,再打开窗口
(3)发送方策略(避免发送小包)
不马上发送微小数据,而是积攒数据,直到满足任一条件才发送:
-
数据量 ≥ MSS
-
窗口大小 ≥ MSS
-
收到之前发送数据的 ACK
-
延时计时器超时(最多等 200ms)
这套机制叫:Nagle 算法 + Clark 算法 共同解决糊涂窗口综合征(Silly Window Syndrome)。
九、TCP 拥塞控制
1. 拥塞控制 vs 流量控制
流量控制(端到端)
-
解决:发送方 vs 接收方 的速度匹配问题
-
目的:防止接收方缓冲区被撑爆
-
依靠:rwnd 接收窗口
-
场景:接收方处理不过来
拥塞控制(发送方 vs 网络)
-
解决:发送方 vs 整个网络 的承载能力问题
-
目的:防止网络路由器 / 链路被塞满、丢包、延迟飙升
-
依靠:cwnd 拥塞窗口
-
场景:网络堵车、路由器丢包
流量控制是别把对方搞崩 ;拥塞控制是别把网络搞崩。
2. TCP 拥塞判断标准
TCP 并不能 "看见" 网络堵不堵,只能通过丢包现象推断拥塞:
(1)超时重传
-
发送方定时器超时,没收到任何 ACK
-
判定:网络严重拥塞 → 大量丢包
-
处理:最强降速
(2)收到 3 次冗余 ACK(重复 ACK)
-
收到 3 个一模一样的确认号
-
判定:网络轻度拥塞 → 仅少量丢包
-
处理:温和降速
3. 拥塞窗口 cwnd(Congestion Window)
-
由发送方独自维护
-
含义:当前网络环境能承受的 "最大可发送数据量"
-
网络好 → cwnd 变大
-
网络差 → cwnd 急剧变小
最终发送窗口(最重要公式)
实际发送窗口 = min( rwnd(接收窗口), cwnd(拥塞窗口) )
-
谁小听谁的
-
既要尊重接收方能力,也要尊重网络能力
4. 拥塞控制三大算法
(1)慢启动 slow-start
刚建立连接时,不知道网络状况,从小速度开始试探
-
初始值 :
cwnd = 1 MSS -
规则 :每收到 1 个新 ACK,cwnd += 1 MSS
-
增长速度 :**指数增长(非常快)**RTT 1 → 1→2RTT 2 → 2→4RTT 3 → 4→8RTT 4 → 8→16
-
停止条件 :
cwnd >= ssthresh(慢启动门限)→ 切换为拥塞避免
名字是慢启动,其实增长非常快
(2)拥塞避免 congestion avoidance
网络试探差不多了,不能再疯涨,改为平稳增长,避免拥塞
-
触发条件 :
cwnd >= ssthresh -
规则 :一个 RTT 内,cwnd 只增加 1 MSS
-
增长速度 :线性增长(缓慢平稳)
-
目的:缓慢逼近网络极限,既尽量跑满带宽,又不轻易引发拥塞。
(3)快速恢复 fast recovery
轻度拥塞(3 次冗余 ACK)时使用
-
触发条件 :收到 3 次重复 ACK
-
第一步 :
ssthresh = cwnd / 2(门限直接砍半) -
第二步 :
cwnd = ssthresh(部分实现:cwnd = ssthresh + 3 MSS) -
第三步 :直接进入拥塞避免阶段 不降到 1,不重新慢启动
特点:快速恢复、不中断传输、效率高
5. 超时拥塞处理(最严重级别)
出现超时 = 网络严重拥塞,必须大幅降速
-
ssthresh = cwnd / 2
-
cwnd = 1 MSS
-
重新开始慢启动
这是 TCP 最强的 "刹车"。