`
weitao1026
  • 浏览: 1047576 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UDP丢包及无序的现象

UDP 
阅读更多
发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象.
纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了.

有没有成熟的解决方案来解决这个问题.
我用过sleep(1),暂时解决这个问题,但是这不是根本解决办法,如果数据量大而多,网络情况不太好的话,还是有可能丢失.



你试着用阻塞模式吧...
select...我开始的时候好像也遇到过..不过改为阻塞模式后就没这个问题了...



采用回包机制,每个发包必须收到回包后再发下一个



UDP丢包是正常现象,因为它是不安全的。



丢包的原因我想并不是“服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了”,而是服务器端的socket接收缓存满了(udp没有流量控制,因此发送速度比接收速度快,很容易出现这种情况),然后系统就会将后来收到的包丢弃。你可以尝试用setsockopt()将接收缓存(SO_RCVBUF)加大看看能不能解决问题。



服务端采用多线程pthread接包处理



UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序。
要实现文件的可靠传输,就必须在上层对数据丢包和乱序作特殊处理,必须要有要有丢包重发机制和超时机制。
常见的可靠传输算法有模拟TCP协议,重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议等等。
如果只是小规模程序,也可以自己实现丢包处理,原理基本上就是给文件分块,每个数据包的头部添加一个唯一标识序号的ID值,当接收的包头部ID不是期望中的ID号,则判定丢包,将丢包ID发回服务端,服务器端接到丢包响应则重发丢失的数据包。
模拟TCP协议也相对简单,3次握手的思想对丢包处理很有帮助。



udp是不安全的,如果不加任何控制,不仅会丢失包,还可能收到包的顺序和发送包的顺序不一样。这个必须在自己程序中加以控制才行。
收到包后,要返回一个应答,如果发送端在一定时间内没有收到应答,则要重发。

UDP本来存在丢包现象,现在的解决方案暂时考虑双方增加握手.
这样做起来,就是UDP协议里面加上了TCP的实现方法.
程序中采用的是pthread处理,丢包率时大时小,不稳定可靠



我感觉原因可能有两个,一个是客户端发送过快,网络状况不好或者超过服务器接收速度,就会丢包。
第二个原因是服务器收到包后,还要进行一些处理,而这段时间客户端发送的包没有去收,造成丢包。

解决方法,一个是客户端降低发送速度,可以等待回包,或者加一些延迟。
二是,服务器部分单独开一个线程,去接收UDP数据,存放在一个缓冲区中,又另外的线程去处理收到的数据,尽量减少因为处理数据延时造成的丢包。



有两种方法解决楼主的问题:
方法一:重新设计一下协议,增加接收确认超时重发。(推荐)
方法二:在接收方,将通信和处理分开,增加个应用缓冲区;如果有需要增加接收socket的系统缓冲区。(本方法不能从根本解决问题,只能改善)



网络丢包,是再正常不过的了。
既然用UDP,就要接受丢包的现实,否则请用TCP。
如果必须使用UDP,而且丢包又是不能接受的,只好自己实现确认和重传,说白了,就是自己实现TCP(当然是部分和有限的简单实现)。



UDP是而向无连接的,用户在实施UDP编程时,必须制定上层的协议,包括流控制,简单的超时和重传机制,如果不要求是实时数据,我想TCP可能会更适合你!
分享到:
评论

相关推荐

    udp是不可靠的会丢包,如何查看udp丢包数、丢包率

    通过检查这些设备的日志,可能也能找到关于UDP丢包的线索。 6. **性能监控工具**: 有些系统和第三方工具(如nload、iftop或iptraf等)提供了实时的网络性能监控,包括UDP的流量和丢包情况。这些工具可以帮助你...

    UDP 丢包率测试工具

    丢包率测试是评估网络性能的重要指标,尤其对于实时性要求高的应用如在线游戏、音视频流媒体等,了解UDP丢包率有助于优化网络通信。 本工具专注于UDP丢包率的测试,它的工作原理是客户端通过UDP Socket发送特定大小...

    matlabUDP丢包率及成功概率

    matlabUDP丢包率及成功概率,仿真模拟在matlab环境下传输成功的概率

    udp丢包率统计

    UDP丢包率的统计方法通常包括以下步骤: 1. 数据包发送:首先,发送端通过UDP协议发送一定数量的数据包到目标地址。这些数据包通常包含序列号,以便接收端可以跟踪并识别它们。 2. 数据包接收:接收端捕获接收到的...

    UDP丢包分析工具

    为了分析和解决这一问题,"UDP丢包分析工具"应运而生。 该工具专门设计用于测试UDP组播流量,它能够帮助网络管理员和开发者检测在UDP组播过程中可能出现的丢包情况。UDP组播是一种高效的通信方式,通过将数据发送到...

    基于UDP SOCKET 统计丢包率

    在"基于UDP SOCKET 统计丢包率"的项目中,我们采用C/S(Client/Server)模型进行通信。客户端(Client)发送数据报到服务器(Server),而服务器则回射这些数据报给客户端。通过比较发送的数据报数量和接收到的数据...

    基于UDP丢包统计程序设计.zip

    本项目在发送 UDP 数据包时做一个循环,连续发送 100 个数据包;在接收端统计丢失的数据包。 实验时,请运行 Wireshark 软件,对通信时的数据包进行跟踪分析。 详细介绍参考:...

    UDP丢包检测工具

    这是一款测试网络的丢包的软件,该软件具有收发软件测试包的功能。

    wireshark分析RTP丢包率

    Wireshark 分析 RTP 丢包率 Wireshark 是一个功能强大且广泛使用的网络协议分析工具,能够对网络数据包进行捕获、分析和显示。今天,我们将使用 Wireshark 分析 RTP 丢包率,通过详细的步骤来帮助读者快速了解 ...

    linux 应用程序udp 数据丢包解析

    Linux 应用程序 UDP 数据丢包解析 在 Linux 中,一个以太网包的收包流程路线是:网卡驱动收到包,触发软中断,协议栈处理,然后将包放到对应的 Socket 缓冲区,最后唤醒等待进程从内核 Socket 缓冲区中拿包。然而,...

    UDP.rar_loss algorithm_tcp丢包_udp loss algorithm_udp 丢包_udp模拟tcp

    “UDPSERVER”和“UDPClient”则可能是用于测试和演示UDP丢包模拟机制的服务器和客户端程序代码。通过分析和运行这些代码,我们可以更深入地理解如何在实际操作中实现这个过程。 实现过程中可能涉及的技术包括: 1....

    udp丢包率.zip

    **UDP丢包的原因:** 1. **网络拥塞**:当网络中的数据包数量超过网络的承载能力时,路由器或其他中间节点可能会丢弃部分数据包以缓解拥堵。 2. **错误处理**:如果接收端无法处理到来的数据包,比如缓冲区已满,...

    基于ns2比较tcp和udp的丢包行为

    在计算机网络中,丢包是指数据包在传输过程中由于各种原因而未能到达目的地的现象。丢包率是衡量网络性能的重要指标之一。NS2 是一个流行的网络仿真平台,能够模拟各种网络场景,帮助我们更好地理解网络协议的行为。...

    排查udp丢包(查看丢包的命令、查找丢包的原因、丢包丢在了哪)

    解决udp丢包(查看丢包的命令、查找丢包的原因、丢包丢在了哪) 大家都知道udp是不可靠的,会丢包。那么你就得知道包丢在了哪

    你真的会用socket UDP吗? UDP丢包得厉害,怎么解决? 我先给你讲UDP的理论,再告诉你解决办法,省得直接告诉你答案反而说太短

    你真的会用socket UDP吗? UDP丢包得厉害,怎么解决? 我先给你讲UDP的理论,再告诉你解决办法,省得直接告诉你答案反而说太短

    UDP测试丢包率 测试接受的包的个数 用两个线程实现

    UDP测丢包率 MFC实现 给定定时器,发送特定的包 同时给定接收时间,测试接受的包的个数 程序中有两个线程: 线程1负责套接字的加载、套接字的初始化、绑定、接收进程的创建、发送数据(聊天数据和测试数据)、统计...

    wireless_udp.rar_throughput_udp丢包_无线网络UDP_端到端时延_网络时延

    标题“wireless_udp.rar_throughput_udp丢包_无线网络UDP_端到端时延_网络时延”涉及了几个关键的性能指标,包括无线网络中的UDP吞吐量、丢包率、端到端时延以及网络时延。这些是评估无线网络质量与效率的重要参数。...

    UDP套接字服务器客户端及丢包率测试

    源码及实验报告 (1)UDP循环服务器 (2)UDP并发服务器 (3)UDP丢包率测试

    基于UDP的GBN协议 模拟丢包 java

    UDP滑动窗口协议是建立在UDP上的应用层协议之上的。传输层使用的仍是UDP,但在应用层使用滑动窗口技术,并通过模拟TCP的一些机制以保证UDP的低协议处理开销和获得高通信可靠性。 在开始传输前,不进行tcp的3次握手。 ...

    Ouster 激光雷达点云数据丢包排查指导文档

    Ouster激光雷达(LiDAR)数据丢包排查 数据丢包是网络设备数据通讯过程中,常常会遇到的一类问题。 这类问题对设备的正常使用有非常大的负面影响,但问题的症结有往往难以快速查明。或者说,有时问题被解决了,但也...

Global site tag (gtag.js) - Google Analytics