跳到主要内容

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.x、10.x.x.x、172.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 域名解析的完整过程