HCIP学习01 网络及基础协议

第一部分 简单阐述网络部分

一、数据通信基础:人类语言到电信号的转换

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. 分层的意义

  1. 更利于标准化:统一不同厂商设备的通信规则

  2. 各层独立发展:每层只负责自身功能,互不干扰,便于迭代优化

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. 封装过程

封装:从应用层开始,逐层给上层数据添加本层头部,直到数据链路层结束(物理层不封装,仅转换为比特流)。

封装步骤:
  1. 应用层:将人类语言封装为应用层数据(如 HTTP 报文),添加应用层头部

  2. 传输层 :给应用层数据添加传输层头部(源端口、目的端口),封装为数据段

    • 核心字段:源端口号、目的端口号(区分不同应用)
  3. 网络层 :给传输层数据段添加网络层头部(源 IP、目的 IP、协议号),封装为数据包

    • 核心字段:源 IP、目的 IP、协议号(区分上层协议:TCP=6、UDP=17、OSPF=89)
  4. 数据链路层 :给网络层数据包添加数据链路层头部(源 MAC、目的 MAC、类型字段),封装为数据帧

    • 核心字段:源 MAC、目的 MAC、类型字段(区分上层协议)
  5. 物理层:将数据帧转换为二进制比特流(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 步交互)

  1. 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 地址

  2. DHCP Offer(服务器→客户端,广播 / 单播)

    • 源 IP:服务器 IP,目的 IP:255.255.255.255 / 分配的 IP

    • 源 MAC:服务器 MAC,目的 MAC:客户端 MAC/FF-FF-FF-FF-FF-FF

    • UDP:源端口 67,目的端口 68

    • 作用:携带可用 IP 地址、子网掩码、网关、租期等参数

  3. 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

  4. 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 地址表转发数据帧:

  1. 学习:收到数据帧后,记录入接口 + 源 MAC 地址到 MAC 地址表

  2. 转发:根据数据帧中的目的 MAC 地址查询 MAC 地址表:

    • 若表中存在记录:单播转发,仅从对应接口发送

    • 若表中无记录 / 目的 MAC 为全 FF(广播):洪泛(除入接口外,向所有接口复制转发)

3. 路由器转发原理

路由器是网络层设备,基于路由表转发 IP 数据包:

  1. 收到 IP 数据包后,提取目的 IP 地址

  2. 查询自身路由表,匹配最长前缀路由条目

  3. 若存在匹配条目:从对应接口转发,封装新的 MAC 地址

  4. 若无匹配条目:直接丢弃数据包(默认)

七、获取目标 IP 地址的 4 种方式

1. 直接获取(手动指定)

  • 定义 :用户或管理员手动输入、配置目标服务器的固定公网 / 内网 IP 地址,不经过任何解析,直接使用。

  • 适用场景

    • 企业内部服务器、打印机、网关等固定 IP 设备

    • 测试环境、局域网内直连访问

    • 已知明确 IP,跳过 DNS 解析,提高访问速度

  • 优点:速度最快、无解析依赖、稳定可靠

  • 缺点:IP 变更后必须手动修改,不适合公网大规模服务

