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 连接管理
三次握手(连接建立)
过程:
- SYN=1, seq=x:客户端发送连接请求
- SYN=1, ACK=1, seq=y, ack=x+1:服务器确认连接
- ACK=1, seq=x+1, ack=y+1:客户端确认连接
状态变化:
- 客户端:CLOSED → SYN_SENT → ESTABLISHED
- 服务器:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED
四次挥手(连接释放)
过程:
- FIN=1, seq=u:客户端发送结束请求
- ACK=1, ack=u+1:服务器确认结束请求
- FIN=1, seq=v:服务器发送结束请求
- 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 通过以下机制实现可靠传输:
-
序号机制:
- 每个字节都有唯一序号
- 用于标识数据段顺序
- 支持乱序重组
-
确认机制:
- 累积确认:确认号表示期望收到的下一个字节
- 延迟确认:减少网络开销
- 选择性确认:确认特定数据段
-
超时重传:
- 动态调整超时时间
- 指数退避算法
- 快速重传机制
-
滑动窗口:
- 发送窗口控制发送速率
- 接收窗口控制接收能力
- 动态调整窗口大小
-
流量控制:
- 防止发送方过快
- 匹配发送和接收速率
- 避免接收方缓冲区溢出
-
拥塞控制:
- 慢启动算法
- 拥塞避免算法
- 快重传和快恢复
练习 2
TCP 的流量控制和拥塞控制有何不同?
参考答案
主要区别:
-
控制目标:
- 流量控制:防止接收方缓冲区溢出
- 拥塞控制:防止网络拥塞
-
控制对象:
- 流量控制:端到端控制
- 拥塞控制:网络整体控制
-
控制机制:
- 流量控制:基于接收窗口大小
- 拥塞控制:基于网络拥塞状况
-
控制参数:
- 流量控制:接收方通告的窗口大小
- 拥塞控制:拥塞窗口大小
-
控制算法:
- 流量控制:滑动窗口机制
- 拥塞控制:慢启动、拥塞避免等算法
-
影响范围:
- 流量控制:影响单个连接
- 拥塞控制:影响整个网络
-
触发条件:
- 流量控制:接收方缓冲区满
- 拥塞控制:网络拥塞、丢包等