TCP的滑动窗体攻克了端到端的流量控制问题,同意接受方对传输进行限制。直到它拥有足够的缓冲空间来容纳很多其他的数据。滑动窗体的大小由接收方确定,接收方在发送确认信号给发送方的同一时候告诉发送方自己的缓冲区大小(在TCP头部字段中),发送方依据此大小确定窗体大小,从而控制数据发送量。同一时候,滑动窗体协议同意发送方在停止并等待确认前能够连续发送多个分组,因为发送方不必每发一个分组就停下来等待确认,因此该协议能够加速数据的传输。

以下是一个样例:
在建立连接时。两方都告知了对方自己的MSS为1024,所以在传输过程中,每个报文段的大小都为1024.以下重点分析各个确认报文段,也就是从右边发往左边的报文段:
  • 报文段7确认了报文段4和报文段5。因为包括两个分组的ACK,所以该报文段不是经受时延的确认。

    滑动窗体大小为4096表示收到的两个报文段已经所有交付给了应用层。此时TCP的接收缓存为空。

  • 报文段8确认了报文段6。此报文段在等待其他数据(这里为报文段9的确认)一起传送的过程中延时定时器溢出。所以此为经受时延的确认。滑动窗体大小为3072表示TCP接受缓存中还有1024字节数据未被应用程序读取。

  • 报文段10确认了报文段9。它也是一个经受时延的确认。

  • 报文段14确认了报文段11和报文段12,它不是一个经受时延的确认。
  • 报文段16确认了报文段13和报文段15,它不是一个经受时延的确认。

通过上面的过程能够看出,报文段7、14、16的ACK确认了两个收到的报文段。这与开头的描写叙述是一致的。

以下来看看上述过程中的滑动窗体变化情况:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbmVzdGxlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

接收方每确认一个报文段,滑动窗体的左边沿就向右边沿靠拢。这里的确认是指接收方发送确认报文段,并不代表应用层已经读取了TCP接收缓存。

当应用进程读取了已经确认的数据并释放TCP接受缓存后,滑动窗体的右边沿才会向右移动。

參考:
《TCP/IP具体解释》 P209-P214.

TCP滑动窗体的更多相关文章

  1. TCP/IP具体解释--TCP/IP可靠的原理 滑动窗体 拥塞窗体

    TCP和UDP处在同一层---运输层,可是TCP和UDP最不同的地方是,TCP提供了一种可靠的数据传输服务,TCP是面向连接的,也就是说,利用TCP通信的两台主机首先要经历一个"拨打电话&q ...

  2. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  3. TCP 滑动窗口和 拥塞窗口

    转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果 ...

  4. TCP 滑动窗口的简介

    TCP 滑动窗口的简介 POSTED BY ADMIN ON AUG 1, 2012 IN FLOWS34ARTICLES | 0 COMMENTS TCP的滑动窗口主要有两个作用,一是提供TCP的可 ...

  5. Qt使用QGraphicsView实现滑动窗体效果

    QGraphicsView用来显示一个滚动视图区的QGraphicsScene内容.QGraphicsScene提供了QGraphicsItem的容器功能.通常与QGraphicsView一起使用来描 ...

  6. TCP滑动窗口控制流量的原理

    TCP的滑动窗口机制       TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小 ...

  7. tcp滑动窗口详解(2)

    http://blog.csdn.net/yujun00/article/details/636495 ARQ与滑动窗口概念  滑动窗口协议,是TCP使用的一种流量控制方法.该协议允许发送方在停止并等 ...

  8. [转]TCP滑动窗口详解

    TCP滑动窗口详解  http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window)   ...

  9. leetcode ---双指针+滑动窗体

    一:Minimum Size Subarray Sum(最小长度子数组的和O(N)) 题目: Given an array of n positive integers and a positive ...

随机推荐

  1. udp拼接传递数据包

    1.拼接项少 pl = ["<0112>","<32>","<1024x768>","< ...

  2. 关于java实现断点续传的上传下载功能问题

    在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...

  3. [Usaco2010 Dec]Treasure Chest 藏宝箱

    题目链接:点这里 Solution: 刚开始以为是博弈论,然而不是... 首先考虑n方dp,设f(l,r)为只有\(l\)到\(r\)区间的钱的先手最大获利 那么我们可以得到式子f(l,r)=sum( ...

  4. 命令行创建 vue 项目(仅用于 Vue 2.x 版本)

    1 .安装 Node.js 和 npm ( 验证安装成功输入下图 1 命令行可得 2:输入命令行 3 可得 4 即安装成功) 2.安装全局 webpack (安装依照下图输入命令行 1 耐心等待至到出 ...

  5. 【转载】opencv 二值化函数——cv2.threshold

    https://blog.csdn.net/weixin_38570251/article/details/82079080 threshold:固定阈值二值化, ret, dst = cv2.thr ...

  6. 1.8 全新日期api

    /** * * @note * @author zhouyy <br> * Apr 14, 2017 5:21:12 PM * @version */ package com.bytter ...

  7. sqli-labs(20)

    0X01 试探一下 这是登录成功的页面 这里题目高速我们是基于cookie的注入 0X01抓包试探 这里登陆的时候有两个包 我们要含有cookie的那个包 0X02试探判断是否cookie存在注入 C ...

  8. bootstrap的editTable实现方法

    首先下载基于bootstrap的源码到本地.引用相关文件. <link href="/Content/bootstrap/css/bootstrap.min.css" rel ...

  9. vue simple框架打包遇到报错问题

    问题描述:之前一个项目使用vue-simple框架 打包时老是报错 :原因是es6转化es5时候有错误: 解决: alias: { 'vue$': 'vue/dist/vue.esm.js', // ...

  10. hg(Mercurial)使用参考

    hg(Mercurial)使用参考   使用hg(mercurial)有好几个月了,个人感觉这款分布式的版本控制系统非常不错,易学,易用:你可以从做在你旁边的同事拉取完整的代码; 对网络的依赖性更低, ...