logo
导航

TCP协议

TCP 协议

1. TCP 概述

TCP(Transmission Control Protocol,传输控制协议)是传输层的面向连接协议,提供可靠的数据传输服务。

TCP 基本特征

  • 面向连接:需要预先建立连接
  • 可靠传输:保证数据完整、有序、无重复传输
  • 流量控制:防止发送方过快导致接收方缓冲区溢出
  • 拥塞控制:适应网络状况,避免网络拥塞

TCP 适用场景

  • 文件传输:FTP、HTTP
  • Web 浏览:HTTPS
  • 邮件传输:SMTP、POP3、IMAP
  • 远程登录:SSH、Telnet

2. TCP 段结构

TCP 首部格式

源端口号(16位) | 目的端口号(16位)
序号(32位)
确认号(32位)
数据偏移(4位) | 保留(6位) | 标志位(6位) | 窗口大小(16位)
校验和(16位) | 紧急指针(16位)
选项(可变)
数据(可变)

字段说明

端口号字段

  • 源端口号(16 位):发送方进程的端口号
  • 目的端口号(16 位):接收方进程的端口号

序号字段

  • 序号(32 位):本报文段第一个字节的序号
  • 确认号(32 位):期望收到的下一个字节的序号

控制字段

  • 数据偏移(4 位):TCP 首部长度,以 4 字节为单位
  • 保留(6 位):保留字段,设为 0
  • 标志位(6 位)
    • URG:紧急指针有效
    • ACK:确认号有效
    • PSH:推送标志
    • RST:重置连接
    • SYN:同步序号
    • FIN:结束连接

窗口和校验字段

  • 窗口大小(16 位):接收窗口大小
  • 校验和(16 位):首部和数据的校验和
  • 紧急指针(16 位):紧急数据的最后一个字节

3. TCP 连接管理

三次握手(连接建立)

过程

  1. SYN=1, seq=x:客户端发送连接请求
  2. SYN=1, ACK=1, seq=y, ack=x+1:服务器确认连接
  3. ACK=1, seq=x+1, ack=y+1:客户端确认连接

状态变化

  • 客户端:CLOSED → SYN_SENT → ESTABLISHED
  • 服务器:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED

四次挥手(连接释放)

过程

  1. FIN=1, seq=u:客户端发送结束请求
  2. ACK=1, ack=u+1:服务器确认结束请求
  3. FIN=1, seq=v:服务器发送结束请求
  4. ACK=1, ack=v+1:客户端确认结束请求

状态变化

  • 客户端:ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • 服务器:ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

4. TCP 可靠传输

序号机制

  • 字节序号:每个字节都有唯一序号
  • 初始序号:连接建立时随机选择
  • 序号回绕:序号达到最大值后重新开始

确认机制

  • 累积确认:确认号表示期望收到的下一个字节
  • 选择性确认:确认特定的数据段
  • 延迟确认:延迟发送确认,减少网络开销

超时重传

  • 超时时间:动态调整,基于 RTT
  • 重传策略:指数退避算法
  • 快速重传:收到 3 个重复 ACK 立即重传

滑动窗口

  • 发送窗口:允许发送但未确认的数据范围
  • 接收窗口:允许接收的数据范围
  • 窗口滑动:收到确认后窗口向前滑动

5. TCP 流量控制

流量控制目的

  • 防止过载:防止发送方过快导致接收方缓冲区溢出
  • 匹配速率:发送速率与接收速率匹配
  • 提高效率:充分利用接收方处理能力

滑动窗口机制

  • 窗口大小:接收方通告的窗口大小
  • 动态调整:根据接收方处理能力调整
  • 零窗口:接收方缓冲区满时通告零窗口

流量控制算法

  • 慢启动:连接建立后从 1 个 MSS 开始
  • 拥塞避免:窗口达到阈值后线性增长
  • 快重传:收到 3 个重复 ACK 立即重传
  • 快恢复:重传后进入拥塞避免状态

6. TCP 拥塞控制

拥塞控制目的

  • 避免拥塞:防止网络拥塞
  • 公平性:多个连接公平共享带宽
  • 效率:充分利用网络资源

拥塞控制算法

慢启动

  • 初始 cwnd=1 个 MSS
  • 每收到一个 ACK,cwnd 翻倍
  • 直到达到 ssthresh

拥塞避免

  • cwnd 达到 ssthresh 后线性增长
  • 每 RTT 增加 1 个 MSS
  • 直到发生拥塞

快重传和快恢复

  • 收到 3 个重复 ACK 立即重传
  • 重传后进入拥塞避免状态
  • 不进入慢启动状态

拥塞控制参数

  • cwnd:拥塞窗口大小
  • ssthresh:慢启动阈值
  • RTT:往返时间
  • MSS:最大段大小

7. TCP 应用

Web 应用

  • HTTP:超文本传输协议
  • HTTPS:安全超文本传输协议
  • 特点:可靠传输,适合文件传输

文件传输

  • FTP:文件传输协议
  • SFTP:安全文件传输协议
  • 特点:大文件传输,可靠性要求高

邮件传输

  • SMTP:简单邮件传输协议
  • POP3:邮局协议
  • IMAP:互联网消息访问协议

远程登录

  • SSH:安全外壳协议
  • Telnet:远程登录协议
  • 特点:交互式通信,可靠性要求高

练习题

练习 1

TCP 如何实现可靠传输?

参考答案

TCP 通过以下机制实现可靠传输:

  1. 序号机制

    • 每个字节都有唯一序号
    • 用于标识数据段顺序
    • 支持乱序重组
  2. 确认机制

    • 累积确认:确认号表示期望收到的下一个字节
    • 延迟确认:减少网络开销
    • 选择性确认:确认特定数据段
  3. 超时重传

    • 动态调整超时时间
    • 指数退避算法
    • 快速重传机制
  4. 滑动窗口

    • 发送窗口控制发送速率
    • 接收窗口控制接收能力
    • 动态调整窗口大小
  5. 流量控制

    • 防止发送方过快
    • 匹配发送和接收速率
    • 避免接收方缓冲区溢出
  6. 拥塞控制

    • 慢启动算法
    • 拥塞避免算法
    • 快重传和快恢复

练习 2

TCP 的流量控制和拥塞控制有何不同?

参考答案

主要区别:

  1. 控制目标

    • 流量控制:防止接收方缓冲区溢出
    • 拥塞控制:防止网络拥塞
  2. 控制对象

    • 流量控制:端到端控制
    • 拥塞控制:网络整体控制
  3. 控制机制

    • 流量控制:基于接收窗口大小
    • 拥塞控制:基于网络拥塞状况
  4. 控制参数

    • 流量控制:接收方通告的窗口大小
    • 拥塞控制:拥塞窗口大小
  5. 控制算法

    • 流量控制:滑动窗口机制
    • 拥塞控制:慢启动、拥塞避免等算法
  6. 影响范围

    • 流量控制:影响单个连接
    • 拥塞控制:影响整个网络
  7. 触发条件

    • 流量控制:接收方缓冲区满
    • 拥塞控制:网络拥塞、丢包等