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. 搭建一套简单的web服务器,记录实验过程

    搭建web服务器 一.实验内容: 实验要求: 1.完成一个简单的web服务器,web服务器从mysql里读取数据进行返回 2.Mysql需要有一个单独的数据盘,每个mysql虚拟机的磁盘挂载方式需要都 ...

  2. Python常用的库简单介绍一下

    Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...

  3. Spring Boot教程(十三)整合elk(2)

    配置.启动kibana 到kibana的安装目录: ./bin/kibana 默认配置即可. 访问localhost:5601,网页显示: 证明启动成功. 创建springboot工程 起步依赖如下: ...

  4. (转载)Kaggle_Titanic生存预测 -- 详细流程吐血梳理

    Kaggle_Titanic生存预测 -- 详细流程吐血梳理 https://blog.csdn.net/Koala_Tree/article/details/78725881 Kaggle中Tita ...

  5. 使用type在对象方法中调用类方法

    type简介 type在Python中的作用是创建一个类. 我们创建类的时候一般会使用这样的方法: # -*- coding:utf-8 -*- class Student(object): coun ...

  6. qemu-kvm: unable to map backing store for guest RAM: Cannot allocate memory

    当给 KVM 虚拟机设置 hugepage 时,需要在虚拟机的配置文件里加上下面一段: <memoryBacking> <hugepages/></memoryBacki ...

  7. Python学习之==>json处理

    json是一种所有语言都通用的Key-Value数据结构的数据类型,很像Python中的字典,在Python中可以通过json模块对json串和字典进行转换. 1.把字典转换成json串 import ...

  8. delphi : 窗体的close,free,destroy

    一.我用application.create(TForm2,Form2)语句,创建了Form2,可是调用了Form2.close后,重新调用Form2.show. 刚才所创建的Form2仍然存在.问为 ...

  9. Flink集群环境搭建

    环境准备 master:171:slave:171,172:flink版本:1.3.0 下载地址:http://archive.apache.org/dist/flink/flink-1.3.0/ 集 ...

  10. CentOS6.5 编译安装PHP5.6(apache模块)

    一.环境准备 1. 下载php源码包 # wget http://cn2.php.net/distributions/php-5.6.30.tar.gz # tar -xf php-5.6.30.ta ...