TCP的滑动窗口主要有两个作用,一是提供TCP的可靠性,二是提供TCP的流控特性。同时滑动窗口机制还体现了TCP面向字节流的设计思路。TCP 段中窗口的相关字段。

TCP的Window是一个16bit位字段,它代表的是窗口的字节容量,也就是TCP的标准窗口最大为2^16-1=65535个字节。
另外在TCP的选项字段中还包含了一个TCP窗口扩大因子,option-kind为3,option-length为3个字节,option-data取值范围0-14。窗口扩大因子用来扩大TCP窗口,可把原来16bit的窗口,扩大为31bit。
滑动窗口基本原理

1)对于TCP会话的发送方,任何时候在其发送缓存内的数据都可以分为4类,“已经发送并得到对端ACK的”,“已经发送但还未收到对端ACK的”,“未发送但对端允许发送的”,“未发送且对端不允许发送”。“已经发送但还未收到对端ACK的”和“未发送但对端允许发送的”这两部分数据称之为发送窗口。

当收到接收方新的ACK对于发送窗口中后续字节的确认是,窗口滑动,滑动原理如下图。

当收到ACK=36时窗口滑动。
2)对于TCP的接收方,在某一时刻在它的接收缓存内存在3种。“已接收”,“未接收准备接收”,“未接收并未准备接收”(由于ACK直接由TCP协议栈回复,默认无应用延迟,不存在“已接收未回复ACK”)。其中“未接收准备接收”称之为接收窗口。
发送窗口与接收窗口关系
TCP是双工的协议,会话的双方都可以同时接收、发送数据。TCP会话的双方都各自维护一个“发送窗口”和一个“接收窗口”。其中各自的“接收窗口”大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的“发送窗口”则要求取决于对端通告的“接收窗口”,要求相同。

滑动窗口实现面向流的可靠性
最基本的传输可靠性来源于“确认重传”机制。
TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。
发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。
接收窗口只有在前面所有的段都确认的情况下才会移动左边界。当在前面还有字节未接收但收到后面字节的情况下,窗口不会移动,并不对后续字节确认。以此确保对端会对这些数据重传。
滑动窗口的流控特性
TCP的滑动窗口是动态的,我们可以想象成小学常见的一个数学题,一个水池,体积V,每小时进水量V1,出水量V2。当水池满了就不允许再注入了,如果有个液压系统控制水池大小,那么就可以控制水的注入速率和量。这样的水池就类似TCP的窗口。应用根据自身的处理能力变化,通过本端TCP接收窗口大小控制来对对对端的发送窗口流量限制。
应用程序在需要(如内存不足)时,即必须应用程序进行socket主动的调用,通过API通知TCP协议栈缩小TCP的接收窗口。然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以此达到减缓发送速率的目的。

TCP 滑动窗口的简介相关推荐

  1. 计算机网络:TCP滑动窗口的流量控制和拥塞控制

    1. 前言 最近在研究网络通信底层通信原理,所以不得不复习一波计算机网络传输控制协议.那么对于程序开发人员,了解底层网络通信原理,对于我们理解BIO.NIO网络通信十分重要.所以对于程序开发人员来说, ...

  2. TCP滑动窗口(发送窗口和接受窗口)

    TCP窗口机制 TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口.用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的. 其实TCP在整个发送过程中, ...

  3. tcp滑动窗口_面试必备TCP(三):滑动窗口

    之前说过TCP协议头部的组成,不清楚可以点击这里,TCP滑动窗口技术通过动态改变窗口大小来调节两台主机间数据传输. 每个TCP/IP主机支持全双工数据传输,因此TCP有两个滑动窗口:一个用于接收数据, ...

  4. TCP滑动窗口原理终于清楚了!

    我们在学习计算机网络的时候,遇到很多知识点.即便是背的滚瓜烂熟,让你去辨别知识点背后的深层逻辑的时候,可能就手足无措了. 比如小邱去面A公司的时候就被问到: 事实上,这个问题很大程度弥补我计算机网络的 ...

  5. TCP三次握手和四次挥手?TCP如何保证可靠性?什么是TCP滑动窗口?

    TCP三次握手和四次挥手? 三次握手 tcp3handshake.gif tcp3handshake2.gif tcp3handshake3.gif tcp3handshake4.gif 四次挥手 t ...

  6. TCP滑动窗口协议与流量控制

    谈到TCP的滑动窗口协议与流量控制,便会想起当年面试时的场景.那时刚刚毕业,匆匆学了一点TCP的皮毛,仅仅是知道了TCP是面向连接的协议,以对每个报文都进行确认+超时重传的机制来保证端到端的可靠传输: ...

  7. 4.18、TCP滑动窗口

    4.18.TCP滑动窗口 1.滑动窗口的介绍 2.滑动窗口通信的例子 1.滑动窗口的介绍 滑动窗口(Sliding window)是一种流量控制技术.早期的网络通信中,通信双方不会考虑网络的拥挤情况直 ...

  8. TCP/IP(十一)TCP滑动窗口和拥塞控制

    目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...

  9. linux内核TCP 滑动窗口,TCP滑动窗口和流控

    TCP的滑动窗口是一个很重要的概念,也是很晦涩的一个知识点.下面就大概介绍下TCP滑动窗口为什么出现?它是怎么工作的的? 什么是TCP窗口 首先,要理解,client和server各自协议栈都有自己的 ...

最新文章

  1. vue组件定义、组件的切换、组件的通信、渲染组件的几种方式(标签、路由、render)...
  2. HDU5934(强连通分量)
  3. 极客新闻——05、如何在工作中学习和成长?
  4. mysql buffer used_MySQL性能调优(软调优)
  5. Firebug高级用法 - Web开发的利器
  6. PyTorch 读取图像图片数据
  7. 毕业生求职“葵花宝典”之实习提前转正秘笈
  8. java有any类型吗_Java开发网 - 一个关于CORBA中any类型的问题
  9. php java 通信_PHP与Java进行通信的实现方法
  10. 加点字符就能让qq昵称很酷的神奇代码?
  11. seo优化之怎样降低网站跳出率
  12. 更大的模型并不总是更好的模型,微型机器学习将是未来的方向
  13. Android安全之使用root权限绕过检测机制,强行自动允许应用的悬浮窗/应用后台弹出界面等权限
  14. 时间精力管理4象限法
  15. 华为拍摄月亮专利公布: 多次曝光获取月亮清晰轮廓
  16. 如何升级IE浏览器 电脑IE浏览器怎么升级
  17. 生物群落数据分析最常用的统计方法:回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法
  18. 关于one-hot编码
  19. 数据系统服务器更新是什么,云更新服务器是啥意思
  20. linux系统Centos7重置root密码

热门文章

  1. Oracle平台应用数据库系统的设计与开发
  2. 01-软件需求规格说明书
  3. 儿童益智类型电子产品玩具需要什么认证?
  4. 【Unity VR开发】结合VRTK4.0:手柄操作运动与旋转
  5. 初学用python写爬虫, 这里分享给大家一段爬取百度贴吧的代码(用面向对象的思想写的),请各位大佬们指点迷津
  6. 浅谈 路由器,交换机,集线器,vlan作用
  7. Jquery-判断form表单数据是否变化
  8. 基于javaweb的校园机房管理平台的设计与实现(毕业设计论文+程序源码)
  9. v93000测试系统软件,V93000自动测试系统
  10. SQL Server新建维护计划