可靠 UDP 传输设计

      最后更新:2022-04-25 21:17:25 手机定位技术交流文章

      现打算今天向大家介绍一个可靠的联合民主党的建筑结构,分为三部分:

      1. 何时可以使用UDP通讯来代替TCP?
      2. 如何为可信任的 UDP 通信模块创建 API 界面
      3. 一个C版本的实现

      联合民主党何时才能更有用?

      我反对使用基于联合民主党的安全传输协议,这种协议类似于TCP。TCP已经很困难了。改进现有设计几乎是困难的。如果利用UDP来创建更可靠的通信协议,它的表现超过了TCP。太多只是部分收益;或霸权消耗太多资源。TCP本来是要方便用户的。更高的要求是整个网络的完整性。在网络游戏,特别是移动网络的网络游戏圈,根据《联合民主党议定书通讯》,人们不断要求作出更快的反应。并试图使诸如TCPs等通信流动在总体上更加可靠。我对此也有很多想法。这到底是怎么回事?如果以联合民主党为基础的协议优于TCP,那么它一定已经放弃了TCP所需要的一些东西。

      设想1:假设商业逻辑会使信息丢失:在同步状态中,如果政府是有效的,因此,过时的国家信息丢失了。这就需要在每个时间或周期同步提供完整的国家信息。每份新的全量材料取代前一份材料。此方法也可以用于同步播放器在现场的位置 。不过在实际操作中,我发现,允许中间国家 丢失导致业务层面的写作将非常困难。全面同步的可能性微乎其微。

      那么,不允许信息丢失,但是,允许随机顺序是否更可取?当所有袋子都交付后丢失的软件包将会通过某种程序受到怨恨。因此,你还可以另外保证命令。和TCP完全一样,给每个包件指定一个序列号。唯一的好处是,这样做是不正确的。即使其中一个袋子延迟了操作层面很可能可以初步进入包件的背部。

      在什么情况下包件与顺序无关?最普遍的是单一请求的答案。 从这个意义上说,DNS查询是互联网上最广泛地应用UDP。

      如果互联网连接发生故障,我们可以观察到,偶尔会使用小型连接,以提供比长期连接更好的用户经验。短期联系与长期联系之间没有区别。谁的回答先于谁,没有区别。如果某个请求超时,一个新的短连接可以立即形成。这时,事实上,这是在业务一级。以及以一站式方式提供的信息数量有限。这就是TCP的弱点:典型的TCP连接需要三种交易。为了完成沟通,需要四次接触。如果你只为了发送少量的数据而建立通信, 你就可以利用它来这样做。显然,这是浪费。因此,Google的 QUIC 与旧的 http/ over TCP 协议相比有改进的空间。

      我的结论如下: 关于联合民主党的协议,这是第一次采用有超时的请愿答复方法。这是世界历史上第一次。就业绩而言,可以比TCP通信工作成绩好。然而,概念是,单一请求或答复包应尽可能少。不应有一个以上的MTU。在互联网上,大约有500字节。

      3: 如何创建 API 接口

      在建立可靠的通信协议时,需要解决的最重要问题是达成一项协议,以便在使用错误的数据传输时实现可靠的传输(保证订单不会丢失),所使用的通信API类型是次要的。

      因此,我认为整个单元应只提供输入和输出数据组合的接口,而不是网络通信API。

      一般来说,在网络游戏或其他需要最小潜伏的应用程序中,我们都需要不断保持心跳,以监测连接的质量。因此,它肯定会用于周期维护,这与一般网络不同。

      这是设计图更新的API, 它需要操作层在时间周期中被调用 。当然,它可以在同一时间段内多次调用。输入参数勾会自我区分 。如果选中为 0, 表示它和电影的时间线相同 。不用急着处理数据,当选取值大于零时才表示时间流逝,这将使数据集中处理在整个前一个时间周期能够合并。

      每个rudp_ update call 都可以被发送到真实接收的 UDP 套件( 可以是整个 UDP 套件 ) 。也可以是一部分),这个软件包数据是个谜在业务一级,不需要具体细节。其编程以与结尾的相同型号的编程模块为基础。

      每通电话都可能产生一系列必须传送的UDP包。上一个 rupp_ send 调用加压数据来生成数据包 。它还包括最近收到的数据包。数据可能需要在结论时再次传送。以及当没有通信数据时使用的心跳包。

      总的来说,Rudp_更新处理可靠通信所需的所有数据组织。从UDP锁扣收到的数据由用户发送(没有数据加密或任何数据组织)。然后获取你需要向联合民主党乡镇提交的信息。

      在操作层面,仅通过使用 rupp_send 和 rupp_recv 函数接收和传输数据。其中,Rudp_recv 保证在正确的序列中生成数据集; Rudp_send 不提供数据集 。这是一团乱七八糟的乱七八糟的东西等待下一个时间片。

      Rudp_new 是一个生成 rubp 对象的函数 。有两个参数可配置。发送延迟是数据在一起打包和传送之前累积的时间。过期时间指定了发包后经过多少时间周期。和 TCP 不同,从那以后,我们一直在使用乌龟通讯这一切都归结为反应时间。因此,即使数据被推迟,他们不必长期存放。异常现象只应在业务一级报告。

      (3) C版本的执行

      我花了两天时间研拟一个可靠的通讯协议 并做了一个基本的实现。

      在过去两天里,设计了三个版本,其中两个版本由于过多考虑议定书的紧凑性而变得复杂起来,在我达到700多行C代码之后,我颠倒了重写。

      最近实现的版本如下:

      通信是双向的,各方要么作为数据生产者P,要么作为数据消费者C。

      每个逻辑包用16位数的序号确定。从 0 开始编码,如果达到64K的限度,则返回0。通讯过程中,如果收到数据包和上一个 ID 软件包为 32K, 则正和负之间的差值为32K。现在,让我们做一个更符合逻辑的修改。例如,如果之前的序号是2的话下一个包是两个应该是这些序列号的前三个而不是回到一个非常遥远的序列号

      物理包件可以包含若干逻辑包件,但物理包件可以保证在512字节之内,可以分解成许多包件。 尽管如此,任何逻辑包件都不能分离成不同的物理包件。

      如果生产厂商P被要求重新发行一定的序列号包,消费者C可以开始提出请求。 有几个请求可以包装在同一个物理包中,也可以与要发出的逻辑包合并。

      这里采用请求机制,而不是类似TCP的确认机制,这是特殊情况造成的请求方法已经简化。正常网络状况下,采用缺失的一揽子办法(确定收到这套办法的逻辑办法数目不正常)替代其余人口,是不可行的。相反,让客户C澄清他得到了什么袋子。P制片人了解到,非邀约物品被大肆重新发行;它们极不常见。其差别可以忽略。

      主要区别在于,我使用请求方法,请P尽可能保留我提供的数据。正常通讯条件下,由于没有确认机制,P可能不愿随意放弃先前提供的数据。但在这里,我们可以根据所花费的时间来抹去旧数据。这就是为什么我们避免它的原因。

      此外,还需要在没有数据的情况下保留空袋系统,并在出现异常时相互通报异常情况。

      最后,有四种类型的数据有明确的格式:

      最后两部分信息必须跟上两字序号(通过大端编码)。

      典型的数据集可直接作为长度+ id+数据写入。

      所有五个数据类别都可以使用标签+数据统一编码。对于前四个数据,在标签部分直接编码03,或在上一个数据包(数据长度+4)编码。

      tag 采用 1 或 2 字节编码。如果 tag < 127 编码为 1 字节,tag 是 128 到 32K 间时,编码为两字节;其中第一字节高位为 1 。tag 不能超过 32K 。

      以下是一个非常简单测试的代码。 为了信息目的, 请注意, 我将一个宏General_ PANKAGE 定义为 128 用于测试方便性。 实际使用应该修改为 MOTU 大小或大致大小 。

      我想用它来威胁我的学生。幸运的是,这并不难, 只要500多行的C代码 和问题更容易发现。

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

          热门文章

          文章分类