TCP基于以字节为单位的滑动窗口来实现可靠传输
我们如何描述发送窗口的状态?
使用三个指针P1,P2,P3分别指向对应的字节序号
- 小于P1的是已经发送并已收到确认的部分
- 大于等于P3的是不允许发送的部分
- P3 - P1 = 发送窗口的尺寸
- P2 - P1 = 已发送但尚未收到确认的字节数
- P3 - P2 = 允许发送但当前尚未发送的字节数
- 虽然发送方的发送窗口是根据接收方的接收窗口设置的,但在同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大
- 网络传送窗口值需要经历一定的时间滞后,并且这个时间还是不确定的
- 发送方可能根据网络当时的拥塞情况适当减小自己的发送窗口尺寸
- 对于不按序到达的数据应如何处理,TCP并没有明确规定
- 如果接收方把不按序到达的数据一律丢弃,那么接收窗口的管理就会比较简单,但是这样做对网络资源的利用不利,因为发送方会重复发送较多的数据
- TCP通常对不按序到达的数据是先临时存放在接收窗口中,等到字节流所缺少的字节收到后,再按序交付上层的应用进程
- TCP要求接收方必须有累计确认和捎带确认机制,这样可以减小传输开销,接收方可以在合适的时候发送确认,也可以在自己有数据要发送时把确认信息顺便捎带上
- TCP的通信是全双工通信。通信中的每一方都在发送和接收报文段。因此,每一方都有自己的发送窗口和接收窗口。