网络协议全景图

从物理信号到应用数据,完整剖析各层协议的数据包结构与字段含义

📦 数据封装过程

应用层
应用数据 Data
Data
↓ + 应用层头
传输层
TCP/UDP头 + Data
Segment(段)
↓ + 网络层头
网络层
IP头 + TCP/UDP头 + Data
Packet(包)
↓ + 数据链路层头/尾
数据链路层
↓ 转换为
物理层
比特流 Bits(光/电/无线电信号)
Bits
源地址/端口
目标地址/端口
序列号/协议号
标识/标志
校验和
数据载荷
7

应用层 Application

为用户提供网络服务接口
HTTP DNS DHCP SMTP FTP SSH

🌐 职责

直接为用户的应用程序提供服务,如网页浏览、电子邮件、文件传输等。协议数据单元为 PDU(Protocol Data Unit)。

6

表示层 Presentation

数据格式转换与加密
TLS/SSL JPEG GIF ASCII

🔄 职责

负责数据的编码、格式转换、压缩和加密。确保应用层数据在不同系统间的互操作性。

5

会话层 Session

管理通信会话
NetBIOS RPC PPTP

🔌 职责

建立、管理和终止应用程序之间的会话。处理会话连接、同步和对话控制。

4

传输层 Transport

端到端可靠传输
TCP UDP DCCP SCTP

🚚 职责

提供端到端的数据传输服务。负责分段、流量控制、可靠传输等。协议数据单元为 Segment。

3

网络层 Network

路由与寻址
IP ICMP ARP RARP IGMP

🗺️ 职责

负责逻辑寻址(IP)和路由选择。决定数据包从源到目的地的最佳路径。协议数据单元为 Packet。

1

物理层 Physical

比特流传输
电信号 光信号 无线电

职责

负责在物理介质上传输原始比特流。定义电压、电流、光脉冲、无线电频率等物理特性。

1

物理层 Physical Layer

OSI第1层 · 比特流传输

物理层传输介质

有线介质
  • 双绞线(Cat5/Cat6)
  • 同轴电缆
  • 光纤(单模/多模)
无线介质
  • 无线电波(WiFi)
  • 微波
  • 红外线、蓝牙
// 比特编码示例

// 10BASE-T (以太网)
编码方式:曼彻斯特编码
速率:10 Mbps
最大段长:100米

// 100BASE-TX (快速以太网)
编码方式:4B/5B + MLT-3
速率:100 Mbps
最大段长:100米

// 1000BASE-T (千兆以太网)
编码方式:PAM-5
速率:1 Gbps
最大段长:100米

// 光纤
编码方式:NRZ, PAM-4
速率:1/10/40/100 Gbps
最大距离:550m~80km
3

网络层 Network Layer

OSI第3层 · IP协议 · 路由

📦 IPv4 数据报头部

IPv4 头部结构(20-60字节)

版本
4bit
IPv4=4, IPv6=6
IHL
4bit
头部长度(×4字节)
DSCP
6bit
差分服务代码点
ECN
2bit
显式拥塞通知
总长度
16bit
报文总字节数
标识
16bit
分片标识
标志
3bit
MF/DF位
片偏移
13bit
分片位置
TTL
8bit
生存时间
协议
8bit
上层协议
校验和
16bit
头部校验
源IP
32bit
192.168.1.100
目标IP
32bit
8.8.8.8
选项
0-40B
可选字段
字段 长度 示例 说明
版本 4 bit 4 IP协议版本,IPv4=4, IPv6=6
IHL 4 bit 5 IP头长度,以4字节为单位。5表示20字节(无选项)
DSCP 6 bit 0x00 差分服务代码点,用于QoS流量优先级
总长度 16 bit 60 整个IP报文的长度,包括头部和数据,最大65535字节
标识 16 bit 0x1B3C 分片时用于标识同一报文的各个分片
标志 3 bit DF=1, MF=0 RF(保留)、DF(不分片)、MF(更多分片)
片偏移 13 bit 0 本分片在原始报文中的偏移量,以8字节为单位
TTL 8 bit 64 生存时间,每经过一个路由减1,为0时丢弃(防止环路)
协议 8 bit 6 (TCP) 上层协议:1=ICMP, 6=TCP, 17=UDP, 47=GRE
校验和 16 bit 0xABCD IP头部的校验和,用于检测传输错误
源IP 32 bit 192.168.1.1 发送方的IP地址
目标IP 32 bit 8.8.8.8 接收方的IP地址
// IPv4 协议字段常用值
1   // ICMP (Internet Control Message Protocol)
2   // IGMP (Internet Group Management Protocol)
6   // TCP (Transmission Control Protocol)
17  // UDP (User Datagram Protocol)
41  // IPv6封装
47  // GRE (Generic Routing Encapsulation)
50  // ESP (Encapsulating Security Payload)
51  // AH (Authentication Header)
58  // ICMPv6 (IPv6的ICMP)
89  // OSPF (Open Shortest Path First)
132 // SCTP (Stream Control Transmission Protocol)

