第1个回答 2015-06-26
流量控制:也就是管理两端的流量,以免任一方向上因发送过块导致接收端溢出,或者因接收端处理太快而浪费时间的状态。具体包括:
(1)发送端的进程产生数据很慢,时不时的来个1字节数据,那么TCP就会1字节1字节的发送,效率很低。解决办法是建立一个时基的缓冲区,满足特定时间或特定大小后再整体打包发送。
(2)接收端进程消耗数据很慢,所以发送其窗口大小为1的信息,然后进行1字节的传输。解决办法是在接收缓存的一半变空,或者有足够空间放最大报文长度之前,宣告接收窗口大小为0;或者在对收到的报文段确认之前等待到足够的接收缓存,或者等待到一个时间段。
阻塞控制:TCP从其本身而言,是建立端到端的通信链路,因此也必须基于端到端进行控制,因为网络层本身不提供关于网络阻塞的反馈。阻塞控制就是要使TCP发送数据包的速率有所限制。TCP是如何知道网络中发生了阻塞呢?超时很可能说明网络发生了阻塞,而且运用TCP进行通信的接收方的ACK是累加性的,即它只接收它认定的下一个数据包(假如接收方最近发送的ACK确认包序号为x,当前要接收的Seq序号为y的数据包,如果超前接受到大于y的,则接收方返回序号为x的ACK包),则当发送方收到重复ACK包时,网络也很有可能阻塞。TCP是通过阻塞窗口CongWin来进行阻塞控制的,就是网络中的未ACK的数据包最多有CongWin个。假设TCP最近接收到的ACK为lastByteAcked,最近发送的数据为lastByteSent,假如阻塞窗口大小为CongWin,则有lastByteSent - lastByteAcked <= CongWin。