UDP的可靠性传输

      最后更新:2021-11-25 06:39:36 手机定位技术交流文章

      文章目录

      • UDP和TCP的区别
        • TCP
        • UDP
      • 您为什么要使用 UDP 发送可信数据?
      • UDP如何发送可靠性数据
        • KCP的使用方式
        • kcp配置模式
        • kcp的协议头

      UDP和TCP的区别

      TCP/IP协议(传输层协议)既包括tcp,也包括udp。

      TCP

      TCP(《转让控制协议》)是一个面向连接的协议,这意味着在接收或传输数据之前必须建立可靠的链接。 TCP连接在中断之前必须三次握手,而中断连接需要四个波浪。

      TCP可靠性的最重要组成部分是什么?
      一. 使用数据分为TCP认为最适合传输的数据区块。
      这与UDP完全不同,应用程序生成的数据报告长度保持不变。 报告段落是 TCP 提供给 IP 的信息单位。 最大报告段落(MSS) 确定 TCP 向另一端传送的最大区块数据的长度。 连接一旦建立, 双方必须通知 MMS.By 默认值, MSS 的价值为 536 字节。

      二. 当TCP发出一款时,它规定一个计时器等待从索赔结束之时收到确认,如果在合理的时间内没有收到确认,将重新印发。
      第三,当TCP在另一端获得数据时,他发出确认函,确认函比往常晚一分钟提交。
      四. TCP将保留其初始部分和数据的校验总和,这是一个端对端测试,用以识别传输期间数据的任何变化,如果接收部分有测试和错误,tcp将丢弃条目,不确认收到。
      五. 由于 tcp 报告的内容作为ip数据报告传送,ip数据报告的到来可能与 tcp 部分的到来一样不合序,如有必要, tcp将重新订购所收到的数据。
      六. ip数据报告已被复制, tcp 接收者必须删除。
      七,TCP负责交通管制。

      TCP头部结构

      UDP

      UDP(UsrDatagram Protocol)是一项基本的信息导向传输层协议,虽然UDP提供信头和有效载荷完整性的确认(通过校验总和),但它不能确保信息传输到更高层次的协议,UDP层在发送后不能保持UDP信息的地位,因此,UDP经常被称为不可靠的数据报告系统。
      在这里插入图片描述

      您为什么要使用 UDP 发送可信数据?

      用户数据表协议(UDP)传输与IP传输非常相似,而IP传输也是由最佳努力传递的,UDP协议是不可靠的。 由于TCP试图在IP层上创建错误传输层协议,为什么不直接使用IP协议添加额外的 UDP协议呢?

      1. 一个关键问题是,知识产权协议中没有港口(港口)概念。 IP处理将IP地址传送到IP地址的问题,这意味着两台计算机之间的对话。 然而,每台计算机都需要许多通信渠道,并给不同的程序分配多种通信渠道。 一个港口代表着这种通信渠道。 IP处理将IP地址传送到IP地址的问题,这意味着两台计算机之间的对话。 但是,每台计算机都需要许多通信渠道,并为不同的程序分配多种通信渠道。 一个港口象征着这种通信渠道。
      2. 我们只需要一个“最大努力”的IP传输 用于某些简单的通信, 我们不需要TCP协议的复杂手段来建立连通性(特别是在早期的网络环境中, 太多的TCP连接会造成巨大的网络紧张, UDP协议可以非常迅速地处理这些简单的通信 ) 。
      3. 在利用TCP协议传输数据的同时,如果数据部分丢失或接收端不承认数据部分,发送者将重新发送数据部分,造成传输延误和数据重复,减少用户经验,对于延迟和敏感应用而言,通常可以容忍丢失少量数据,此时使用UDP传输将增加用户经验。

      在将数据从来源传送到目的地时,联合民主党不需要事先建立连接,在TCP不采用识别技术或滑动窗口机制,因此无法确保数据传输可靠性或避免接收重复数据。

      该方案负责UDP传输的可靠性,其中包括ACK机制、再传输方法、序列编号机制、重新分配系统和视窗机制。 这些TCP已经到位。

      UDP如何发送可靠性数据

      KCP是一个开放源码的UDP可靠性工具, 将会成为这篇文章的主题:https://github.com。
      以下是KCP的主要优势:

      1. 传输率比TCP交易速度快30%至40%,损失10%至20%的带宽。
      2. RTO翻倍与不翻倍:TCP超时为 RTOx2, 从而连续三次下降, 将 RTOx8 转换为 RTOx8, KCP 开始快速模式, 不是2 次, 而是1.5 次( 专家证书 1 ), 这是一个合理的极好值, 加速传输速度 。
      3. 选择重新转发对全部重新发送 : 当 TCP 丢失一个软件包时, 它会重新发送该软件包中的数据 。 KCP 有选择地重新发送丢失的软件包中的数据, 仅通过传真 。
      4. 快速再传送(跳过和再次传送的袋数)(如果采用快速再传送,可忽略转口)
      5. 发件人交付了超过1,2,3,4,5个包,并收到了1,3,4,5个远程反包。当KCP得到ACK3时,它知道有2个被跳过一次,当它收到ACK4时,它知道有2个被跳过两次,因此可以假定2号已经丢失,并立即立即再次传送到ACK2,不再拖延,在投下袋子时大大加快了传输速度。
      6. ARQ模型以两种方式答复了UN和ACK+UNA:UNA(在这一编号之前收到的所有包件,例如TCP)和ACK(收到的包件),单使用UNA就会导致完全的再传送,而光使用ACK的成本就高得令人望而却步,而在KCP协议中,除单独的ACK包件外,所有包件都包含UNA信息。
      7. 非退款流量控制:在正常模式下,KCP遵循与TCP相同的公平收益率规则,即发送窗口大小由发送缓存大小、接收端剩余接收缓存大小、放弃和启动缓慢等四个因素界定。然而,在传输少量及时性要求高的数据时,选项是按配置省略后两个阶段,仅使用前两个阶段来限制传输频率。

      名词说明:
      用户数据:应用层提供的信息,如2Kb图像。
      MTU: 最大运输单位。 这是可以一次性传送的数据数量 。
      RTO是重新传输超时的缩略语。
      cwnd: congecion 窗口,又称凝结窗口,显示发件人可以传送多少个 KCP 数据包。
      与接收窗口、网络状态(会议控制)和发送窗口大小有关。
      rwnd: receiveer 窗口, 收件人窗口的大小, 显示收件人可能收到多少 KCP 数据包 。
      snd_ queue: 用于发送 KCP 数据组队列 。
      snd_nxt: 要发送的 kcp 数据包的下一个序列号 。
      snd_una:下一个要确认的序列号是 snd_una。

      KCP的使用方式

      1. KCP 对象的创建方式如下:ikcpcb *kcp =ikcp_ create (conf, user);
      2. 设置传输回调函数(如UDP的send函数): kcp->output = udp_output;
      3. 实际数据传输需要呼叫Sendto。
      4. ikcp_ 更新 (kcp, mmilisec); 循环更新
      5. 输入应用程序层数据包(例如 UDP 软件包):ikcp_ input (kcp, 收到_ udp_ packet, 收到_ udp_ size);
      6. 我们会用解析器接收 然后传送到 kcp 进行分析 。
      7. 数据传输: ircp_ send (kcp1, 缓冲, 8); 用户层界面
      8. 收到数据:hr=ikcp_recv(kcp2,缓冲,10);

      在这里插入图片描述

      kcp配置模式

      1. iccp_ nodelay( iclpcb* kcp, int nodelay, int 间隔, int resend, int nc) 作为工作模式
      • 无换代:是否启用了无换代模式; 0 表示没有启用无换代模式; 1 表示启用了无换代模式 。
      • 间歇:内部工作间隔,以毫秒计,如10毫秒或20毫秒。
      • Resend: 快速再传送模式, 0 默认关闭, 设置 (2 个 ACK 十字架将直接重新传送)
      • nc:是否默认关闭流量控制,有0个表示不应关闭,1个表示应关闭。
        iccp_ nodelay (kcp, 0, 40, 0, 0, 0) ; 正常模式 iccp_ nodelay (kcp, 0, 40, 0, 0, 0); 。
        ikcp_nodelay (kcp, 1, 10, 2, 1) 是速度模式 。
      1. inccp_ wnd 大小 (ikcpcb*kcp, int sndwnd, int rcvwnd) ;
        该呼叫将设定协议的最大分布窗口和最大接收窗口大小, 默认为32, 并包装 。
      2. Inkp_setmtu (ikcpcb*kcp, intmtu) 是最大运输装置 。
        kcp 协议未检测到 MTU 。 默认 mtu 大小为 1 400 字节 。
      3. 最低限度的ROTO:无论TRTO是由TCP还是KCP决定,RTO都是使用最低的RTO限额计算的。
        由于ROTO默认设定为100米,协议只检测100米之后的投放袋。
        30ms,可以手动更改该值: kcp->rx_minrto = 10;

      kcp的协议头

      在这里插入图片描述

      • 连接:连接 UDP 没有连接。Conv 用于显示其来源。
        客户端。 另外一个连接选项
      • cmd: 命令单词, 如 IKCP_ CMD_ ACK, 用于校验命令 。
        IKCP_CMD_WASK 命令支持窗口大小调查指令。
        IKCP_CMD_WINS 接受窗口大小通知命令 。
      • 碎片: 碎片, 用户数据被分解成多个 KCP 软件包并发送出来 。
      • wnd: 接收窗口大小; 发件人的发件人窗口不能大于收件人的窗口 。
        给出的数值
      • ts:时间序列
      • sn:序列号
      • una: 下一个有效序号。 这是一个确认编号。 请注意这一点 。
        sn=10袋,una=11
      • len:数据长度
      • data:用户数据

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/13767.html

          热门文章

          文章分类