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如何实现可靠传输、UDP实现可靠传输之KCP协议 -> 正文阅读

[网络协议]TCP如何实现可靠传输、UDP实现可靠传输之KCP协议

TCP如何实现可靠传输

1. ACK机制

每发送一帧TCP报文,发送方都会收到接收方的ACK应答包,告知发送方接收方已经收到完整的报文。ACK信息存储在TCP报文中。

2. 序号机制

每一帧报文中都含有序号,TCP三次握手时发送同步包时会将服务端和客户端的序号进行同步。

3. 重发机制GBN

接收方会以累积响应的方式,来确认收到了那些序号的TCP报文,并向接收方发送对应序号的ACK应答包。如果发送方没有收到接收方返回来的ACK应答包,并且超过了超时时间RTO,发送方会选择序号最小的TCP报文开始重发,后面的报文也会重发,这是GBN(GO BACK N)重发机制。并且超时时间RTO会随着丢包次数成倍增加,RTO = RTO * 2。

4.重排机制

TCP采用的的时GBN模式发送数据,即一次性发送一组TCP序列,一组序列包含多个TCP报文,一组一组发送的TCP报文在网络上并不能按次序从发送方到达接收方,于是出现了重排,即到达接收方会自动按顺序对TCP报文进行排序

5.窗口机制

发送方和接收方都会维护一个数据帧的序列发送方的窗口大小由接收方所确定,数据从发送方到达接收方时处于第一个位置就是窗口,窗口可以控制发送速度,以免接收方的缓冲区不够大,同时控制流量避免拥塞
发送方会根据应答报文中接收方的接收窗口大小来调整发送窗口(拥塞窗口)的大小,而接收窗口的大小并不是固定的,是根据动态算法调整的。通常接收窗口>=发送窗口。

6.流量机制

发送方和接收方的速率不一定相同,所以可能会导致接收方接收缓存区数据满了,会将发送来的数据扔弃。所以接收方每次收到数据之后会将自己剩余窗口大小通知给发送方,发送方会根据对方的窗口大小来判断是否发送数据。如果发送方得知对方窗口大小为0时,会开启一个定时器,当定时到达时会再次发送数据。

7.连接管理

参考https://blog.csdn.net/u010853261/article/details/82085738

8.拥塞控制

涉及到拥塞控制算法:慢启动和快恢复。纵坐标表示发送窗口,横坐标表示发送次数。
在这里插入图片描述

KCP如何利用UDP来实现可靠传输

UDP协议报文格式UDPKCP以10%-20%的带宽浪费换取比TCP快30%-40%的传输速度。

1. RTO不翻倍

在前面说到接收方超过超时等待时间之后,会将超时等待时间RTO进行翻倍,当出现多次丢包会将等待时间延长非常快,降低传输速率,所以KCP快速模式下将第二次RTO乘1.5,即RTO = RTO*1.5。

2. 选择性重传

在TCP下,当一组数据中的某个序号丢包之后,接收方会让发送方会将该序号以及后面序号的TCP报文全部重新发送,即全部重传。而KCP则会选择性重传,只重传丢失的TCP报文。

3. 快速重传

当某个序号包n在接收时被跳过了两次,即收到了第n+1、第n+2个包,但第n个包未收到,就会马上通知发送方马上重传第n个包,改善了重传速度。

4. 非延迟ACK

在TCP中使用的时延迟ACK,即发送一序列包后,再返回ACK,增大了频带利用率,但降低了速度。所以在KCP中可以选择是否延迟发送ACK应答包

5. UNA + ACK

ARQ模式下有两种响应方式1.UNA:此前所有的包都已经收到;2.ACK该编号的包已经收到。光用UNA会导致重传,光用ACK则丢包成本高,TCP是二选一。而KCP使用的是,单独的包使用ACK外,其余的用UNA

6. 非退让流控制

KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。

KCP源码框架

源码框架

源码git clone

git clone https://github.com/skywind3000/kcp

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-15 18:40:09  更:2021-12-15 18:41:16 
 
开发: 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年10日历 -2024/10/5 7:07:17-

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