TCP 阻塞控制
我们知道, 网络层的IP协议是不可靠的,没有提供可靠数据传输的机制,而传输层的TCP却提供了可靠数据传输的机制,依靠错误检测、超时、重传、流量控制和阻塞控制等等。正是因为如此,TCP比UDP复杂得多。下面,我简单介绍一下阻塞控制,有任何不对的地方,欢迎指正。
阻塞,是通信子网中某一部分接受到的数据包过多,速率超过了它的处理速度,而我们知道,网络中路由器或中继器的缓冲是有限的,因此当缓存已满时,后面发送的数据包则会丢失,因而发生丢包现象。阻塞控制,就是控制在通信子网中传输的数据包的数量,以尽量不发生网络阻塞以致频繁的丢包现象。那TCP是如何进行阻塞控制的呢?
TCP必须使用端到端的控制,因为网络层本身不提供关于网络阻塞的反馈。阻塞控制就是要使TCP发送数据包的速率有所限制。TCP是如何知道网络中发生了阻塞呢?超时很可能说明网络发生了阻塞,而且运用TCP进行通信的接收方的ACK是累加性的,即它只接收它认定的下一个数据包(假如接收方最近发送的ACK确认包序号为x,当前要接收的Seq序号为y的数据包,如果超前接受到大于y的,则接收方返回序号为x的ACK包),则当发送方收到重复ACK包时,网络也很有可能阻塞。TCP是通过阻塞窗口CongWin来进行阻塞控制的,就是网络中的未ACK的数据包最多有CongWin个。假设TCP最近接收到的ACK为lastByteAcked&#