时延的估计
为适应互联网环境下变化的时延,TCP使用自适应重传算法来检测连接的时延,并调整相应的定时时延参数
TCP确认的二义性使对网络往返时间的估计变得困难,karn算法用来解决这个问题,
简单的karn算法只对没有二义性确认的往返时间估值进行调整,当出现重传时进行定时器补偿,new_time=2*oldtimeout,当收到无需重传的报文段的确认后,TCP重算往返时间估计值
拥塞的控制
当传输时延增加时,很可能产生了拥塞,这时不应过多的重传数据,TCP使用慢启动和加速递减来避免这个问题
TCP使用了拥塞窗口,allowed_window=min(receiver_window,congestion_window),TCP假设大部分的报文都源于拥塞
加速递减,一旦发现丢失报文段,将拥塞窗口大小减半,定时器时延加倍,显著的减少流量和重传
拥塞结束后使用慢启动恢复,在开始新的连接传输或拥塞后增加流量时仅以一个报文段作为拥塞窗口的初始值,每当收到一个确认后,将拥塞窗口大小增加1。
糊涂窗口综合症
当收发两端的软件以不同的速率处理数据时,会产生糊涂窗口综合症:每个确认报文通告了少量的可用空间,而每个报文段仅携带少量数据。
避免
接受发,
1,通告零窗口后,要等到缓冲区可用空间达到总空间的一半或最大报文长度之后才发送更新的窗口通告
2,推迟确认,规范推荐这种方式
发送方
Nagle算法
在一个连接上已经传输的数据还没有被确认的情况下,发送方的应用程序又生成了后续数据,并照常将数据送到输出缓冲区,这时并不发送后续报文段,而是等到有足够的数据填满一个MSS的报文段后再把缓冲的数据发送出去。该策略适合于任何情况,包括PUSH.
当应用程序生成数据的速率比网络的速率快不少时,后续的报文段将包括很多的数据,而当应用程序比网络速率慢时(比如敲击键盘),会发送较短的报文段,而不必经过长时延
阅读(1193) | 评论(1) | 转发(0) |