TCP/IP学习笔记8-tcp的流量控制

背景

TCP/IP协议是当前网络时代的基础,所有的网络产品,或者是开发语言、开发框架都是基于tcp/ip协议的,所以说,学好tcp/ip对个人以后从事互联网行业会有巨大的帮助。

但是这是一个基础理论课程,就像操作系统这门课一样,学完之后可能不会对你产生太大的影响,不会让你立马拥有能够投入工作中的技能。但正是因为这是一个基础理论课,所有的互联网技术都是基于它的。所以如果你了解tcp/ip协议,将会对你未来发展或者在工作中排查问题产生积极的作用。

流量控制

对于发送端和接收端而言,tcp需要把发送的数据放到发送缓冲区,将接收的数据放到接收缓冲区。而流量控制要做的事情,就是通过控制接收缓冲区的大小来控制发送端的发送速度。

tcp的滑动窗口分为两种:发送窗口、接收窗口

发送窗口

在这里插入图片描述
其中包含四大部分:

  1. 已发送,已确认
  2. 已发送,但未确认
  3. 未发送,但可发送
  4. 未发送,且不可发送

发送窗口的部分如下:
接收窗口

  • SND:即send,表示已发送,但未接收的位置
  • WND:即window,表示窗口大小
  • UNA:即unacknowledged,表示未被确认
  • NXT:即next,表示下一个发送的位置
接收窗口

接收端的窗口结构如下:
在这里插入图片描述

  • REV:即Receive,表示待接收的位置
  • NXT:即next,表示下一个接收的位置
  • WND:即window,表示窗口大小
流量控制的过程

假设双方已经建立三次握手,初始化窗口大小均为200字节

  1. S给C发送了100字节,那么此时对于S而言,SND.NXT要右移100字节,也就是当前可用的窗口减小了100。这很好理解
  2. C收到100字节大小的数据之后,将其放入了缓冲区队列中。不过由于C大量负载原因,C处理不了这么多的数据,只能处理40字节,REV.NXT右移40,剩下的60字节被留在了缓冲队列里面
  3. 注意了,此时由于C的处理能力不够,希望S每次能少发送一些数据,所以此时C的接收端窗口应该缩小。缩小60字节,由原来的200变为140。因为缓冲区里面还有60字节未取走。因此,C会在ACK报文首部带上缩小后的窗口大小,即140。这很好理解
  4. S收到C的回复,知道C将接收窗口大小缩小到了140。对于S而言,接收且确认的部分增加40字节,也就是SND.UNA右移40,同时也将发送窗口缩小为140

这就是流量控制的详细过程,尽管回合再多,整个控制过程和原理都是一样!!

注意

  • 流量控制是为了防止发送方发的太快,从而耗尽接收方的资源,从而使接收方来不及处理。

总结

这是tcp/ip系列的第八篇,主要详细介绍了tcp中的接收窗口和发送窗口,记住,流量控制是通过控制接收窗口的大小从而达到控制发送端的发送速度。后面还有更深入、更多使用的场景讲解,这个系列的文章会很长。
开始下一篇吧。

猜你喜欢

转载自blog.csdn.net/Free_time_/article/details/107444089