TCP/IP 模型是一个四层网络架构,每一层在数据传输时都会对数据进行封装,添加相应的头部(和尾部)信息。以下是各层的封装格式及关键字段说明:
1. 应用层(Application Layer)
-
封装格式:取决于具体应用协议(如 HTTP、FTP、DNS、SMTP 等)。
-
示例:
- HTTP 请求:
GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0
- DNS 查询:
包含查询域名、记录类型(A、AAAA、MX 等)和事务 ID。
- HTTP 请求:
-
作用:定义数据内容和应用交互规则。
2. 传输层(Transport Layer)
- 协议:TCP 或 UDP。
- 封装格式:
- TCP 段(Segment):
| 源端口 (16 bits) | 目的端口 (16 bits) | | 序列号 (32 bits) | | 确认号 (32 bits) | | 头部长度 | 保留 | 控制标志 (SYN/ACK/FIN等) | 窗口大小 (16 bits) | | 校验和 (16 bits) | 紧急指针 (16 bits) | | 选项 (可选) | | 数据 (应用层数据) |
- UDP 数据报(Datagram):
| 源端口 (16 bits) | 目的端口 (16 bits) | | 长度 (16 bits) | 校验和 (16 bits) | | 数据 (应用层数据) |
- TCP 段(Segment):
- 关键字段:
- 端口号:标识应用进程(如 80 用于 HTTP)。
- TCP 特有:序列号、确认号、控制标志(可靠传输)。
- UDP 更简单,无连接和可靠性保证。
3. 网络层(Internet Layer)
- 协议:IP(IPv4 或 IPv6)。
- 封装格式(IPv4 数据包):
| 版本 (4 bits) | 头部长度 (4 bits) | 服务类型 (8 bits) | 总长度 (16 bits) | | 标识 (16 bits) | 标志 (3 bits) | 片偏移 (13 bits) | | 生存时间 TTL (8 bits) | 协议 (8 bits, e.g., TCP=6, UDP=17) | 头部校验和 (16 bits) | | 源 IP 地址 (32 bits) | | 目的 IP 地址 (32 bits) | | 选项 (可选) | | 数据 (传输层段) |
- 关键字段:
- 源/目的 IP 地址:标识主机。
- 协议字段:指示上层协议(TCP/UDP)。
- TTL:防止数据包无限循环。
4. 网络接口层(Link Layer)
- 协议:以太网(Ethernet)、Wi-Fi(802.11)、PPP 等。
- 封装格式(以太网帧):
| 前导码 (7 bytes) | 帧开始符 (1 byte) | | 目的 MAC 地址 (6 bytes) | 源 MAC 地址 (6 bytes) | | 类型 (2 bytes, e.g., IPv4=0x0800, ARP=0x0806) | | 数据 (IP 数据包) | | 帧校验序列 FCS (4 bytes, CRC校验) |
- 关键字段:
- MAC 地址:标识本地网络中的设备。
- 类型字段:指示上层协议(如 IPv4 或 ARP)。
- FCS:错误检测。
完整封装流程示例(HTTP over TCP/IP)
- 应用层:HTTP 请求 → 添加 HTTP 头部。
- 传输层:将 HTTP 数据封装为 TCP 段 → 添加源/目的端口、序列号等。
- 网络层:将 TCP 段封装为 IP 数据包 → 添加源/目的 IP 地址。
- 链路层:将 IP 数据包封装为以太网帧 → 添加源/目的 MAC 地址和 FCS。
最终数据通过物理介质(如网线)传输,接收方逐层解封装。
关键点总结
- 分层封装:每层添加自己的头部,形成“洋葱式”结构。
- 协议标识:
- 链路层通过类型字段标识网络层协议(如 IPv4)。
- 网络层通过协议字段标识传输层协议(如 TCP)。
- 传输层通过端口号标识应用层协议(如 HTTP 的 80 端口)。
- MTU 限制:链路层帧大小有限(如以太网默认 1500 字节),超长的 IP 数据包会被分片。