TCP

169 阅读4分钟

滑动窗口机制

TCP的滑动窗口机制是为了对“发送端在发送完一个数据MSS后,需要等待接收方返回确认应答,随后才能发送下一个MSS”这一原因导致的数据发送速率慢的状况进行优化。

实现机制

窗口的大小指的是无需等待确认应答就可以继续进行数据发送的最大值。这个机制的实现使用大量的缓存区,窗口将缓冲区分成两个部分。窗口内的数据段是已被发送,等待应答的数据段。窗口外的数据段是等待被发送以及已被发送并且受到应答的数据段。

段丢失的处理方式

段丢失分为两种情况。一种是接收方收到收据段,但是返回的确认应答丢失。一种是接收方未收到数据段,数据段在传输至接收方之前就丢失了。

窗口控制

针对确认应答丢失的情况。若是未使用窗口机制,则一定会重发;使用了窗口机制后,在窗口较大的情况下, 即使有少量的确认应答丢失也不会重发,而是通过其他的确认应答来进行确认。

重传控制

当接收方未接收到需要的新的数据时。会一直重复发起要求同一批数据的确认应答。当发送方连续收到3个同一个确认应答时,就会立即开始重发。这种机制比超时重传更加高效,也叫高速重传控制。

流控制

发送方会根据自己的实际情况来发送数据。但是事实情况下,接收方可能因为网络延迟、收到了其他无关的包或是正好在处理其他的事情,这样可能会导致接收端在无法处理当前数据包时将数据包,而发送方因为没有收到确认应答又会继续向接收方发送数据,这样就造成了大量的资源浪费。

为了防止这种情况发生。TCP提供了一种机制可以让数据发送方根据接收方的实际接收能力来调整发送数据的速度。这种机制被叫做流控制。

流控制过程

当接收方向发送方发送确认应答时,会带上目前的窗口大小值,接收方会根据这个值来调整下次发送数据的数据量。当值较小时,下次发送的数据量就会更少;当值较大时,下次发送的数据量就会更多。当窗口值为0时,发送方会暂停发送数据,等待接收方的窗口更新通知,若是过了一个超时重发的时间,发送方就会发送窗口探测的包来尝试获取最新的窗口数据。当接收方恢复窗口后,会回复窗口探测包,告知发送发新的窗口大小值或是自行发送数据告知。

拥塞控制

有了TCP的窗口控制机制后,TCP发送数据的速度得到了提升。但是由于实际的网络问题,比如说网络状况较差时,如果一开始通信就以较大量的数据进行传输,就会导致网络堵塞甚至瘫痪。为了避免这种情况,在通信最开始的时候,会以一种叫做慢启动的方式来逐步增加传输的数据量。

慢启动

在建立连接后,最初会以一个较小的窗口值来进行传输,可以理解为1MSS。(即设置窗口大小为1个数据段)这个窗口也被叫做拥塞窗口。之后每成功收到一次确认应答,窗口值就加1。这样拥塞窗口的值就会以指数形式飞速增长。

拥塞阈值

为了限制拥塞窗口值的飞速增长,引入了拥塞阈值的概念。当拥塞窗口值大于阈值时,窗口的值就转变为以下面这种方式来增长:1个数据段的字节数 * 1个数据段字节数 / 拥塞窗口(字节)

超时

通信最初开始时是没有设置拥塞阈值时,当拥塞窗口扩大,导致超时重发现象发生时,会立刻将拥塞窗口的值置为0,同时设置拥塞阈值为之前拥塞窗口值的一半。

重复应答

当发生重复应答现象时,会将拥塞阈值置为现在拥塞窗口值得一半,同时将拥塞窗口值置为现在的拥塞阈值+3.