// 常见TTL值
64   // Linux默认
128  // Windows默认
255  // 网络设备/Unix默认

📦 IPv6 数据报头部(简化设计)

IPv6 头部结构(40字节固定)

版本
4bit
IPv6=6
流量类别
8bit
QoS优先级
流标签
20bit
流量标识
载荷长度
16bit
除头部外的字节数
下一头部
8bit
扩展头/上层协议
跳限制
8bit
类似TTL
源地址
128bit
2001:0db8::1
目标地址
128bit
2001:4860::8888
IPv6 vs IPv4 主要区别:
  • 地址空间从32位扩展到128位
  • 简化的固定40字节头部(无分片字段在基础头部)
  • 内置分片支持(通过扩展头部)
  • 取消了头部校验和(由上层协议负责)
  • 扩展头部机制支持更多选项

📡 ICMP 协议(互联网控制消息协议)

ICMP用于传递控制消息和错误报告,最常见的应用是 ping 命令。

ICMP 报文结构

类型
8bit
ICMP类型
代码
8bit
子类型
校验和
16bit
报文校验
数据
可变
类型相关信息
类型 代码 说明 用途
0 0 Echo Reply(回显应答) Ping响应
3 0-15 Destination Unreachable(目标不可达) 路由/端口问题
8 0 Echo Request(回显请求) Ping请求
11 0 Time Exceeded(超时) Tracert/traceroute

🔍 ARP 协议(地址解析协议)

ARP用于将IP地址解析为MAC地址,实现局域网内的通信。

ARP 请求/应答 报文结构(28字节)

硬件类型
2B
1=以太网
协议类型
2B
0x0800=IPv4
HW大小
1B
MAC=6
Proto大小
1B
IP=4
操作码
2B
1=请求,2=应答
发送者MAC
6B
源硬件地址
发送者IP
4B
源协议地址
目标MAC
6B
目标硬件地址
目标IP
4B
目标协议地址
4

传输层 Transport Layer

OSI第4层 · TCP · UDP

🔄 TCP 段结构

TCP 头部结构(20-60字节)

源端口
16bit
0-65535
目标端口
16bit
0-65535
序列号
32bit
Seq
确认号
32bit
Ack
偏移
4bit
头长度
标志位
6bit
SYN|ACK|FIN...
窗口大小
16bit
rwnd
校验和
16bit
Checksum
紧急指针
16bit
URG
选项
0-40B
MSS/窗口扩大
字段 长度 说明
源端口 16 bit 发送方应用程序端口号,范围 0-65535
目标端口 16 bit 接收方应用程序端口号,范围 0-65535
序列号 32 bit 本报文数据的第一个字节的序号,用于数据分片和重组
确认号 32 bit 期望收到的下一个字节的序号,表示该序号之前的数据都已收到
标志位 6 bit SYN(建立连接), ACK(确认), FIN(结束), RST(重置), PSH(推送), URG(紧急)
窗口大小 16 bit 接收方缓存区大小,用于流量控制
校验和 16 bit 伪头部+TCP头部+数据的校验和
// TCP 标志位详解
SYN - Synchronize   // 请求建立连接,包含初始序列号
ACK - Acknowledge   // 确认应答,表示确认号字段有效
FIN - Finish        // 请求关闭连接
RST - Reset         // 强制复位连接
PSH - Push          // 立即交付给上层应用,不等缓冲区填满
URG - Urgent        // 紧急指针有效,标记优先数据

