TCP 滑动窗口
- 滑动窗口协议
- 流量控制方法
- PUSH
- 慢启动
- 发送方发送 4个背靠背(back-to-back)的数据报文段去填充接收方的窗口,然后停下来等待一个ACK。
- 接收方发送 ACK(报文段 8),但通告其窗口大小为 0,这说明接收方已收到所有数据,但这些数据都在接收方的 TCP缓冲区,因为应用程序还没有机会读取这些数据。
- 另一个ACK,窗口更新 在17.4ms后发送,表明接收方现在可以接收另外的4096个字节的数据。
- 发送方发送最后4个报文段(10~13),再次填充了接收方的窗口。
- 注意到报文段13中包括两个比特标志:PUSH和FIN。
- 随后从接收方传来另外两个 ACK,它们确认了最后的 4096字节的数据(从4097到8192字节)和FIN(标号为8192)
- 窗口大小6个字节,覆盖第4-9字节
- 说明字节1-3 是发送并被确认的
- 窗口大小起始于确认序号字段。
- 发送方可以计算它的可用窗口,
- 比如窗口大小6,已经被确认1-3,发送但未被确认4-6,则可用窗口大小3,起始第7序号
- 可用窗口表明有多少数据可以立即被发送
- 发送方可以计算它的可用窗口,
- 当接收方确认数据后,这个滑动窗口不时地向右移动。
- 窗口左右边沿的运动现象的三个术语
- 左边沿向右靠近----窗口合拢
- 现象发生在数据被发送和确认时。
- 右边沿向右靠近----窗口张开
- 将允许发送更多的数据
- 现象发生在接收端进程读取已经确认的数据并释放了TCP的接收缓存时。
- 右边沿向左靠近----窗口收缩
- RFC 强烈建议不要使用这种方式
- 但TCP 有特殊场景会使用到
- 左边沿向右靠近----窗口合拢
- 如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据
- 发送方使用该标志通知接收方将所有接收到的数据全部提交给接收进程
- 包括与PUSH一起传送的数据以及接收方TCP 已经接收到的其他数据
- 出现原因
- 在发送与接收方存在多个路由器和速率较慢的链路时
- 中间路由器必须缓存分组包,并可能耗尽存储器的空间
- 严重降低TCP连接的吞吐量
- 工作原理
- 观察新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
- 慢启动为发送方增加另一个窗口:拥塞窗口(congestion window) cwnd.
- 当建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)
- 每收到一个ACK,拥塞窗口就增加一个报文段,拥塞窗口从1增加到2,即可以发送两个报文段。
- 发送方取拥塞窗口与通告窗口中的最小值作为发送上限。
- 拥塞窗口是发送方使用的流量控制
- 通告窗口则是接收方使用的流量控制
TCP 滑动窗口的更多相关文章
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释
一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...
- TCP 滑动窗口和 拥塞窗口
转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果 ...
- TCP 滑动窗口的简介
TCP 滑动窗口的简介 POSTED BY ADMIN ON AUG 1, 2012 IN FLOWS34ARTICLES | 0 COMMENTS TCP的滑动窗口主要有两个作用,一是提供TCP的可 ...
- TCP滑动窗口控制流量的原理
TCP的滑动窗口机制 TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小 ...
- tcp滑动窗口详解(2)
http://blog.csdn.net/yujun00/article/details/636495 ARQ与滑动窗口概念 滑动窗口协议,是TCP使用的一种流量控制方法.该协议允许发送方在停止并等 ...
- [转]TCP滑动窗口详解
TCP滑动窗口详解 http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window) ...
- TCP滑动窗口与回退N针协议
[转]TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议 2014-1-5阅读884 评论0 本文转自 http://www.cnblogs.com/ulihj/archive/201 ...
- TCP滑动窗口(发送窗口和接受窗口)
TCP窗口机制 TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口.用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的. 其实TCP在整个发送过程中, ...
- 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解
第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...
- 彻底搞通TCP滑动窗口
在我们当初学习网络编程的时候,都接触过TCP,在TCP中,对于数据传输有各种策略,比如滑动窗口.拥塞窗口机制,又比如慢启动.快速恢复.拥塞避免等.通过本文,我们将了解滑动窗口在TCP中是如何使用的. ...
随机推荐
- WCF入门, 到创建一个简单的WCF应用程序
什么是WCF? WCF, 英文全称(windows Communication Foundation) , 即为windows通讯平台. windows想到这里大家都知道了 , WCF也正是由微软公 ...
- JavaScript练习笔记整理·2 - 6.24
Codewars地址:https://www.codewars.com/ 欢迎和大家一起来讨论~ 基础练习(1): 我的解答为: function isIsogram(str){ if(s ...
- CoolBlog开发笔记第3课:创建Django应用
教程目录 1.1 CoolBlog开发笔记第1课:项目分析 1.2 CoolBlog开发笔记第2课:搭建开发环境 前言 经过上一节我们已经创建了CoolBlog工程,但是关于CoolBlog的功能代码 ...
- Notepad++的正则表达式替换和替换
[1]如果从行首匹配,可以用"^"来实现,[2]如果从行尾匹配,可以用"$"来实现, 在查找内容里面输入"345$" 这里"$&q ...
- php倒计时防刷新
<?php //php的时间是以秒算.js的时间以毫秒算 date_default_timezone_set("Asia/Hong_Kong");//地区 //配置每天的活动 ...
- solr学习-基础环境搭建(一)
目前网上关于solr6.+的安装教程很少,有些6.0之前的教程在应用到6.+的版本中出现很多的问题,所以特别整理出来这一片文章,希望能给各位码农一些帮助! 很少写些文章,如有不对的地方,还希望多多指导 ...
- 【Android Developers Training】 57. 在UI线程之外处理图像
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Example004自动关闭的广告窗口
<!-- 实例004自动关闭的广告窗口--> <!-- 3秒后关闭 --> <body onload="window.setTimeout('window.cl ...
- Redis初体验
简介 Redis是一个速度非常快的非关系型数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型.作为键值型数据库,Redis支持5中数据类型:字符串,列表,集 ...
- angularJS 源码阅读之一:toDebugString
简介: 这个函数返回调试字符串: number,boolean,string,null,undefined,都会转为字符串. function 中括号前面有空格的,会去除函数体,没空格的,会输出函数的 ...