TCP/IP 协议族
TCP/IP 协议族是互联网的核心协议栈,它定义了计算机如何在网络中通信。与 OSI 七层模型不同,TCP/IP 是实际使用的协议模型,更加实用和精简。
TCP/IP 四层模型
TCP/IP 模型将网络通信分为四层,每一层包含多个具体协议:
+------------------+------------------------------------------+
| 应用层 | HTTP, FTP, SMTP, DNS, SSH, Telnet |
+------------------+------------------------------------------+
| 传输层 | TCP, UDP |
+------------------+------------------------------------------+
| 网际层 | IP, ICMP, ARP, RARP, IGMP |
+------------------+------------------------------------------+
| 网络接口层 | Ethernet, PPP, Token Ring, WiFi |
+------------------+------------------------------------------+
各层职责
应用层:直接为用户应用提供服务,定义应用程序间通信的协议。包括 HTTP(Web)、FTP(文件传输)、SMTP(邮件)、DNS(域名解析)等。
传输层:提供端到端的数据传输服务。TCP 提供可靠传输,UDP 提供快速但不可靠的传输。
网际层:负责主机间的数据传输,处理路由选择和 IP 地址。IP 协议是这一层的核心。
网络接口层:处理物理网络上的数据传输,包括硬件驱动和物理介质访问。
TCP/IP 与 OSI 的对应关系
两种模型可以相互映射,但 TCP/IP 更贴近实际:
| OSI 模型 | TCP/IP 模型 | 典型协议 |
|---|---|---|
| 应用层、表示层、会话层 | 应用层 | HTTP、FTP、DNS |
| 传输层 | 传输层 | TCP、UDP |
| 网络层 | 网际层 | IP、ICMP、ARP |
| 数据链路层、物理层 | 网络接口层 | Ethernet、WiFi |
TCP/IP 将 OSI 的上三层合并为应用层,下两层合并为网络接口层。这种设计更简洁,也更符合实际协议的实现方式。
网际层协议
IP 协议
IP(Internet Protocol,网际协议)是 TCP/IP 的核心协议,负责主机间的数据传输。
主要功能:
- 寻址:为每个网络接口分配唯一的 IP 地址
- 路由:根据路由表选择数据包的传输路径
- 分片:当数据包超过 MTU 时进行分片处理
IPv4 与 IPv6:
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32 位 | 128 位 |
| 地址数量 | 约 43 亿 | 约 3.4×10^38 |
| 表示方式 | 点分十进制 | 冒号十六进制 |
| 首部长度 | 20-60 字节 | 40 字节固定 |
| 校验和 | 有 | 无 |
| 分片 | 路由器可分片 | 只有源主机分片 |
IPv6 的设计解决了 IPv4 地址枯竭的问题,同时简化了首部格式,提高了处理效率。
IP 地址分类(IPv4):
传统 IPv4 地址分为五类:
| 类别 | 范围 | 网络号 | 主机号 | 用途 |
|---|---|---|---|---|
| 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 | - | - | 保留地址 |
现代网络使用 CIDR(无类别域间路由)替代传统分类,通过子网掩码灵活划分网络。例如 192.168.1.0/24 表示前 24 位是网络号。
特殊 IP 地址:
127.0.0.1:本地回环地址,用于本机测试0.0.0.0:表示本机所有 IP 地址255.255.255.255:本地广播地址192.168.x.x、10.x.x.x、172.16.x.x - 172.31.x.x:私有地址,不能在公网使用
ICMP 协议
ICMP(Internet Control Message Protocol,互联网控制消息协议)用于传递差错报文和控制信息。
主要用途:
- 报告 IP 数据包传输中的错误
- 网络诊断和探测
- 路由重定向
常见 ICMP 消息类型:
| 类型 | 消息 | 说明 |
|---|---|---|
| 0 | Echo Reply | ping 响应 |
| 3 | Destination Unreachable | 目标不可达 |
| 8 | Echo Request | ping 请求 |
| 11 | Time Exceeded | TTL 超时 |
| 5 | Redirect | 路由重定向 |
ping 命令原理:
ping 使用 ICMP Echo Request 和 Echo Reply 消息测试网络连通性:
ping www.example.com
# 发送 ICMP Echo Request
# 接收 ICMP Echo Reply
# 计算往返时间(RTT)
traceroute 原理:
traceroute 利用 IP 的 TTL 字段和 ICMP Time Exceeded 消息追踪路由路径:
- 发送 TTL=1 的数据包,第一个路由器收到后 TTL 减为 0,返回 ICMP Time Exceeded
- 发送 TTL=2 的数据包,第二个路由器返回 ICMP Time Exceeded
- 依此类推,直到到达目的地
ARP 协议
ARP(Address Resolution Protocol,地址解析协议)将 IP 地址解析为 MAC 地址。
工作过程:
当主机需要发送数据给同一网络中的目标主机时:
- 检查本地 ARP 缓存是否有目标 IP 对应的 MAC 地址
- 如果没有,广播 ARP 请求:"谁有 IP 地址 X.X.X.X?请告诉 Y.Y.Y.Y"
- 目标主机收到请求后,单播 ARP 响应,告知自己的 MAC 地址
- 发送方将 IP-MAC 映射存入 ARP 缓存,后续直接使用
ARP 缓存:
# 查看 ARP 缓存
arp -a
# 输出示例
Interface: 192.168.1.100
Internet Address Physical Address Type
192.168.1.1 00-11-22-33-44-55 dynamic
192.168.1.255 ff-ff-ff-ff-ff-ff static
ARP 缓存有生存时间(通常几分钟),过期后需要重新解析。
RARP 协议:
RARP(Reverse ARP)是 ARP 的逆向,将 MAC 地址解析为 IP 地址。主要用于无盘工作站获取 IP 地址,现在已被 DHCP 取代。
IGMP 协议
IGMP(Internet Group Management Protocol,互联网组管理协议)用于管理 IP 组播组的成员关系。
组播概念:
组播是一种一对多的通信方式,发送方只需发送一份数据,网络复制转发给所有接收者。组播地址范围是 224.0.0.0 - 239.255.255.255。
IGMP 功能:
- 主机向路由器报告组成员身份
- 路由器查询本地网络的组成员
- 支持组成员的动态加入和离开
传输层协议
TCP 协议
TCP(Transmission Control Protocol,传输控制协议)提供面向连接、可靠的字节流传输服务。
TCP 特点:
- 面向连接:传输数据前需要建立连接
- 可靠传输:通过确认、重传机制保证数据正确到达
- 面向字节流:数据被视为无结构的字节序列
- 全双工:连接双方可以同时发送和接收数据
- 流量控制:防止发送方淹没接收方
- 拥塞控制:根据网络状况调整发送速率
TCP 报文段格式:
0 16 31
+----------------+--------------------------------+
| 源端口 | 目的端口 |
+----------------+--------------------------------+
| 序号 |
+------------------------------------------------+
| 确认号 |
+--------+-------+-------+------------------------+
| 首部长度| 保留 | 标志位| 窗口大小 |
+----------------+--------------------------------+
| 校验和 | 紧急指针 |
+----------------+--------------------------------+
| 选项(可选) |
+------------------------------------------------+
| 数据 |
+------------------------------------------------+
关键字段:
- 序号(Sequence Number):数据字节流的序号,用于重组和确认
- 确认号(Acknowledgment Number):期望收到的下一个字节序号
- 标志位:
- SYN:发起连接
- ACK:确认有效
- FIN:关闭连接
- RST:重置连接
- PSH:推送数据
- URG:紧急数据
- 窗口大小:接收方的接收缓冲区大小,用于流量控制
三次握手:
TCP 建立连接需要三次握手:
客户端 服务器
| |
| SYN=1, seq=x |
|--------------------------------------->|
| | (SYN_RCVD)
(SYN_SENT) |
| SYN=1, ACK=1, seq=y, ack=x+1 |
|<---------------------------------------|
| |
| ACK=1, seq=x+1, ack=y+1 |
|--------------------------------------->|
| | (ESTABLISHED)
(ESTABLISHED) |
为什么是三次握手?
两次握手可能导致已失效的连接请求突然到达服务器,造成错误连接。假设客户端发送的连接请求在网络中滞留,客户端超时重发并完成通信后,滞留的请求才到达服务器。如果是两次握手,服务器会误认为新的连接请求,建立无效连接。三次握手可以防止这种情况。
四次挥手:
TCP 关闭连接需要四次挥手:
客户端 服务器
| |
| FIN=1, seq=u |
|--------------------------------------->|
| |
(FIN_WAIT_1) |
| ACK=1, seq=v, ack=u+1 |
|<---------------------------------------|
| |
(FIN_WAIT_2) |
| FIN=1, ACK=1, seq=w, ack=u+1 |
|<---------------------------------------|
| |
| ACK=1, seq=u+1, ack=w+1 |
|--------------------------------------->|
| |
(TIME_WAIT) |
| |
(CLOSED) (CLOSED)
为什么是四次挥手?
TCP 是全双工通信,每个方向的连接需要单独关闭。服务器收到客户端的 FIN 后,可能还有数据要发送,所以先回复 ACK,等数据发送完再发送自己的 FIN。
TIME_WAIT 状态:
主动关闭方在发送最后一个 ACK 后进入 TIME_WAIT 状态,等待 2MSL(Maximum Segment Lifetime)后才真正关闭。这是为了:
- 确保最后的 ACK 能够到达对方
- 让旧连接的重复数据在网络中消失
UDP 协议
UDP(User Datagram Protocol,用户数据报协议)提供无连接、不可靠的数据报传输服务。
UDP 特点:
- 无连接:发送数据前不需要建立连接
- 不可靠:不保证数据到达,不保证顺序
- 面向报文:保留报文边界,应用层给什么就发什么
- 无拥塞控制:网络拥塞时不会降低发送速率
- 支持组播和广播:可以一次发送给多个接收者
UDP 数据报格式:
0 16 31
+----------------+--------------------------------+
| 源端口 | 目的端口 |
+----------------+--------------------------------+
| 长度 | 校验和 |
+----------------+--------------------------------+
| 数据 |
+------------------------------------------------+
UDP 首部只有 8 字节,比 TCP 的 20 字节小很多,开销更低。
UDP 应用场景:
- 实时音视频:视频会议、直播,丢包可以接受,延迟不能接受
- 在线游戏:需要快速响应,偶尔丢包可以容忍
- DNS 查询:简单的请求响应,UDP 更高效
- DHCP:地址分配,广播需要 UDP
TCP 与 UDP 对比:
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 不可靠 |
| 顺序 | 有序 | 无序 |
| 流量控制 | 有 | 无 |
| 拥塞控制 | 有 | 无 |
| 首部开销 | 20 字节 | 8 字节 |
| 传输方式 | 字节流 | 数据报 |
| 适用场景 | 文件传输、邮件 | 实时通信、DNS |
应用层协议
HTTP 协议
HTTP(Hypertext Transfer Protocol,超文本传输协议)是 Web 的基础协议。
HTTP 特点:
- 基于请求-响应模型
- 无状态(每个请求独立)
- 基于 TCP,默认端口 80
请求方法:
| 方法 | 用途 |
|---|---|
| GET | 获取资源 |
| POST | 提交数据 |
| PUT | 更新资源 |
| DELETE | 删除资源 |
| HEAD | 获取响应头 |
| OPTIONS | 查询支持的方法 |
状态码:
| 类别 | 范围 | 含义 |
|---|---|---|
| 1xx | 100-199 | 信息性响应 |
| 2xx | 200-299 | 成功 |
| 3xx | 300-399 | 重定向 |
| 4xx | 400-499 | 客户端错误 |
| 5xx | 500-599 | 服务器错误 |
常见状态码:200(成功)、301(永久重定向)、302(临时重定向)、404(未找到)、500(服务器内部错误)。
DNS 协议
DNS(Domain Name System,域名系统)将域名解析为 IP 地址。
DNS 查询过程:
- 浏览器检查本地缓存
- 查询本地 DNS 服务器
- 本地 DNS 服务器查询根域名服务器
- 根域名服务器返回顶级域名服务器地址
- 本地 DNS 服务器查询顶级域名服务器
- 顶级域名服务器返回权威域名服务器地址
- 本地 DNS 服务器查询权威域名服务器
- 权威域名服务器返回 IP 地址
DNS 记录类型:
| 类型 | 用途 |
|---|---|
| A | 域名到 IPv4 地址 |
| AAAA | 域名到 IPv6 地址 |
| CNAME | 域名别名 |
| MX | 邮件服务器 |
| NS | 域名服务器 |
| TXT | 文本记录 |
| SOA | 授权起始记录 |
小结
TCP/IP 协议族是互联网的核心:
- 四层模型:应用层、传输层、网际层、网络接口层
- 网际层:IP(寻址路由)、ICMP(差错报告)、ARP(地址解析)
- 传输层:TCP(可靠传输)、UDP(快速传输)
- 应用层:HTTP、DNS、FTP、SMTP 等
理解 TCP/IP 协议族的工作原理,是网络编程和问题排查的基础。下一章我们将深入学习 TCP 协议的细节。
练习
- 解释 TCP 三次握手的过程和原因
- 比较 TCP 和 UDP 的区别及各自适用场景
- 说明 ARP 协议的工作过程
- 描述 DNS 域名解析的完整过程