// TCP 选项(常见)
0   // EOL - 选项列表结束
1   // NOP - 无操作,用于对齐
2   // MSS - 最大报文段长度
3   // Window Scale - 窗口扩大因子
4   // SACK Permitted - 选择性确认
5   // SACK - 选择性确认块
8   // Timestamp - 时间戳

UDP 数据报结构

UDP 头部结构(固定8字节)

源端口
16bit
可选
目标端口
16bit
必填
长度
16bit
头部+数据
校验和
16bit
可选(IPv6必填)
数据载荷
可变
应用层数据
UDP vs TCP 核心对比:
  • UDP固定8字节头部 vs TCP 20-60字节头部
  • UDP无连接 vs TCP三次握手建立连接
  • UDP无确认无重传 vs TCP可靠传输
  • UDP无流量/拥塞控制 vs TCP滑动窗口
  • UDP保留消息边界 vs TCP字节流

🚪 常用端口号速查

21FTP
22SSH
23Telnet
25SMTP
53DNS
67/68DHCP
80HTTP
110POP3
143IMAP
443HTTPS
3306MySQL
5432PostgreSQL
6379Redis
27017MongoDB
7

应用层 Application Layer

OSI第7层 · HTTP · DNS · DHCP

🔤 DNS 协议(域名系统)

DNS将域名解析为IP地址,通常使用UDP 53端口。

DNS 报文结构

事务ID
16bit
标识查询/响应
标志
16bit
QR/Opcode/AA/TC/RD/RA/Z/RCODE
问题数
16bit
QDCOUNT
回答数
16bit
ANCOUNT
权威数
16bit
NSCOUNT
附加数
16bit
ARCOUNT
// DNS 标志位结构
QR   (1bit)  // 0=查询, 1=响应
Opcode (4bit) // 0=标准查询, 1=反向查询, 2=服务器状态请求
AA   (1bit)  // 权威回答
TC   (1bit)  // 截断(响应过长)
RD   (1bit)  // 递归查询期望
RA   (1bit)  // 递归可用
Z    (3bit)  // 保留
RCODE (4bit) // 响应码: 0=成功, 1=格式错误, 2=服务器失败, 3=名字错误, ...

// DNS 查询类型
1   // A - IPv4地址
28  // AAAA - IPv6地址
2   // NS - 域名服务器
5   // CNAME - 别名
15  // MX - 邮件交换
6   // SOA - 起始授权机构
12  // PTR - 指针记录(反向查询)

📝 DHCP 协议(动态主机配置)

DHCP用于自动分配IP地址,通常使用UDP 67(服务器)和68(客户端)端口。

DHCP 报文结构

操作码
1B
1=请求,2=应答
硬件类型
1B
1=以太网
硬件长度
1B
6=MAC长度
跳数
1B
中继计数
事务ID
4B
客户端生成
秒数
2B
已运行时间
标志
2B
广播标志
客户端IP
4B
ciaddr
你的IP
4B
yiaddr
服务器IP
4B
siaddr
中继IP
4B
giaddr
客户端MAC
16B
CHADDR (前6B有效)
选项
可变
DHCP消息类型等
// DHCP 消息类型(通过Options字段)
53  // DHCP Message Type
        // 1 = DHCPDISCOVER (客户端广播寻找服务器)
        // 2 = DHCPOFFER (服务器提供IP地址)
        // 3 = DHCPREQUEST (客户端请求IP)
        // 4 = DHCPDECLINE (客户端拒绝IP
        // 5 = DHCPACK (服务器确认)
        // 6 = DHCPNAK (服务器拒绝)
        // 7 = DHCPRELEASE (客户端释放IP)

54  // Server Identifier (服务器标识)
51  // IP Address Lease Time (租约时间)
1   // Subnet Mask (子网掩码)
3   // Router (默认网关)
6   // Domain Name Server (DNS服务器)
28  // Broadcast Address (广播地址)

