最后更新时间:2010-08-13 06:43:46
TCP采用“带重传的肯定确认”技术来实现传输的可靠性。简单的“带重传的肯定确认”是指与发送方通信的接收者,每接收一次数据,就送回一个确认报文,发送者对每个发出去的报留一份记录,等到收到确认之后再发出下一报文分组。发送者发出一个报文分组时,启动一个计时器,若计时器计数完毕,确认还未到达,则发送者重新送该报文分组。
简单的确认重传严重浪费带宽,TCP还采用一种称之为“滑动窗口”的流量控制机制来提高网络的吞吐量,窗口的范围决定了发送方发送的但未被接收方确认的数据报的数量。每当接收方正确收到一则报文时,窗口便向前滑动,这种机制使网络中未被确认的数据报数量增加,提高了网络的吞吐量。
TCP通信建立在面向连接的基础上,实现了一种“虚电路”的概念。双方通信之前,先建立一条连接,然后双方就可以在其上发送数据流。这种数据交换方式能提高效率,但事先建立连接和事后拆除连接需要开销。TCP连接的建立采用三次握手的过程,整个过程由发送方请求连接、接收方再发送一则关于确认的确认三个过程组成。
TCP的拥塞控制和流量控制是一个比较复杂的问题,它包括发送端发送报文的大小和报文的时机,接收端发送确认和窗口大小的策略。同时还要兼顾不同网络的具体情况,算法要具有一定的自适应性,在保证可靠传输的同时,尽量提高传输效率。
这里主要对目前公认的比较行之有效的一些拥塞控制和流量控制算法进行介绍和验证。主要有:TCP的滑动窗口机制、TCP的糊涂窗口综合症和Nagle算法分析、网络拥塞的处理、TCP的超时与重传、TCP的窗口探查技术、TCP的快重传和快恢复。
TCP的滑动窗口机制
为了提高报文段的传输速率,TCP采用大小可变的滑动窗口进行流量控制。窗口大小的单位是字节。发送窗口在连接建立时由双方商定,但在通信过程中,接收端可根据自己的接收缓存的大小,随时动态地调整发送端的发送窗口的上限值。这就是接收端窗口rwnd(receiverwindow),这个值被放在接收端发送的TCP报文段首部的窗口字段中。
同时,发送端根据其对当前网络拥塞程度的估计而确定的窗口值,叫做拥塞窗口cwnd(congestionwindow)。其大小与网络的带宽和时延密切相关。
发送端设置的当前能够发送数据量的大小叫做发送窗口,发送窗口的上限值由下面公式确定:
发送窗口的上限值=Min[cwnd,rwnd]
rwnd由接收端根据其接收缓存确定,发送端确定cwnd比较复杂,详细情况在慢启动和拥塞避免一节中叙述。