第20章 TCP的成块数据流
20.1 引言
TCP使用滑动窗口协议,允许连续发送多个分组。
20.2 正常数据流
三种典型模式
- 每2个报文段确认一次
- 窗口填满时确认
- 快发送方→慢接收方
窗口更新
- 接收方通告窗口为0
- 发送方停止发送
- 窗口更新报文段恢复发送
20.3 滑动窗口
窗口边沿移动
| 类型 | 说明 |
|---|---|
| 合拢 | 左边沿向右(数据被确认) |
| 张开 | 右边沿向右(窗口增大) |
| 收缩 | 右边沿向左(不推荐) |
可用窗口 = 通告窗口 - 已发送未确认
20.4 窗口大小
默认窗口大小
| 系统 | 默认窗口 |
|---|---|
| 4.2BSD | 2048 |
| 4.3BSD | 4096 |
| Solaris 2.2 | 8192 |
| 4.4BSD | 16384 |
性能建议
- 以太网上16384字节窗口提升40%吞吐量
20.5 PUSH标志
- 通知接收方立即交付数据
- 大多数API不提供设置方法
- 伯克利实现:清空发送缓存时自动设置
20.6 慢启动
拥塞窗口(cwnd)
- 初始值:1个报文段
- 每收到ACK增加1个报文段(指数增长)
- 实际发送上限 = min(cwnd, 通告窗口)
示例
- 开始时发送1个报文段
- 收到ACK后发送2个
- 再收到ACK后发送4个
20.7 成块数据的吞吐量
带宽时延乘积
容量(bit) = 带宽(b/s) × 往返时间(s)
text
示例
| 网络 | 带宽时延乘积 |
|---|---|
| T1横跨美国 | 11,580字节 |
| T3横跨美国 | 337,500字节 |
20.8 紧急方式
TCP紧急方式
- URG标志置1
- 紧急指针指向紧急数据的最后一个字节
- 应用程序处于紧急模式
常见用途
- Telnet中断键
- FTP放弃传输
20.9 小结
TCP使用滑动窗口协议实现流量控制。慢启动避免网络拥塞。紧急方式提供通知机制。