IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP协议—如何提高数据发送效率 -> 正文阅读

[网络协议]TCP协议—如何提高数据发送效率

滑动窗口

TCP协议中,由于一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大提高性能(将多个段的等待时间重叠在一起)
在这里插入图片描述

窗口大小指的是无需确认应答而可以继续发送数据的最大值,上图窗口大小就是4000个字节(四个段)
发送前四个段,不需要等待任何ACK,直接发送
收到第一个ACK,滑动窗口向后移动,继续发送第五个段的数据,依次类推
操作系统为了维护这个滑动窗口,需要开辟一个发送缓冲区来记录当前没有应答的数据,而确认应答过的数据,会从缓冲区删除
窗口越大,则网络的吞吐率越高

在这里插入图片描述
滑动窗口也有丢包情况,如何进行重传呢?
情况一:数据包到达,ACK丢了
在这里插入图片描述
这种情况下,部分ACK丢了不要紧,可以通过后续ACK进行确认;

**情况二:**数据包丢了

在这里插入图片描述

当某一段报文段丢失后,发送端会一直收到1001这样的ACK,当发送端主机连续收到了三次同样的”1001“这样的应答,就会重发对应的数据1001—2000。
此时接收端收到了1001之后。再次返回的ACK就是7001了(因为2001——7000)接收端其实之前就已经收到了,被放到了接收端操作系统内核的接收缓冲区中,这种机制被称为”高速重发机制“(快重传)。

流量控制

由于接收端处理数据是有限的,如果发送端发的太快,导致接收端缓冲区满了,这时发送端继续发送数据将会导致丢包,继而会引起一系列重传反应,因此TCP根据接收端的处理能力来决定发送的速度,这就是流量控制。

接收端将自己可以接受的缓冲区大小放入TCP首部中的“窗口大小”字段,通过ACK段通知发送端窗口的字段越大,网络吞吐量越高。
接收端一旦发现自己快满了,就会将窗口大小设置成一个更小的值传给发送端,发送端接收到这个数据后就会减缓发送速度。
如果接收端缓冲区满了,此时窗口大小设置为0,发送端将不会在发送数据,而是定期发送一个窗口探测数据段,使接收端将窗口大小告诉发送端。

拥塞控制

核心就是防止开始传输时由于传输数据过大,网络不好而引起的大量丢包问题,引入慢启动机制,开始先发送少量数据看网络是否堵塞,然后在决定以多大的速度传输数据。

引入一个概念称为拥塞窗口,发送开始的时候, 定义拥塞窗口大小为1,每次收到一个ACK应答, 拥塞窗口加1。
每次发送数据包的时候, 将拥塞窗口和流量控制的窗口大小做比较, 取较小的值作为实际发送的窗口。
拥塞窗口是按指数增加的,为了避免拥塞窗口增长的太快,引入一个慢启动阈值,当拥塞窗口超过这个阈值的时候,变为线性增长。
慢启动开始的时候,阈值等于窗口的最大值,每次超时重传时阈值变为原来的一半,拥塞窗口置回1。
当TCP开始通信的时候,网络吞吐量开始上升,随着网络拥堵,吞吐量立刻下降。

拥塞控制归根结底就是 TCP协议尽可能的将数据传输给对方,但又要避免给网络造成太大的压力的折中方案。

延迟应答

如果接收端接收到数据就返回一个ACK的话,此时返回的ACK就会很小,比如说:如果接收端缓冲区为800KB的话,发送一个400KB的数据,立即返回的话窗口大小只有400KB,但是延迟一会再发的话,缓冲区可能就会把这400KB的数据处理掉了,这时返回的窗口大小就为800KB,极大的提高传输效率
但并不是所有的包都可以延迟应答,他会收到数量限制和时间限制,每隔一定数量的包就应答一次,超过最大延迟时间就应答一次。

捎带应答

在延迟应答基础上,客户端服务器在应用层上也是“一发一收的”,那么此时ACK就可以搭顺风车和服务器回应的数据一起回给客户端。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:04:52  更:2021-08-16 12:07:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 19:50:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码