2. 域名访问(DNS 解析)

  • 定义 :用户输入域名(如 www.baidu.com ,系统自动通过 DNS 协议向 DNS 服务器发起查询,将域名映射为对应 IP 地址。

  • 完整解析流程

    1. 查浏览器缓存 → 查系统 Hosts 文件 → 查本地 DNS 缓存

    2. 递归查询 → 迭代查询(根 DNS → 顶级 DNS → 权威 DNS)

    3. 返回 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 连接。

完整访问四步流程

  1. TCP 三次握手 建立客户端与服务器之间可靠的、全双工的传输连接。

  2. 客户端发送 HTTP 请求浏览器封装 HTTP 请求报文(请求行、请求头、请求体)。

  3. 服务器处理并回复 HTTP 响应服务器解析请求 → 处理资源 → 返回状态码、响应头、网页数据。

  4. 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. 握手流程

  1. 客户端 → 服务器:SYN=1,seq=x

  2. 服务器 → 客户端:SYN=1,ACK=1,ack=x+1,seq=y

  3. 客户端 → 服务器:ACK=1,ack=y+1连接进入 ESTABLISHED 状态

2. 序号(seq)作用

  • 对传输的字节流编号排序

  • 保证数据不乱序

  • 为确认机制提供依据

3. PSH 推送标志位

  • 表示数据需要立即推送给应用层

  • 不缓存,直接上交

4. 连接建立状态变化

客户端状态

  1. CLOSED:初始关闭状态

  2. SYN_SENT:已发送 SYN,等待 SYN+ACK

  3. ESTABLISHED:连接建立完成

服务器状态

  1. CLOSED:初始关闭

  2. LISTEN:监听端口,等待客户端连接

  3. SYN_RCVD:已收到 SYN,回复 SYN+ACK

  4. ESTABLISHED:双向连接建立

5. TCP 异常连接处理

  • 访问无效端口 / 无服务端口

  • 服务器直接回复 RST 报文(重置位 = 1)

  • 立即中断连接,拒绝访问

五、TCP 四次挥手(连接断开)

  1. 挥手流程

  2. 主动方 → 被动方:FIN=1(请求关闭)

  3. 被动方 → 主动方:ACK=1(确认收到)

  4. 被动方 → 主动方:FIN=1(准备关闭)

  5. 主动方 → 被动方:ACK=1(确认关闭)

2. 断开连接状态变化

主动关闭方(先发 FIN)

  1. ESTABLISHED

  2. FIN_WAIT_1:已发 FIN,等待 ACK

  3. FIN_WAIT_2:已收 ACK,等待对方 FIN

  4. TIME_WAIT:等待 2MSL

  5. CLOSED:释放所有资源

被动关闭方

  1. ESTABLISHED

  2. CLOSE_WAIT:已收 FIN,回复 ACK

  3. LAST_ACK:等待最后一个 ACK

  4. CLOSED:关闭连接,释放资源

3. TIME_WAIT 状态作用(必须等待 2MSL)

  1. 确保最后一个 ACK 能到达对方

  2. 防止网络中残留旧报文干扰新连接

  3. 可靠关闭,避免异常断开

  4. 如果不等待,会导致对端收不到 ACK 而重传 FIN,最终收到 RST 异常断开

六、TCP 可靠传输四大机制

  1. 排序:序列号保证数据顺序

  2. 确认:ACK 确认收到数据

  3. 重传:丢失则自动补发

  4. 流控:控制发送速度,防止缓冲区溢出

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 设置不合理会出现的问题

  1. RTO 太大

    • 等待时间过长

    • 丢包后很久才重传

    • 传输效率极低、延迟高

  2. 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)滑动窗口工作流程

  1. 接收方告诉发送方:"我现在窗口是 N"

  2. 发送方一次性最多发送 N 字节

  3. 接收方收到数据,放入缓冲区,交付应用程序

  4. 接收方处理完数据,缓冲区变空,窗口变大

  5. 接收方通过 ACK 报文把新窗口大小告诉发送方

  6. 发送方根据新窗口继续发送

(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)接收方策略(避免通告小窗口)

  • 设置最小窗口阈值

  • 通常取 MSS1/2 缓冲区大小 中较小的一个

  • 当可用窗口 < 最小值时,通告窗口为 0

  • 直到缓冲区腾出足够空间,再打开窗口

(3)发送方策略(避免发送小包)

不马上发送微小数据,而是积攒数据,直到满足任一条件才发送:

  1. 数据量 ≥ MSS

  2. 窗口大小 ≥ MSS

  3. 收到之前发送数据的 ACK

  4. 延时计时器超时(最多等 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 最强的 "刹车"。

相关推荐
fengci.2 小时前
php反序列化(复习)(第四章)
android·开发语言·学习·php·android studio
此刻觐神2 小时前
IMX6ULL开发板学习-04(Linux磁盘管理相关命令)
linux·运维·学习
Fairy要carry2 小时前
实习07-混合大模型的学习
学习
华清远见IT开放实验室2 小时前
AI 算法核心知识清单(深度实战版1)
人工智能·python·深度学习·学习·算法·机器学习·ai
_李小白2 小时前
【OSG学习笔记】Day 40: EventCallback(事件回调)
笔记·学习
世人万千丶2 小时前
开源鸿蒙跨平台Flutter开发:步数统计应用
学习·flutter·华为·开源·harmonyos·鸿蒙
爱宇阳2 小时前
Supabase Self-Hosting with Docker 学习笔记
笔记·学习·docker
盟接之桥2 小时前
盟接之桥®说制造:从“制造”到“智造”,以品类品牌重塑制造业的生态未来
大数据·网络·人工智能·学习·制造
迷你可可小生2 小时前
图像视觉面经学习(一)
图像处理·人工智能·python·学习