跳到主要内容

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

特性IPv4IPv6
地址长度32 位128 位
地址数量约 43 亿约 3.4×10^38
表示方式点分十进制冒号十六进制
首部长度20-60 字节40 字节固定
校验和
分片路由器可分片只有源主机分片

IPv6 的设计解决了 IPv4 地址枯竭的问题,同时简化了首部格式,提高了处理效率。

IP 地址分类(IPv4)

传统 IPv4 地址分为五类:

类别范围网络号主机号用途
A1.0.0.0 - 126.255.255.2558 位24 位大型网络
B128.0.0.0 - 191.255.255.25516 位16 位中型网络
C192.0.0.0 - 223.255.255.25524 位8 位小型网络
D224.0.0.0 - 239.255.255.255--组播地址
E240.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.x10.x.x.x172.16.x.x - 172.31.x.x:私有地址,不能在公网使用

ICMP 协议

ICMP(Internet Control Message Protocol,互联网控制消息协议)用于传递差错报文和控制信息。

主要用途

  • 报告 IP 数据包传输中的错误
  • 网络诊断和探测
  • 路由重定向

常见 ICMP 消息类型

类型消息说明
0Echo Replyping 响应
3Destination Unreachable目标不可达
8Echo Requestping 请求
11Time ExceededTTL 超时
5Redirect路由重定向

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 消息追踪路由路径:

  1. 发送 TTL=1 的数据包,第一个路由器收到后 TTL 减为 0,返回 ICMP Time Exceeded
  2. 发送 TTL=2 的数据包,第二个路由器返回 ICMP Time Exceeded
  3. 依此类推,直到到达目的地

ARP 协议

ARP(Address Resolution Protocol,地址解析协议)将 IP 地址解析为 MAC 地址。

工作过程

当主机需要发送数据给同一网络中的目标主机时:

  1. 检查本地 ARP 缓存是否有目标 IP 对应的 MAC 地址
  2. 如果没有,广播 ARP 请求:"谁有 IP 地址 X.X.X.X?请告诉 Y.Y.Y.Y"
  3. 目标主机收到请求后,单播 ARP 响应,告知自己的 MAC 地址
  4. 发送方将 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)后才真正关闭。这是为了:

  1. 确保最后的 ACK 能够到达对方
  2. 让旧连接的重复数据在网络中消失

UDP 协议

UDP(User Datagram Protocol,用户数据报协议)提供无连接、不可靠的数据报传输服务。

UDP 特点

  • 无连接:发送数据前不需要建立连接
  • 不可靠:不保证数据到达,不保证顺序
  • 面向报文:保留报文边界,应用层给什么就发什么
  • 无拥塞控制:网络拥塞时不会降低发送速率
  • 支持组播和广播:可以一次发送给多个接收者

UDP 数据报格式

 0               16                              31
+----------------+--------------------------------+
| 源端口 | 目的端口 |
+----------------+--------------------------------+
| 长度 | 校验和 |
+----------------+--------------------------------+
| 数据 |
+------------------------------------------------+

UDP 首部只有 8 字节,比 TCP 的 20 字节小很多,开销更低。

UDP 应用场景

  • 实时音视频:视频会议、直播,丢包可以接受,延迟不能接受
  • 在线游戏:需要快速响应,偶尔丢包可以容忍
  • DNS 查询:简单的请求响应,UDP 更高效
  • DHCP:地址分配,广播需要 UDP

TCP 与 UDP 对比

特性TCPUDP
连接面向连接无连接
可靠性可靠不可靠
顺序有序无序
流量控制
拥塞控制
首部开销20 字节8 字节
传输方式字节流数据报
适用场景文件传输、邮件实时通信、DNS

应用层协议

HTTP 协议

HTTP(Hypertext Transfer Protocol,超文本传输协议)是 Web 的基础协议。

HTTP 特点

  • 基于请求-响应模型
  • 无状态(每个请求独立)
  • 基于 TCP,默认端口 80

请求方法

方法用途
GET获取资源
POST提交数据
PUT更新资源
DELETE删除资源
HEAD获取响应头
OPTIONS查询支持的方法

状态码

类别范围含义
1xx100-199信息性响应
2xx200-299成功
3xx300-399重定向
4xx400-499客户端错误
5xx500-599服务器错误

常见状态码:200(成功)、301(永久重定向)、302(临时重定向)、404(未找到)、500(服务器内部错误)。

DNS 协议

DNS(Domain Name System,域名系统)将域名解析为 IP 地址。

DNS 查询过程

  1. 浏览器检查本地缓存
  2. 查询本地 DNS 服务器
  3. 本地 DNS 服务器查询根域名服务器
  4. 根域名服务器返回顶级域名服务器地址
  5. 本地 DNS 服务器查询顶级域名服务器
  6. 顶级域名服务器返回权威域名服务器地址
  7. 本地 DNS 服务器查询权威域名服务器
  8. 权威域名服务器返回 IP 地址

DNS 记录类型

类型用途
A域名到 IPv4 地址
AAAA域名到 IPv6 地址
CNAME域名别名
MX邮件服务器
NS域名服务器
TXT文本记录
SOA授权起始记录

小结

TCP/IP 协议族是互联网的核心:

  1. 四层模型:应用层、传输层、网际层、网络接口层
  2. 网际层:IP(寻址路由)、ICMP(差错报告)、ARP(地址解析)
  3. 传输层:TCP(可靠传输)、UDP(快速传输)
  4. 应用层:HTTP、DNS、FTP、SMTP 等

理解 TCP/IP 协议族的工作原理,是网络编程和问题排查的基础。下一章我们将深入学习 TCP 协议的细节。

练习

  1. 解释 TCP 三次握手的过程和原因
  2. 比较 TCP 和 UDP 的区别及各自适用场景
  3. 说明 ARP 协议的工作过程
  4. 描述 DNS 域名解析的完整过程