- TCP 的滑动窗口是以字节为单位的。
- 发送方 A 和接收方 B 分别维持一个发送窗口和一个接收窗口。
- 发送窗口表示:在没有收到确认的情况下,可以连续把窗口内的数据全部发送出去。
- 接收窗口表示:只允许接收落入窗口内的数据。
假定数据传输A发送数据,B给出确认。即发送方A的发送窗囗和接收方B的接收窗口。
A 发送了 11 个字节的数据
A 收到新的确认号,发送窗口向前滑动
A 的发送窗口内的序号都已用完,但还没有再收到确认,必须停止发送。
发送缓存
接收缓存
发送缓存与接收缓存的作用
- 发送缓存用来暂时存放:
- 发送应用程序传送给发送方 TCP 准备发送的数据;
- TCP 已发送出但尚未收到确认的数据。
- 接收缓存用来暂时存放:
- 按序到达的、但尚未被接收应用程序读取的数据;
- 不按序到达的数据。
特殊说明
- 第一,A 的发送窗口并不总是和 B 的接收窗口一样大(因为有一定的时间滞后)。
- 第二,TCP 标准没有规定对不按序到达的数据应如何处理。通常是先临时存放在接收窗口中,等到字节流中所缺少的字节收到后,再按序交付上层的应用进程。
- 第三,TCP 要求接收方必须有累积确认的功能,这样可以减小传输开销。
接收方发送确认
接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上。
但请注意两点:
- 第一,接收方不应过分推迟发送确认,否则会导致发送方不必要的重传,这反而浪费了网络的资源。。
- 第二,捎带确认实际上并不经常发生,因为大多数应用程序很少同时在两个方向上发送数据。