【转】【基础】面试官:你解释一下什么是TCP的固定窗口和滑动窗口

宋宪
• 阅读 351

固定窗口

TCP还提供了流量控制机制。 流量控制可以调整给定会话中源和目的之间的数据流速,有助于保持 TCP传输的可靠性。 流量控制的实施方法包括限制一次可以转发的数据段数量,并要求在发送更多数据段之前确认接收。

要实施流量控制,TCP要确定的第一件事是目的设备可以接受的数据段数量。 TCP报头包括一个称为“窗口大小”的 16位字段。 这是 TCP会话的目的设备一次可以接受和处理的字节数。 通过源和目标之间的三次握手,会话开始时即可确定初始窗口大小。 一旦同意,源设备必须根据窗口大小限制发送到目的设备的数据段数量。 只有源设备收到数据段已接收的确认之后,才能继续发送更多会话数据。

在接收确认的延迟过程中,发送方不会发送任何额外数据段。 如果网络拥堵,或者接收主机资源紧张,延迟时间可能就更长。 延迟时间越长,该会话过程的有效传输速率越低, 当运行多个会话时,减缓每个会话的数据传输有助于减少网络和目的设备上的资源冲突。

【转】【基础】面试官:你解释一下什么是TCP的固定窗口和滑动窗口

请参看上图中对窗口大小和确认消息的简易展示。 在本例中,TCP会话的初始窗口大小为 3000字节。 此会话的发送方在传输 3000字节后等待这些数据的确认消息,以便继续传输更多数据段。 一旦发送方收到接收方发送的确认消息,它就可以传输另外 3000字节的数据段。

TCP使用窗口大小尝试管理传输速率,将其调整为网络和目的设备可以支持的最大速度,同时最大限度减少损失和重新传输。

TCP滑动窗口

我们也可以通过动态窗口大小来控制数据流量。 当网络资源受到限制时,TCP可以减小窗口的大小,这样,目的主机就需要更加频繁地确认所接收的数据段。 由于源主机需要更加频繁地等待数据确认,这便可以大大降低传输的速率。

接收主机将窗口大小值发送到发送主机,表示其准备接收的字节数。 如果目的主机由于缓冲内存受限需要降低通信速率,那么它向源主机发送的确认信息中可以包含一个较小的窗口大小值。

【转】【基础】面试官:你解释一下什么是TCP的固定窗口和滑动窗口

如图所示,如果接收主机发生拥堵,它可以向发送主机发送指定了较小窗口大小的数据段。 图中显示,其中一个数据段丢失了。 接收方将返回数据段的 TCP报头中的窗口字段值由 3,000减为 1,500,即将窗口大小改为 1,500。

在没有数据丢失或资源限制的情况下传输一段时间后,接收方开始增加窗口字段,这样可以减少网络开销,因为必须发送的确认减少。 窗口大小持续增加,直至出现数据丢失,然后窗口大小随之减少。

窗口大小的这种动态增减是 TCP中的一个持续不断的过程。 在高效网络中,由于不丢失数据,窗口可能会相当大。 在基层基础设施面临压力的网络中,窗口可能会很小。

原文来自:微思网络
原文地址:https://mp.weixin.qq.com/s/Zt...

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
Android 中的Socket通讯机制
Android中的网络通讯无非Http和Socket,Socket有两种形式——TCP和UDP。TCP与UDP区别TCP传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到
Wesley13 Wesley13
3年前
TCP面试题之滑动窗口原理
TCP滑动窗口作用:1.提供TCP可靠性:对发送的数据进行确认2.流量控制:窗口大小随链路变化一、TCP窗口机制TCP中窗口大小是指tcp协议一次传输多少个数据。因为TCP是一个面向连接的可靠的传输协议,既然是可靠的就需要传输的数据进行确认。TCP窗口机制有两种,一种是
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
TCP基础 —— 流量控制与拥塞控制
一:流量控制什么是流量控制?流量控制的目的?如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。如何实现流量控制?由滑动窗口
Wesley13 Wesley13
3年前
34.TCP取样器
阅读文本大概需要3分钟。1、TCP取样器的作用   TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据。2、TCP取样器详解!(https://oscimg.oschina.net/oscnet/32a9b19ba1db00f321d22a0f33bcfb68a0d.png)TCPClien