| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> UDP的可靠性传输详解 -> 正文阅读 |
|
[网络协议]UDP的可靠性传输详解 |
文章目录UDP和TCP的区别 TCP UDP 为什么要使用UDP传输可靠性数据 如何使用UDP传输可靠性数据 KCP的使用方式 kcp配置模式 kcp的协议头 UDP和TCP的区别Tcp和udp都是属于TCP/IP协议(传输层协议)。 TCPTCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要经过三次握手,断开连接时需要四次挥手。 TCP的可靠性主要体现在什么方面呢? 1. 应用数据被分割成TCP认为最合适发送的数据块。 这个和UDP完全不同,应用程序将产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段。最大报文段(MSS)表示TCP传往另一端的最大块数据的长度。连接建立时,双方都需要通告自己的MSS。默认情况下MSS的值为536字节(可以加上20字节的IP首部和20字节的TCP首部)。对于一个以太网,最大的MSS可达到1460字节(1500(MTU) - 20(IP) - 20(TCP))。 2. 当TCP发出一个段之后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段。 3. 当TCP收到另一端的数据,他将发送一个确认。这个确认不是立即发送,而是延迟几分之一秒。 4. TCP将保持它首部和数据的校验和。这个是一个端到端的检测,目的是检测数据在传输时的任何变化,如果有收到段的检验和有差错,tcp将丢弃这个报文段和不确认收到此报文段。 5. 既然tcp报文段作为ip数据报来传输,而ip数据报的到达可能会失序,因此tcp报文段的到达可能会失序。如果必要,tcp将对收到的数据进行重新排序。 6. ip数据报会发生重复,tcp的接收端必须丢弃重复的数据。 7. TCP提供流量控制。 UDPUDP(UserDatagramProtocol)是一个简单的面向消息的传输层协议,尽管UDP提供标头和有效负载的完整性验证(通过校验和),但它不保证向上层协议提供消息传递,并且UDP层在发送后不会保留UDP 消息的状态。因此,UDP有时被称为不可靠的数据报协议。如果需要传输可靠性,则必须在用户应用程序中实现。 C++后台开发系统学习地址:C/C++Linux服务器开发高级架构师/C++后台开发架构师? 以下学习资料,C++后台开发面试题,教学视频,C++后台开发学习路线图,免费分享有需要的可以自行添加:学习资料群720209036 自取 为什么要使用UDP传输可靠性数据UDP(User Datagram Protocol)传输与IP传输非常类似,它的传输方式也是"Best Effort"的,所以UDP协议也是不可靠的。我们知道TCP就是为了解决IP层不可靠的传输层协议,既然UDP是不可靠的,为什么不直接使用IP协议而要额外增加一个UDP协议呢?
UDP将数据从源端发送到目的端时,无需事先建立连接,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。 UDP传输的可靠性由应用层负责,由应用程序根据需要提供报文ACK机制、重传机制、序号机制、重排机制和窗口机制。这些TCP已经都具备了。 如何使用UDP传输可靠性数据KCP主要的优势体现在以下方面:
名词说明: 用户数据:应用层发送的数据,如一张图片2Kb的数据 MTU:最大传输单元。即每次发送的最大数据 RTO: Retransmission TimeOut,重传超时时间。 cwnd:congestion window,拥塞窗口,表示发送方可发送多少个KCP数据包。 与接收方窗口有关,与网络状况(拥塞控制)有关,与发送窗口大小有关。 rwnd:receiver window,接收方窗口大小,表示接收方还可接收多少个KCP数据包 snd_queue:待发送KCP数据包队列 snd_nxt:下一个即将发送的kcp数据包序列号 snd_una:下一个待确认的序列号 KCP的使用方式
kcp配置模式1.工作模式: int ikcp_nodelay(ikcpcb *kcp, int nodelay, int interval, int resend, int nc)
2.最大窗口: int ikcp_wndsize(ikcpcb *kcp, int sndwnd, int rcvwnd); 该调用将会设置协议的最大发送窗口和最大接收窗口大小,默认为32,单位为包。 3.最大传输单元: int ikcp_setmtu(ikcpcb *kcp, int mtu); kcp协议并不负责探测 MTU,默认 mtu是1400字节 4.最小RTO:不管是 TCP还是 KCP计算 RTO时都有最小 RTO的限制,即便计算出来RTO为 40ms,由于默认的 RTO是100ms,协议只有在100ms后才能检测到丢包,快速模式下为 30ms,可以手动更改该值: kcp->rx_minrto = 10; kcp的协议头conv:连接号。 UDP是无连接的, conv用于表示来自于哪个客户端。对连接的一种替代 cmd:命令字。如, IKCP_CMD_ACK确认命令, IKCP_CMD_WASK接收窗口大小询问命令, IKCP_CMD_WINS接收窗口大小告知命令, frg:分片,用户数据可能会被分成多个KCP包,发送出去 wnd:接收窗口大小,发送方的发送窗口不能超过接收方给出的数值 ts:时间序列 sn:序列号 una:下一个可接收的序列号。其实就是确认号,收到 sn=10的包, una为11 len:数据长度 data:用户数据 参考资料推荐一个零声教育C/C++后台开发的免费公开课程,个人觉得老师讲得不错,分享给大家:C/C++后台开发高级架构师,内容包括Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/26 1:55:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |