首页 > 编程知识 正文

流量控制拥塞控制,tcp流量控制的工作过程

时间:2023-05-05 14:07:23 阅读:116211 作者:121

洪爵在前一节介绍了TCP段的最初格式:

《面试必问的TCP,你真的回答对了吗?》,

今天,我们来介绍一下TCP的流量控制是如何实现的~

很多人可能在面试中被问到过流量控制和拥塞控制的区别,但在回答这个问题之前,需要知道流量控制和拥塞控制是什么。

首先,为什么需要流量控制? 一般来说,数据希望能够更快地传输,但如果发送方发送太多数据,则接收方可能无法接收,数据可能会丢失。 对于“流控制”,发送方的发送速率不应太快,以便接收方可以接收。

接下来举个例子。 假设TCP建立连接后,接收方b向发送方a传达接收方窗口大小(receiver window,rwnd )为400字节。

首先,b告诉a,因为我的rwnd=400,所以发送方的发送窗口不能超过接收方发出的接收窗口rwnd。 需要注意的是,TCP在消息传递段中发送,但TCP窗口的单位是字节。 其中,假设每个消息段的大小为100字节,并且数据消息段的初始值为1 (实际进程是随机值),用seq表示,大写ACK表示确认位,小写ACK表示确认字段的值请参阅。

如在图片中可知,主机b进行总共3次流控制,为了第一次使接收窗口减少为rwnd=300,第二次减少为100,最后减少为0,接收窗口动态地变化,减少为0后,接收方重新开始请注意,只有ACK=1的确认号字段有效,因此在传递发送方窗口的值时,ACK也必须设置为1。

不知道是否考虑过这样的问题,如果b向a发送了0窗口的段,在b的缓冲器中形成了空闲空间之后,b向a发送了rwnd=400的段,但是该段在传输中丢失了。 a等不及b发送的非0窗口通知,b也在等待a发送数据。 这将引起彼此等待的死锁。

为了名为solve的question,TCP为每个连接设置持续计时器。 这个计时器什么时候启动? 如果有一个TCP连接从对方接收到0窗口的通知,将启动持续计时器,经过一段时间后发送0窗口的探测消息块(包括1字节的数据),另一个则在确认该探测消息块时启动当前窗口值如果不为0,则可以开始传输数据。

应该注意的是,TCP规定,即使设置为零窗口,也需要接收零窗口探测消息块、确认消息块和具有紧急数据的消息块。

是的,流量控制介绍到这里!

希望每个人都能有嫌疑地阅读文章,探究其原理。

路途坎坷漫长,往事有序,来日本成为篇章。

我们期待着下一次的相遇!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。