当前位置: 首页 > 网络应用技术

哪个对UDP大数据包更好?

时间:2023-03-05 19:31:28 网络应用技术

  简介:今天,首席CTO指出要与您分享UDP大数据包的良好相关内容。如果您可以解决您现在面临的问题,请不要忘记注意此网站。让我们现在开始!

  最初,他们两个被传输以应用不同的需求。它必须是UDP,因为在真实时间内,大量数据传输,抛出某些软件包并不会阻碍实际的时间性质;如果它是一个非常好的网络,并且数据完成,则只能优先考虑TCP。进行验证和判断框架拆卸和分包框架更加麻烦,但绝对比TCP更好。这是公司的人力资源允许的时候;

  因此,总而言之:Internet的传输得到了UDP的优先级,而高级人员只能使用UDP。TCP的开发相对简单。可以考虑用于发展效率;

  如果是局部网络的传输,请考虑考虑一下,请勿使用TCP。无论是真实的 - 时间还是大文件,都使用TCP,因为没有质疑LAN的网络速度;

  此外,以QQ示例为例,我个人认为,在QQ文件传输中,应该确定另一个朋友是否与我在同一局域网上的同一局域网下。

  不!

  UDP数据包与TCP数据包相同。这是网络协议数据包!

  UDP数据包具有强大的网络渗透能力,可用于具有相对复杂的网络环境的网络通信。

  UDP数据包的缺点将等待接收器像TCP数据包一样验证。无论是合法的,数据包是否是合法的,UDP数据包比TCP数据包更容易损失数据包。

  如果您将大量的UDP数据包发送到主机,您将引起DOS攻击。从各种制造商的硬件防火墙的视角,只能实现UDP数据包。大多数TCP和SYN数据包将被拦截并且无法形成攻击。

  在编写在线游戏时,使用UDP或TCP的问题迟早会面临。

  一般而言,您会听到人们说:“除非您正在编写动作游戏,否则可以使用TCP”或“您可以在MMO游戏中使用TCP,因为魔兽世界使用了TCP!”

  不幸的是,这些观点都没有反映出这个问题的复杂性。

  背景

  首先,说明我曾经将TCP用于网络编程。我已经为流行的在线卡游戏编写了一台服务器已有几年了。在高峰期,我们的服务器可以承受4,000至10,000个连接(同一物理机上有多个服务器进程)。从我的角度来看,TCP是一个安全且常见的选择。

  但是,我们的最新项目是使用UDP协议,我们的项目无法以任何方式在TCP下工作。无法满足我们的需求,我们只能用UDP替换它。

  使用中的TCP性能如何?

  原则上,TCP的优势是:

  简单直接的长连接

  可靠的信息传输

  数据包的大小不限

  任何与TCP打交道的人都知道,要实现稳定的TCP网络连接,需要处理各种隐藏的坑,例如断开连接的检测,对阻止数据包的客户端响应缓慢,以及与开放连接的各种DOSS。

  除了上面列出的这些问题外,一个好的TCP模块确实很难编码。

  然而,TCP最糟糕的特征是它对阻塞的控制。从总体上讲,TCP假设数据包丢失是由网络带宽不足引起的,因此,当发生这种情况时,TCP会降低包装速度。

  在3G或WiFi下,丢失了一个数据包。您想要的是立即恢复此数据包,但是TCP的阻塞机制完全以相反的方式处理!

  而且没有办法绕过这种机制,因为这是构建TCP协议的基础。这就是为什么在3G或WIFI环境中,Ping值可以上升到超过1,000毫秒的原因。

  为什么不使用UDP

  UDP比TCP简单且困难。

  例如,UDP基于数据包,这意味着您在某些方面要求您完全颠覆tcp.udp下的概念,仅使用套接字进行通信。与TCP不同,您需要为每个客户端构建一个套接字连接。它们非常好。

  但是,在大多数情况下,您只需要一些连接的概念,一些基本的包装功能以及因此被称为连接的可靠性。不幸的是,这些功能UDP无法简单地为您提供,您可以使用TCP免费获得它。

  这就是为什么人们经常建议使用TCP的原因,您可以在使用TCP时考虑这些问题,直到您需要连接数量的顺序才能达到500多个。

  因此,是的,UDP并未提供所有解决方案,但是如您所见,这正是UDP的使用。从某种意义上说,TCP就像Hibernate和手写SQL之间的差异一样。

  无法使用TCP的地方

  人们经常向您提供建议让您使用TCP,例如“ TCP与UDP一样快”或“游戏X在TCP中如此成功,因此TCP当然是首选”,但是,他们不了解为什么在此依据特定的游戏TCPIT是有效的,为什么UDP按顺序发送数据包?

  那么,为什么魔兽世界使用TCP?首先,我们需要解释这个问题。这个问题实际上是“为什么在魔兽世界中延迟了1000毫秒以上?”这取决于TCP的性质。当出现数据包丢失时,将会有很大的延迟,因为TCP将首先检测到将检测到哪些包裹。LOST,然后重新出现所有丢失的袋子,直到收到它们。

  可靠的UDP也会延迟,但是由于它是根据UDP建立的通信协议,因此可以通过各种方式减少。与TCP不同,一切都取决于TCP协议本身,并且不能捕获。

  在这方面,有些人必须开始提及Nagle算法。实际上,当您意识到任何对延迟延迟敏感的TCP模型时,您需要禁止使用。

  那么,《魔兽世界》和其他一些游戏如何处理延迟呢?

  该方法也非常简单,它们可以隐藏延迟的影响。

  在《魔兽世界》中,玩家和玩家无法碰撞:因为这样的碰撞不能通过一些预测来处理,但是玩家和环境之间的碰撞可以通过预测处理,因此TCP在这里没有问题。这里的问题没有问题。

  让我们看一下《魔兽世界之战》,我们会发现玩家对服务器的攻击指令的操作放在“ taction_entity(entity_id)”或“ cast_spell(entity_id,spell_id)”的接口中其他词语操作独立于此。这样,可以直接执行启动攻击和发布技能的一些类似效果,而无需收到服务器确认。例如,在服务器返回数据之前,可以表现出冻结技能的效果。

  客户端直接开始计算,而无需等待服务器确认这是典型的隐藏延迟技术。

  几年前,我为“五张爵士乐”的纸牌游戏写了一个客户。它使用了HTTP协议,该协议比直接TCP协议连接的延迟更为严重。

  我们使用简单的卡绘图和绘图动画来掩盖延迟问题,因此仅在非常糟糕的连接下看到延迟问题。此方法也非常典型:发送请求时,开始播放表表的动画,并继续播放最后一张卡,直到收到服务器传递的数据为止。《魔兽世界》的战斗效应是使用类似的原理。

  这也意味着我们使用TCP还是UDP取决于我们是否可以隐藏延迟。

  TCP何时会失败

  带有TCP的游戏必须能够处理突然延迟的问题(卡客户端是典型的,并且玩家对一个秒延迟的投诉将没有任何投诉),或者有一个很好的方法来缓解延迟问题。

  但是,如果您正在运行无法使用任何延迟措施的游戏?玩家通常属于玩家的动作游戏,但这不仅限于动作游戏。

  例如:

  我目前正在编写一款多玩家游戏(战争Arcana)。

  一个普遍的操作是,您可以通过充满战争的世界地图快速移动角色,但是一旦探索,雾将被打开。

  为了确保游戏规则并防止玩家作弊,服务器只能显示在玩家当前位置附近的信息。这意味着与魔兽世界不同,玩家在不接收服务器响应的情况下无法做出完整的动作。五张爵士乐,即使我们允许延迟500毫秒,我们也非常困难。

  在实施了游戏的原型后,LAN中的所有内容都非常顺畅,但是当我们在WiFi环境中进行测试时,该操作将间歇性地卡住或延迟。编写一些测试程序后,我发现该数据包丢失偶尔会发生在WiFi环境。每当包数据包丢失发生时,服务器的响应速度都会从100-150毫秒升至1000-2000毫秒。

  无法绕过TCP的设置以避免此问题。

  我们替换了TCP的代码,并使用自定义和可靠的UDP实现了它。大量数据包丢失产生的延迟仅为50毫秒,甚至比上一个TCP的背部和forth延迟小,而没有包装。可靠性。

  混乱:可靠的UDP只是TCP的简单实现吗?

  您是否听说过:“可靠的UDP就像TCP,所以请使用TCP。”

  问题在于该语句是错误的。可靠的UDP不像TCP,要实现特殊的阻止控制。

  另一点是如何保证UDP的可靠性。这里有许多实施方法。我喜欢Quake3网络库代码中的某些想法,他们还启发了我在War Arcana中使用UDP协议。

  您还可以使用许多支持可靠通信的UDP库。当然,就可靠性而言,与您自己相比,它可能更普遍,并且失去了一些性能优势。

  底线

  那是UDP还是TCP?

  如果它是端客户间歇性查询,并且偶尔延迟可以忍受它,请使用HTTP/HTTPS。

  如果客户和服务器可以独立包装,但偶尔延迟可以容忍(例如在线卡游戏,许多MMO游戏),请使用TCP长连接。

  如果客户端和服务器可以独立包装,并且他们无法承受延迟(例如:大多数多人行动游戏,一些MMO游戏),则使用UDP。

  还应考虑这些:您的MMO客户端可以首先使用HTTP获取先前的更新内容,然后使用UDP连接到游戏服务器。

  永远不要害怕使用最佳工具来解决问题。

  UDP协议的全名是用户数据报纸。在网络中,它用作处理数据包的TCP协议。在OSI模型中,在第四层 - 传输层,在IP协议的上层上。UDP的缺点是不提供数据报纸组,汇编,无法对数据包进行排序。也就是说,当发送消息时,不可能知道它是否安全且完整。

  为什么使用UDP

  选择协议时,您必须谨慎选择UDP。在网络质量不是很令人满意的环境下,丢失UDP协议数据包的丢失将更加严重。但是由于UDP的特征:它不属于对于连接协议,它具有少量资源消耗和快速处理速度的优势。因此,UDP中使用了更多音频,视频和普通数据,因为它们偶尔会丢失一个或两个数据库会对接收结果产生太大影响。例如,我们用于聊天的ICQ和OICQ是使用的UDP协议。

  在Java操纵UDP

  在JDK中使用Java.net软件包下的DataGramSocket和Datagrampacket类,它可以轻松控制用户数据包。

  在描述它们之前,您必须了解相同位置的InetAddress类。可序列化接口,不允许继承。它用于描述和包装Internet IP地址,并通过三种方法返回InetAddress实例:

  getLocalhost():返回包装本地地址的实例。

  getallbyname(字符串主机):返回封装主机地址的InetAddress实例数组。

  getByname(字符串主机):返回一个封装的主机地址的实例。在它们之遥,主机可以是域名或合法的IP地址。

  DataGramSocket类用于创建一个套接字实例,该实例接收并发送UDP。

  datagramsocket():创建一个实例。这是一个相对特殊的用法,通常用于客户端编程。它没有特定监视的端口,只使用一个临时性。

  DataGramSocket(INT端口):创建一个实例并固定监视端口的数据包。

  datagramsocket(int端口,inetaddress localaddr):这是一个非常有用的构建器。当计算机具有更多的IP地址时,它将创建仅从localAddr接收数据包的实例。

  值得注意的是,在创建DataGramSocket类的实例时,如果使用了端口,它将生成异常的SocketException投掷并导致程序非法终止。这种异常应注意捕获。

  接收(Datagrampacket d):接收数据消息到D。接收方法生成“阻止”。

  发送(Datagrampacket d):将消息D发送到目标。

  setSotimeout(int超时):设置超时,该设备为毫秒。

  关闭():关闭datagramsocket。当应用程序退出时,它通常会释放资源并关闭插座,但是由于异常出口而可能无法回收资源。因此,当程序完成后,积极使用此方法来关闭套接字,或在捕获捕获后关闭插座。

  “阻塞”是一个专业术语,它会产生一个内部周期,以暂停该程序,直到触发条件为止。

  DataGrampacket类用于处理包装数据包,该数据包将字节数组,目标地址,目标端口和其他数据打包到数据包中或拆卸数据包中字节阵列。应用程序应注意生成数据包。TCP/IP规定数据包的大小最多包含6,5507。通常,主机会收到548个字节,但是大多数平台都可以支持8192字节大小的数据包。

  datagrampacket(byte [] buf,int Length,inddress addr,int端口):从buf数组中,删除长数据数据以创建数据包对象,目标是ADDR地址,端口。

  datagrampacket(byte [] buf,int Office,int Length,inetAddress地址,int端口):从buf数组中,偏移的官方数据的长数据创建数据包对象,目标是ADDR地址,端口港口。

  datagrampacket(byte [] buf,int Office,int length):将数据包中的数据从Office和长数据放入BUF数组中。

  datagrampacket(byte [] buf,int长度):将长数据放入BUF数组中。

  DataGrampacket类的最重要方法是GetData(),它从实例中获取消息的字节号。

  ★简单的示例描述

  {接收数据的服务器}

  字节[] buf = new Byte [1000];

  DataGramSocket DS =新DataGramSocket(12345);

  //启动监视器端口12345

  datagrampacket ip = new datagrampacket(buf,buf.length);

  //创建一个接收数据报告的示例

  而(true)

  {{{

  DS.Receive(IP);

  //盲目,在接收数据报之后将数据安装到IP中

  system.out.println(new String(buf));

  }

  {客户端发送数据}

  indadress target = inetAddress.getByName(“”);

  //获取目标机器的地址实例

  DataGramSocket DS =新DataGramSocket(9999);

  //从端口9999发送数据报

  字符串hello =“你好,我进来!”;

  //要发送的数据

  byte [] buf = hello.getBytes();

  //将数据转换为字节类型

  op =新的datagrampacket(buf,buf.length,target,12345);

  //将数据打包在BUF缓冲区中

  ds.send(op);

  //发送数据

  ds.close();

  //关闭连接

  1,

  IP数据包包含TCP数据包UDP数据包。IP是第三层(网络层)的协议。TCP和UDP属于第四层(传输层)的协议。

  TCP ---传输控制协议提供连接且可靠的字节流服务。当客户和服务器互相交换数据时,必须在传输数据之前在两方之间建立TCP连接。TCP提供超时,放弃重复数据,删除重复数据,测试数据,流量控制和其他功能,以确保数据可以从一端传递到另一端。

  UDP ---用户数据新闻协议是一个简单的面向数据报纸的传输层协议。UDP不提供可靠性。它只是将应用程序发送到IP层的数据报纸,但不能保证它们可以到达目的地。由于UDP不需要在传输数据报之前建立客户和服务器之间的连接,也没有超时机制,因此传输速度很快。

  2.关键点的区别:

  A.基于连接的连接

  B.系统资源的要求(更多TCP,更少的UDP)

  C.UDP程序结构相对简单

  D.Stream模式和数据报模式

  E.TCP保证数据正确性,UDP可能会丢失,TCP保证数据顺序,UDP不保证

  3,,

  TCP发送的软件包具有序列号。收到包裹后,另一方必须提供反馈。如果它超过一定时间段,它将自动执行超时并重新发行,而无需收到反馈。因此,TCP的最大优势是可靠的。一般网页(HTTP),电子邮件(SMTP),远程连接(telnet),文件(FTP)传输使用TCP

  UDP是一个面向消息的协议。在沟通过程中无需建立连接。数据的传输自然是不可靠的。它通常用于多点通信和真实的时间数据服务,例如语音广播,视频,QQ,TFTP(简单文件传输)和thesnMP(简单的网络管理协议),RTP(真实时机传输协议)RIP(路由信息协议,例如报告股票市场,航空信息),DNS(域名解释)。

  要了解TCP,请务必知道[三个握手,四次崇拜],您将知道何时在互联网上搜索,而SO称为“三个时间握手”是必须在发送数据之前建立的连接。这意味着联系。

  如果使用局域网,则更好。

  如果您需要自己测试调整的大区域网络。如果数据包损失的损失将很大,则损失将相对较大。如果袋子很小,费用将相对较大。

  结论:以上是由UDP大数据包的相关内容编写的主要CTO注释,以回答和总结。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?