1.tcp的成块数据流

我们看到tftp使用了停止等待协议,数据发送方在发送下一个数据块之前需要等待接收对已发送数据的确认,本章我们介绍tcp所使用的被称为滑动窗口协议的另一种形式的流量控制方法,该协议允许发送方在停止并等待确认前可以连续发送多个分组,由于发送方不必每发一个分组就停下来等等待确认,因此该协议可以加速数据的传输。

我们还将介绍tcp的push标示;该标志在前面的许多例中都出现过,此外,我们还要介绍慢启动,tcp使用该技术在一个链接上建立数据流,最后介绍成块数据流的吞吐量。

正常数据流

通常使用的隔一个报文段确认的策略。

我们在线路上看到的分组顺序依赖于许多无法控制的因素,发送方tcp的实现、接收方tcp的实现、接收进程读取数据(依赖于操作系统的调度)和网络的动态性(和以太网的冲突和退避等)。对这两个tcp而言,没有一种单一的、正确的方法来交换给定数量的数据。

快的发送方和慢的接收方

接收方发送ack(报文段8),但通告其窗口大小为0,这说明接收方已收到所有数据,但这些数据都在接收方的tcp缓冲区,因为应用程序还没有机会读取这些数据。

另一个ack(称为窗口更新)在17.4ms后发送,表明接收方现在可以接收另外的4096个字节的数据。虽然这看起来像一个ack,但由于它并不确认任何新数据,只是用来增加窗口的右边沿,因此被称为窗口更新。

滑动窗口

接收方通告的窗口称为提出的窗口(offeredwindows),它覆盖了第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6,我们知道窗口大小是与确认序号相对应的,发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送,当接收方确认数据后,这个滑动窗口不时地向右移动,窗口两个边沿的相对运动增加或减少了窗口的大小。

1.称窗口左边沿向右边沿靠近为窗口合拢,这种现象发生在数据被发送和确认时。

2.当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开,这种现象发生在另一端的接收进程读取已经确认的数据并释放了tcp的接收缓存时。

3.当右边沿向左移动时,我们称之为窗口收缩,

1.发送方必须发送一个全窗口大小的数据。

2.来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对于确认序号的。

3.正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。

4.接收方在发送一个ack前不必等待窗口被填满,在前面我们看到许多实现每收到两个报文段就会发送一个ack.

push标志

发送方使用该标志通知接收方将所收到的数据全部提交给接收进程

push标志已经过时。

清空发送缓存,则大多数的源于伯克利的实现能够自动设置push标志。

两个最大报文长度,最大可能窗口的50%

慢启动

存在多个路由器和速率较慢的链路时,

该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。

拥塞窗口(congestion window),记为cwnd.

发送方取拥塞窗口与通告窗口中的最小值作为发送上限,拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

路由器开始丢弃分担,这就通知发送方它的拥塞窗口开的过大。

2.tcp的超时和重传

对任何实现而言,关键之处就在于超时和重传,即怎样决定超时间隔和如何确定重传的频率。

4个定时器

1重传定时器

2坚持定时器

3包活定时器

42msl定时器

拥塞避免算法

拥塞避免算法是一种处理丢失分组的方法

该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某些网络上发生了拥塞。

有两个分组丢失的指示:发生拥塞时和接收到的重复确认。