面向连接传输协议TCP
# 面向连接传输协议TCP
# TCP 连接概述
TCP 概述
# TCP 报文段结构
TCP: 序列号和 ACK
序列号
- 序列号指的是segment中第一个字节的编号,而不是segment的编号
- 建立TCP连接时,双方随机选择初始的序列号
ACKs
- 希望接收到的下一个字节的序列号
- 累计确认:该序列号之前的所有字节均已被正确接收到
接收方如何处理乱序到达的Segment?
- TCP规范中没有规定,由TCP的实现者做出决策
- 一般会对乱存到达的 Segment 进行缓存
简单 telnet 示例
# 往返时间的估计和超时
如何设置定时器的超时时间?
如何估计RTT?
# TCP 可靠数据传输
TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务
流水线机制
累积确认
TCP使用单一重传定时器
触发重传的事件
- 超时
- 收到重复ACK
渐进式
- 暂不考虑重复ACK
- 暂不考虑流量控制
- 暂不考虑拥塞控制
# TCP 发送方事件
从应用层收到数据
超时
收到 ACK
TCP 重传示例
- Lost ACK scenario
示意图
- Premature timeout
示意图
- Cumulative ACK scenario
示意图
# TCP ACK 生成[RFC 568]
# 快速重传机制
如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失
为什么是 3 次?
快速重传算法
# TCP 流量控制
流量控制
- 发送方不能传输的太多、太快以至于淹没接收方(buffer溢出)
RcvWindow = 0 的应对情况,参见教材 P165
# TCP 连接管理
TCP sender 和 receiver 在传输数据前需要建立连接
Client:连接发起者
Server: 等待客户连接请求
连接
SYN=1
- 🌟 三次握手
关闭
FIN
- 两次挥手
TCP client lifecycle
TCP server lifecycle
编辑 (opens new window)