《网络协议》TCP 的成块数据流
在前面的文章中《TCP 的交互数据流》我们可以知道,TCP 的成块数据流是在要求传输效率较高的情况下使用,例如 FTP。对于这些要求传输 TCP 最长报文段的应用,TCP 协议采用了滑动窗口协议,使发送端在等待确认前可以连续发送多个分组。
一般来说,发送端发送一个 TCP 数据报,则接收端就应该发送一个 ACK 数据报。但在实际应用中却并非如此,而是发送端将连续发送数据报保存在接受端的缓冲区中,并且尽量使其填满,接受端对这些连续发送的数据报只发送一个 ACK 报文应答,这就是 ACK 的累积特性,这个特性大大减少了发送端和接收端的负担。
滑动窗口
滑动窗口的滑动是以字节为单位的,窗口是在建立 TCP 连接时,通信双方协商好的接收端的窗口。窗口大小本质上是发送端在等待确认之前所发送数据的最大值。如果发送端收到接受端的窗口大小为 0 的 TCP 数据报,则表示发送端将停止发送数据,等到接受端发送窗口大小不为 0 的数据报的到来。
以下是窗口协议中窗口变化的三种情况:
- 窗口合拢,即窗口 左边沿 向 右边沿 靠近。这种现象发生在数据被发送和确认时;
- 窗口张开,即窗口 右边沿 向右移动,此时将允许发送更多的数据。这种现象一般发生在另一端的接收进程读取已经确认的数据并释放 TCP 的接收缓存时;
- 窗口收缩,即窗口 右边沿 向左移动。一般不建议出现这种现象;
注意:窗口的左边沿受另一端发送的确认序号的控制,因此不能向左边移动。如果接收到一个指示窗口左边沿向左移动的 ACK,则它被认为是一个重复的 ACK,并被丢弃。
在滑动窗口中,发送端只能发送窗口内的数据,并且数据的发送顺序是从左到右。当窗口的 左边沿 达到 右边沿 时,则称其为一个零窗口,表示发送端不能发送任何数据。
慢启动
为了防止网络拥塞,TCP 采用了一种慢启动算法,对发送数据量进行控制。为了调节发送端的数据发送量,引入了拥塞窗口,在慢启动时,将这个拥塞窗口设为 1 个报文段发送数据,之后每收到一次确认应答,拥塞窗口的值就加 1 个报文段。在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口大小进行比较,然后选择较小的值来控制数据量的发送。拥塞窗口是发送端使用的流量控制,而通告窗口则是接收端使用的流量控制。
紧急方式
TCP 的 紧急方式,它使一端可以告诉另一端有些具有某种方式的 紧急数据 已经放置在普通的数据流中。另一端被通知这个 紧急数据 已被放置在普通的数据流中,由接收方决定如何处理。然而 紧急数据 并不是 带外数据 。TCP 的紧急方式只是一个从发送方到接收方的通知,该通知告诉接收方 紧急数据 已被发送,并提供该数据最后一个字节的序号,由接收方决定如何处理。应用程序使用的有关 紧急数据 部分的编程接口都不是最佳的,从而导致更多的混乱。
参考资料:
《TCP/IP 详解》
《网络协议》TCP 的成块数据流相关推荐
- 第20章 TCP的成块数据流
为什么80%的码农都做不了架构师?>>> 20.3 滑动窗口 当接收方确认数据后,这个滑动窗口不时地向右移动.窗口两个边沿的相对运动增加或 减少了窗口的大小.我们使用三个术 ...
- TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流
目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...
- TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流
2019独角兽企业重金招聘Python工程师标准>>> 目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分 ...
- 【网络协议】TCP的交互数据流和成块数据流
TCP协议简介 传输控制协议,位于传输层,提供一种可靠的,面向连接的数据传输服务 TCP通过以下方式保证可靠性: 应用程序被分割为适合传输的数据块,UDP不会,UDP只有与IP首部组成IP数据报时才会 ...
- 网络协议-TCP和UDP最完整的区别介绍
网络协议-TCP和UDP最完整的区别介绍 前言:为了方便后期翻看,公众号在慢慢整理所发文章,关于Java网络编程内容的文章,可以在菜单栏-文章整理-进阶篇模块中查看. TCP与UDP基本区别 1. ...
- 网络协议 TCP 数字编号和重传机制
网络协议 TCP 数字编号和重发 1. TCP 的数字编号 2. TCP 确认机制的特点 2.1 TCP一次可发送多个数据包 2.2 仅对连续接收的数据段进行确认 2.3 不连续的数据将先缓存 3. ...
- 网络分层,网络协议TCP/IP模型,OSI模型
TCP\IP模型是多种协议的综合,4层模型(也有说5层的). 其中最重要的就是分层结构和主要协议. 1.应用层(SMTP,HTTP,FTP) 2.传输层(TCP,UDP) 3.网络互联层(IPv4,I ...
- 网络协议-TCP、IP协议和互联网协议群
目录 TCP/IP协议群简介(互联网协议群)(Internet Protocol Suite) 应用层(Application)(合并简化了展示层,会话层) 传输层(Transport) 网络层(In ...
- 网络协议——TCP/IP协议
简介: TCP(传输控制协议)和 IP(网际协议)是两个独立且紧密结合的协议,负责管理和引导数据报文在 Internet上的传输.二者使用专门的报文头定义每个报文的内容.TCP 负责和远程主机的连接, ...
最新文章
- 一个用PPT画画的程序员
- JavaScript 学习(2) - JS的内建对象
- Android组件化初探
- 深度学习-机器学习(5.3支持向量机Python的应用)
- springboot @RequestBody 接收字符串
- csv.writer写入文件有多余的空行
- 删了自己写的代码?判刑10个月!
- Xor Sum(AtCoder-2272)
- WordPress主题-Real Estate 7–房地产[更至v3.1.0]
- 长得像鳗鱼的Envirobot,利用传感器检测并追踪水中有害元素
- eclipse里面自动添加get和set方法
- 加快网站速度的最佳做法_(1)最小化http请求
- 4.6 数值分析: P阶收敛的迭代法
- 贾俊平统计学思维导图- 第七章参数估计
- 汽车租赁管理系统(java)--隔壁小河
- 数据库实验1---创建数据库和表
- GO语言中中文占3个字节,英文占1个字节
- php之RSA加密解密
- Generative Image Inpainting with Contextual Attention
- Cookie、Session、Token、JWT