在前面的内容中我们依次介绍了TCP的连接建立和终止过程和TCP的各种重传方式。接着我们在这部分首先关注交互式应用TCP连接相关内容如延迟ACK、Nagle算法、Cork算法等,接着我们引入流控机制(flow control)和关联的窗口管理(window management)过程。在开篇之前我们先介绍几个相关的概念。

交互式TCP连接(interactive TCP connection):交互式TCP连接是指用户输入需要在client和server间传递的这种。用户的输入可能是一次键盘按键或者一个短消息。这种交互式应用一般都是比较短小的消息,如果TCP每次收到应用层提交的交互消息就发送出TCP报文,有可能会大大的降低网络的利用率。原因是一个交互消息可能仅仅带有几个bytes的数据,但是TCP基本头和IP基本头就有40bytes,另外还会有链路层的开销,最终导致网络传输中的数据大部分都是各种头开销,而有用的数据很少。有些头压缩算法也可以处理这种问题,如ROHC头压缩稳定状态下可以把(rtp+udp+ip)头压缩为几个bytes,但是可应用的场景有限。另一方面如果把应用层的小包暂存最终打包成大的数据包的话又会引入比较大的时延,对于时延敏感类应用就会有负面影响,如游戏应用。因此需要在打包发送和时延之间取一个权衡。有资料表明internet上大约10%左右的TCP报文为交互式数据(interactive data),另外90%则为成批数据(bulk data)。

流控机制(flow control):也叫做流量控制,我们所说的流量控制一般是指点对点的控制,也就是TCP的发送端和接收端的交互,这个流量控制不涉及中间的路由器等网络设备,这个是与后面要介绍的拥塞控制的重要区别。但是另一方面后面要介绍的拥塞控制也可以看成是流量控制的一个扩展。当接收端由于缓存大小等原因需要降低发送端的发送速率的时候,我们需要一种方式通告发送端降低数据发送速率,这种方式我们就叫做流量控制(flow control)或者简称为流控。实现流量控制一般有两种方式(TCP采用的基于窗口的流控):

  • 基于速率(rate-based)的流控,接收端直接告诉发送端一个确定的速率,发送端控制发送速率不超过此确定值,该方式在广播和多播中有应用。

  • 基于窗口(window-based)的流控,这是一种比较受欢迎的流控机制,尤其是使用滑窗机制的时候,TCP协议中就是使用这种方式就行的流控。另外LTE通信的RLC层也有类似TCP的滑窗协议,也是通过这种方式进行的流控。

窗口管理(window management):从广义来说,窗口管理主要涉及两个方面,一个是用于流量控制的滑动窗口协议,另一个则是与拥塞控制的交互。但是一般说窗口管理更侧重于描述流量控制的滑窗协议。

TCP系列27—窗口管理&流控—1、概述的更多相关文章

  1. TCP系列31—窗口管理&流控—5、TCP流控与滑窗

    一.TCP流控 之前我们介绍过TCP是基于窗口的流量控制,在TCP的发送端会维持一个发送窗口,我们假设发送窗口的大小为N比特,网络环回时延为RTT,那么在网络状况良好没有发生拥塞的情况下,发送端每个R ...

  2. TCP系列36—窗口管理&流控—10、linux下的异常报文系列接收

    在这篇文章中我们看一下server端在接收到异常数据系列时的处理,主要目的是通过wireshark示例对这些异常数据系列的处理有一个直观的认识,感兴趣的自行阅读相关代码和协议,这里不再进行详细介绍 在 ...

  3. TCP系列35—窗口管理&流控—9、紧急机制

    一.概述 我们在最开始介绍TCP头结构的时候,里面有个URG的标志位,还有一个Urgent Pointer的16bits字段.当URG标志位有效的时候,Urgent Poinert用来指示紧急数据的相 ...

  4. TCP系列33—窗口管理&流控—7、Silly Window Syndrome(SWS)

    一.SWS介绍 前面我们已经通过示例看到如果接收端的应用层一直没有读取数据,那么window size就会慢慢变小最终可能变为0,此时我们假设一种场景,如果应用层读取少量数据(比如十几bytes),接 ...

  5. TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer

    一.简介 我们之前介绍过,TCP报文中的window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块中缓存,最终受 ...

  6. TCP系列34—窗口管理&流控—8、缓存自动调整

    一.概述 我们之前介绍过一种具有大的带宽时延乘积(band-delay product.BDP)的网络,这种网络称为长肥网络(LongFatNetwork,即LFN).我们想象一种简单的场景,假设发送 ...

  7. TCP系列30—窗口管理&流控—4、Cork算法

    一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...

  8. TCP系列29—窗口管理&流控—3、Nagle算法

    一.Nagle算法概述 之前我们介绍过,有一些交互式应用会传递大量的小包(称呼为tinygrams),这些小包的负载可能只有几个bytes,但是TCP和IP的基本头就有40bytes,如果大量传递这种 ...

  9. TCP系列28—窗口管理&流控—2、延迟ACK(Delayed Acknowledgments)

    一.简介 之前的内容中我们多次提到延迟ACK(Delayed Ack),延迟ACK是在RFC1122协议中定义的,协议指出,一个TCP实现应该实现延迟ACK,但是ACK不能被过度延迟,协议给出延迟AC ...

随机推荐

  1. 使用Scala开发Apache Kafka的TOP 20大好用实践

    本文作者是一位软件工程师,他对20位开发人员和数据科学家使用Apache Kafka的方式进行了最大限度得深入研究,最终将生产实践环节需要注意的问题总结为本文所列的20条建议. Apache Kafk ...

  2. Flink的部署

    Flink的部署 环境准备:windows7系统,本地连接.如果打开更改适配器设置后没有本地连接,可以通过驱动精灵等软件安装网卡驱动.为了使部署在虚拟机上的服务器可以与物理机进行连通,必须使物理机的网 ...

  3. python3 练习题100例 (五)

    题目五:输入三个整数x,y,z,请把这三个数由小到大输出. #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 题目五: ...

  4. Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数

    文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...

  5. python代理爬取存入csv文件

    爬取高匿代理 from urllib import request import re import time f = open('西1.csv','w',encoding='GBK') header ...

  6. UART学习之路(四)VerilogHDL实现的简单UART,VIVADO下完成仿真

    用VerilogHDL实现UART并完成仿真就算是对UART整个技术有了全面的理解,同时也算是Verilog入门了.整个UART分为3部分完成,发送模块(Transmitter),接收模块(Recei ...

  7. R语言爬虫:Rvest包函数介绍(表格)

    Rvest 包中常用函数一览: 函数 作用 read_html() 读取 html 页面 html_nodes() 提取所有符合条件的节点 html_node() 返回一个变量长度相等的list,相当 ...

  8. 武汉Uber优步司机奖励政策(8月31日~9月6日)

    ·奖励前提 *必须满足当周平均评分4.7星及以上,且当周接单率70%及以上,当周在线5小时且完成5单,才有资格获得奖励 * 各组别必须满足当周要求的成单率才有资格获得奖励,成单率由当周 滴滴快车单单2 ...

  9. macOS 10.13 High Sierra PHP开发环境配置

    命令:sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM ...

  10. 如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染

    7月31日,2018云创大会游戏论坛在杭州国际博览中心103B圆满举行.本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术.新实践,如AR.区块链.安全.大数据等. Unity大中华区技术经理 ...