// DHCP 工作流程(Discover/Offer/Request/Ack)
// 客户端 → 服务器: DHCPDISCOVER (广播)
// 服务器 → 客户端: DHCPOFFER (提供IP)
// 客户端 → 服务器: DHCPREQUEST (请求IP)
// 服务器 → 客户端: DHCPACK (确认分配)

🌐 HTTP 协议(超文本传输)

HTTP是Web的基础协议,目前主要版本是HTTP/1.1、HTTP/2和HTTP/3。

HTTP 请求报文结构

GET /index.html HTTP/1.1
请求行 (Request Line)
Host: www.example.com
请求头 (Headers)
User-Agent: Mozilla/5.0...
...
Accept: text/html,...
...
[空行]
请求体 (Body,可选)
POST数据等

HTTP 响应报文结构

HTTP/1.1 200 OK
状态行 (Status Line)
Content-Type: text/html
响应头 (Headers)
Content-Length: 1234
...
Cache-Control: max-age=3600
...
[空行]
<html>...</html>
响应体 (Body)
状态码 类别 说明 示例
1xx 信息 接收的请求正在处理 100 Continue
2xx 成功 请求成功接收和理解 200 OK, 201 Created
3xx 重定向 需要进一步操作完成请求 301 Moved, 304 Not Modified
4xx 客户端错误 请求语法错误或无法完成 400 Bad Request, 404 Not Found
5xx 服务器错误 服务器无法完成有效请求 500 Internal Error, 502 Bad Gateway
// HTTP 常用请求方法
GET     // 获取资源(幂等)
POST    // 提交数据(非幂等)
PUT     // 上传资源(幂等)
DELETE  // 删除资源(幂等)
PATCH   // 部分更新(非幂等)
HEAD    // 获取头部(类似GET但无body)
OPTIONS // 查询支持的方法

// HTTP 版本演进
HTTP/0.9  // 1991,仅GET,极其简单
HTTP/1.0  // 1996,引入请求头/响应头/状态码
HTTP/1.1  // 1999,长连接(Keep-Alive),缓存控制
HTTP/2    // 2015,多路复用,头部压缩,服务器推送
HTTP/3    // 2022,基于QUIC(UDP),0-RTT连接

📡 PING 命令原理

PING使用ICMP协议工作,通过发送Echo Request并接收Echo Reply来测试连通性。

// PING 工作流程

// 1. 发送方构造 ICMP Echo Request(Type=8, Code=0)
// 2. 目标主机收到后,构造 ICMP Echo Reply(Type=0, Code=0)
// 3. 发送方计算 RTT(往返时间)

// 实际数据包封装(以ping www.baidu.com为例)
// ┌────────────┬────────────┬────────────┬────────────┐
  // │  Ethernet  │    IP      │   ICMP     │   Data     │
  // │   Header   │   Header   │   Header   │            │
  // │  (14B)     │  (20B)     │  (8B)      │  (56B)     │
  // └────────────┴────────────┴────────────┴────────────┘

// ICMP Echo Request/Reply 结构
Type     // 8=请求, 0=应答
Code     // 0(请求/应答均为0)
Checksum // 校验和
Identifier // 标识符(用于匹配请求和应答)
Sequence // 序列号
Data     // 数据负载(通常包含发送时间戳)

📊 网络协议全景对比表

协议 层次 传输方式 端口/类型 头部大小 可靠性 主要用途
Ethernet 数据链路 类型: 0x0800 14B+4B 无可靠机制 局域网通信
IPv4 网络 数据包 协议字段 20-60B 无连接不可靠 全网寻址路由
IPv6 网络 数据包 下一头部 40B+扩展 无连接不可靠 新一代寻址
ICMP 网络 消息 协议: 1 8B+ 错误报告/诊断
ARP 网络 请求/应答 类型: 0x0806 28B IP→MAC解析
TCP 传输 协议: 6 20-60B 可靠连接 文件/网页/邮件
UDP 传输 数据报 协议: 17 8B 无连接不可靠 DNS/DHCP/直播
DNS 应用 查询/响应 UDP:53 12B+ 可TCP备份 域名解析
DHCP 应用 Discover/Offer UDP:67/68 236B+ 不可靠 动态IP分配
HTTP 应用 请求/响应 TCP:80/443 文本格式 依赖TCP Web访问