网络编程——TCP协议——传输控制

TCP协议是传输控制协议


TCP和 UDP的区别

TCP和UDP都工作在传输层,检验和的计算方法相似,而且都有伪首部。
TCP 必须有检验和 ;UDP的检验和不是必须的。
TCP 是面向连接的,端对端一对一的通信;UDP是无连接的。
TCP 传输基于字节流服务;UDP传输基于报文;
TCP 具有超时重传,差错控制,流量控制等措施来确保可靠性;UDP没有。

TCP重传机制

要保证所有的数据包都可以到达,TCP必须有重传机制。

TCP流量控制

接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。 
       为此,TCP根据接收端的处理能力,决定发送端的发送速度,这个机制叫做流量控制机制。防止发送方发送太快,接收方来不及处理。

  •  接收端抑制发送端的依据:接收端缓冲区的大小
  •  流量控制的目标是接收端,是怕接收端来不及处理
  •  流量控制的机制是丢包

        在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。 窗口大小不受16位窗口大小限制。

滑动窗口

使用滑动窗口实现流量控制

TCP必须解决包到达时乱序的问题,为此TCP必须根据网络的数据处理带宽、处理速度,控制发送,才不会向网络里发送过多的包,导致网络拥塞,进而导致丢包。TCP要保证传输的可靠性,TCP的滑动窗口作用重大。

滑动窗口是类似窗口的一个东西,是用来告诉发送端可以发送数据的大小,或者说是窗口标记了接收端缓冲区的大小,窗口指的是一次可以批量发送的多少数据。

为什么会出现滑动窗口

在TCP的确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个大的缺点,就是性能比较差,尤其是数据往返的时间,长的时候。使用滑动窗口,可以一次发送多条数据,从而就提高了性能。

  TCP的滑动窗口协议是一种流量控制方法。使用滑动窗口,发送方不必每发一个分组就停下来等待确认,可以加快数据的传输速度。
       滑动窗口Sliding Window是TCP引入的、做网络流量控制的一个技术。发送端可以根据接收端的处理能力来发送数据。TCP头里有一个字段Window,又叫Advertised-Window,是接收端用来告诉发送端,接收端还有多少缓冲区可以接收数据。

滑动窗口控制同步数据的范围,通知发送端目前接收的数据范围,用于流量控制,接收端使用。因为tcp是全双工,所以两边都有滑动窗口。 两个窗口的维护是独立的,滑动窗口主要由接收方反馈缓存情况来维护,拥塞窗口主要由发送方的拥塞控制算法检测出的网络拥塞程度来决定的。

  窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

  发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

知识点:

(1)接收端将自己可以接收的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK来通知发送端
(2)窗口大小字段越大,说明网络的吞吐率越高
(3)窗口大小指的是无需等待确认应答而可以继续发送数据的最大值,就是不需要接收端的应答,发送端可以一次连续地发送数据的最大值。
(4)操作系统内核为了维护滑动窗口,需要开辟发送缓冲区,来记录当前还有那些数据没有应答,只有确认应答过的数据,才能从缓冲区删掉。

发送缓冲区如果太大,就会有空间开销。

(5)接收端一旦发现自己的缓冲区快满了,就会将窗口大小设置成一个更小的值通知给发送端,发送端收到这个值后,就会减慢自己的发送速度
(6)如果接收端发现自己的缓冲区满了,就会将窗口的大小设置为0,此时发送端将不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

ps:在TCP的首部中,有一个16为窗口字段,此字段就是用来存放窗口大小信息的

滑动窗口的优点

可以高效可靠的发送大量的数据

拥塞控制

TCP通信的双方都需要执行一系列的行为。这些行为由特定算法规定,用于防止因为大规模的通信负载而网络瘫痪。
发送方和接收方认为网络即将进人拥塞状态时,或者已经出现,由于拥塞而发生的路由器丢包,使得TCP传输减缓。

拥塞控制的难点

TCP拥塞控制的难点在于:
怎样准确地判断拥塞,何时,如何减缓TCP传输,以及何时恢复原本的速度。

拥塞

路由器因无法处理高速率到达的流量而被迫丢弃数据信息的现象称为拥塞。

当网络中大量的发送方和接收方,被要求承担超负荷的通信任务时,可以考虑,采取降低发送速率或者丢弃部分数据的方法(也可结合使用),避免接收方的缓存溢出。

若不采取对策,网络性能将大受影响以致网络瘫痪。在最坏情况下,甚至形成网络拥塞崩溃。为避免和缓解这种状况,TCP通信的双方都必须实行拥塞控制机制。

拥塞的标志

  • 重传计时器超时 
  • 接收到三个重复确认

拥塞控制与流量控制的区别 

拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。 
流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。

TCP的四种拥塞控制算法

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。 为此TCP引入慢启动机制,先发出少量数据,像探路一样先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。 

慢启动:在启动初期以指数增长,设置一个慢启动的阈值,当以指数增长达到阈值时就停止指数增长,按照线性增长方式增加;线性增长达到网络拥塞时立即“乘法减小”,拥塞窗口置回1,进行新一轮的“慢启动”,同时新一轮的阈值变为原来的一半。 

无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(发送方没有收到确认,虽然可能是其他原因,但是无法判定,所以都当做拥塞来处理),就把慢开始限值设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。cwnd为24时引起超时,限值减半设为12,重新慢开始,到12进入拥塞避免。

加法增大与乘法减小 
乘法减小:无论是慢开始阶段还是拥塞避免,只要出现了网络拥塞(超时),就把慢开始门限值ssthresh减半 
加法增大:执行拥塞避免算法后,拥塞窗口线性缓慢增大,防止网络过早出现拥塞

猜你喜欢

转载自blog.csdn.net/panjunnn/article/details/108831160