在前面的文章中《TCP 的交互数据流》我们可以知道,TCP 的成块数据流是在要求传输效率较高的情况下使用,例如 FTP。对于这些要求传输 TCP 最长报文段的应用,TCP 协议采用了滑动窗口协议,使发送端在等待确认前可以连续发送多个分组。

一般来说,发送端发送一个 TCP 数据报,则接收端就应该发送一个 ACK 数据报。但在实际应用中却并非如此,而是发送端将连续发送数据报保存在接受端的缓冲区中,并且尽量使其填满,接受端对这些连续发送的数据报只发送一个 ACK 报文应答,这就是 ACK 的累积特性,这个特性大大减少了发送端和接收端的负担。

滑动窗口

滑动窗口的滑动是以字节为单位的,窗口是在建立 TCP 连接时,通信双方协商好的接收端的窗口。窗口大小本质上是发送端在等待确认之前所发送数据的最大值。如果发送端收到接受端的窗口大小为 0 的 TCP 数据报,则表示发送端将停止发送数据,等到接受端发送窗口大小不为 0 的数据报的到来。

以下是窗口协议中窗口变化的三种情况:

  1. 窗口合拢,即窗口 左边沿 向 右边沿 靠近。这种现象发生在数据被发送和确认时;
  2. 窗口张开,即窗口 右边沿 向右移动,此时将允许发送更多的数据。这种现象一般发生在另一端的接收进程读取已经确认的数据并释放 TCP 的接收缓存时;
  3. 窗口收缩,即窗口 右边沿 向左移动。一般不建议出现这种现象;

注意:窗口的左边沿受另一端发送的确认序号的控制,因此不能向左边移动。如果接收到一个指示窗口左边沿向左移动的 ACK,则它被认为是一个重复的 ACK,并被丢弃。

在滑动窗口中,发送端只能发送窗口内的数据,并且数据的发送顺序是从左到右。当窗口的 左边沿 达到 右边沿 时,则称其为一个零窗口,表示发送端不能发送任何数据。

慢启动

为了防止网络拥塞,TCP 采用了一种慢启动算法,对发送数据量进行控制。为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为 1 个报文段发送数据,之后每收到一次确认应答,拥塞窗口的值就加 1 个报文段。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送。拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制。

紧急方式

TCP 的 紧急方式,它使一端可以告诉另一端有些具有某种方式的 紧急数据 已经放置在普通的数据流中。另一端被通知这个 紧急数据 已被放置在普通的数据流中,由接收方决定如何处理。然而 紧急数据 并不是 带外数据 。TCP 的紧急方式只是一个从发送方到接收方的通知,该通知告诉接收方 紧急数据 已被发送,并提供该数据最后一个字节的序号,由接收方决定如何处理。应用程序使用的有关 紧急数据 部分的编程接口都不是最佳的,从而导致更多的混乱。

参考资料:

《TCP/IP 详解》

《网络协议》TCP 的成块数据流相关推荐

  1. 第20章 TCP的成块数据流

    为什么80%的码农都做不了架构师?>>>    20.3   滑动窗口 当接收方确认数据后,这个滑动窗口不时地向右移动.窗口两个边沿的相对运动增加或 减少了窗口的大小.我们使用三个术 ...

  2. TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流

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

  3. TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流

    2019独角兽企业重金招聘Python工程师标准>>> 目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分 ...

  4. 【网络协议】TCP的交互数据流和成块数据流

    TCP协议简介 传输控制协议,位于传输层,提供一种可靠的,面向连接的数据传输服务 TCP通过以下方式保证可靠性: 应用程序被分割为适合传输的数据块,UDP不会,UDP只有与IP首部组成IP数据报时才会 ...

  5. 网络协议-TCP和UDP最完整的区别介绍

    网络协议-TCP和UDP最完整的区别介绍 前言:为了方便后期翻看,公众号在慢慢整理所发文章,关于Java网络编程内容的文章,可以在菜单栏-文章整理-进阶篇模块中查看. TCP与UDP基本区别   1. ...

  6. 网络协议 TCP 数字编号和重传机制

    网络协议 TCP 数字编号和重发 1. TCP 的数字编号 2. TCP 确认机制的特点 2.1 TCP一次可发送多个数据包 2.2 仅对连续接收的数据段进行确认 2.3 不连续的数据将先缓存 3. ...

  7. 网络分层,网络协议TCP/IP模型,OSI模型

    TCP\IP模型是多种协议的综合,4层模型(也有说5层的). 其中最重要的就是分层结构和主要协议. 1.应用层(SMTP,HTTP,FTP) 2.传输层(TCP,UDP) 3.网络互联层(IPv4,I ...

  8. 网络协议-TCP、IP协议和互联网协议群

    目录 TCP/IP协议群简介(互联网协议群)(Internet Protocol Suite) 应用层(Application)(合并简化了展示层,会话层) 传输层(Transport) 网络层(In ...

  9. 网络协议——TCP/IP协议

    简介: TCP(传输控制协议)和 IP(网际协议)是两个独立且紧密结合的协议,负责管理和引导数据报文在 Internet上的传输.二者使用专门的报文头定义每个报文的内容.TCP 负责和远程主机的连接, ...

最新文章

  1. 一个用PPT画画的程序员
  2. JavaScript 学习(2) - JS的内建对象
  3. Android组件化初探
  4. 深度学习-机器学习(5.3支持向量机Python的应用)
  5. springboot @RequestBody 接收字符串
  6. csv.writer写入文件有多余的空行
  7. 删了自己写的代码?判刑10个月!
  8. Xor Sum(AtCoder-2272)
  9. WordPress主题-Real Estate 7–房地产[更至v3.1.0]
  10. 长得像鳗鱼的Envirobot,利用传感器检测并追踪水中有害元素
  11. eclipse里面自动添加get和set方法
  12. 加快网站速度的最佳做法_(1)最小化http请求
  13. 4.6 数值分析: P阶收敛的迭代法
  14. 贾俊平统计学思维导图- 第七章参数估计
  15. 汽车租赁管理系统(java)--隔壁小河
  16. 数据库实验1---创建数据库和表
  17. GO语言中中文占3个字节,英文占1个字节
  18. php之RSA加密解密
  19. Generative Image Inpainting with Contextual Attention
  20. Cookie、Session、Token、JWT

热门文章

  1. 微信公众号开发--关注后自动回复(Java记录篇)
  2. Kafka 的线上集群部署方案是怎样的?
  3. 购买空调常问的几个问题大全
  4. 机器学习:基于Apriori算法对中医病症辩证关联规则分析
  5. 设计模式-状态模式-以射击游戏的武器状态为例
  6. 基于stm32单片机俄罗斯方块小游戏Proteus仿真
  7. 如何给一个文字文本加圆或是加矩形呢?
  8. terminus rz上传_Terminus和FluentTerminal是Windows的第三方OSS控制台替代品世界的开始
  9. 基于java的家庭理财管理系统的设计与实现
  10. 谈谈我是如何攻破教务系统拿到CVE证书的