一、滑动窗口实现
所谓的流量控制, 就是告诫对方发送速率不要太快, 要让接收来来得及接收数据。
形容如下;
甲向乙发送数据。经过TCP三握手连接以后, 当乙告诉甲:“我的接受窗口rwnd = 400”(这里rwnd表示receiver window的意思)。所以,发送方的发送窗口不能超过接收方给出的接受窗口的数值。而TCP窗口的单位是字节, 而不是报文段。
例子解释如下:
假设每个报文的长度为100字节, 报文段的序号初始值设置为1。
1、主机乙对该传输过程进行了三次流量控制。(按道理说,seq 1 和 sql 101发送后主机乙放回的rwnd = 200, 但是在该应答中返回的是300, 那可能是因为主机B调用recv函数读取了100字节, 后续若遇到此类情况, 皆是如此处理)。
2、seq因为没有发送成功,第一次流量控制ack= 201,rwnd = 300; 在经过三次发送过, seq = 201, 再次发送属于超时重传。
3、最后返回的ACK应答中, rwnd = 0, 表示甲主机不能再向乙主机传输数据了。 等待乙主机的进程读取数据。
4、如果乙主机的缓存空间又空闲了。 那么乙主机将会向甲主机发送ACK = 1, rwnd = 400的应答, 如果该应答在传输的过程中丢失了。甲主机