TCP窗口滑动以及拥塞控制
TCP的可靠性和流量控制由滑动窗口协议保证
拥塞控制则由控制窗口结合一系列的控制算法实现
1、滑动窗口协议
滑动:指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序滑动
窗口:对应一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”
【注意】
①TCP协议的两端分别为发送者A和接收者B,由于是全双工,因此A和B应该维护着一个独立的发送缓存区和接收缓存区,并且是对等的(A发B收,A收B发),我们以A发送B接收的情况为例
②发送窗口是发送缓存区的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓存区
③发送窗口相关的概念
- 已发送并收到确认的数据(不在发送窗口和发送缓存区之内)
- 已发送但未收到确认的数据(在发送窗口之内)
- 允许发送但未发送的数据(在发送窗口之内)
- 暂时不允许发送的数据(发送窗口外,发送缓存区内)
④每次成功发送数据之后,发送窗口会在缓存区中按顺序移动,将新的数据包含在窗口中准备发送
⑤tcp建立连接的初始,B会告诉A自己接受的窗口大小,比如设为10
只有当A成功发送数据(即发送的数据得到B的确认),才会移动滑动窗口离开已发送的数据,同时B则确认连续的数据分组,对于乱序的分组则先接收下来,避免网络重复传递
2、流量控制
tcp利用滑动窗口实现流量控制的机制
流量控制:接收方传递消息给发送方,使其不要发送数据太快,是一种端到端的控制,主要的方式就是返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送
3、拥塞控制
网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就会出现拥塞。
拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。这往往是全局性的,设计到所有的主机和路由器
而流量控制则是针对点对点通信的控制
常用的拥塞控制方式:
①慢开始、拥塞避免
②快重传、快恢复
慢开始、拥塞避免:
**发送方维持一个拥塞窗口,其大小取决于网络的拥塞程度,并且动态变化
**发送方控制拥塞窗口的原则:
- 只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去
- 只要网络出现拥塞,拥塞窗口就减少一些,以减少注入到网络中分组数
**慢开始算法的思路:
一开始设置为1,收到确认后增大到2,发送方每收到一个对新报文段的确认就将拥塞窗口加一,因此每经过一个传输轮次,拥塞窗口大小就加倍,当拥塞窗口大小达到慢开始门限后,改用拥塞避免算法
**拥塞避免算法的思路
让拥塞窗口缓慢的增大,即每一个传播轮次只增加1,而不是加倍,这样拥塞窗口大小是线性增长
**无论在慢开始阶段还是拥塞避免阶段,只要发送方没有按时收到确认就判断网络出现拥塞,此时就把慢开始门限设置为出现拥塞时发送方窗口的一半。然后把拥塞窗口大小重新设置为1,执行慢开始算法
快重传机制:
①接收方建立这样的机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求
②一旦发送方连续接收到三个一样的确认(而不是等到计时器到期),就知道该包出现错误,立刻重传该包
③此时发送方开始执行“快恢复”算法
- 慢开始门限减半
- 把拥塞窗口大小设置为慢开始门限减半后的数值,然后执行拥塞避免算法(线性增加)