社区
网络编程
帖子详情
UDP 并发丢包问题
victor_cui
2008-09-17 01:43:38
有如下应用,客户端发送数据到服务器,然后服务器负责转发该数据给订阅该发送客户端信息的客户端,测试发现当接受客户端多余200个以后,随着订阅者的增加,丢包率也随之增加,发送端发送的数据量大约是60个1K左右的包每秒,测试环境为千兆网,server CPU利用率低于50%,带宽利用率这个时候也很低,如果使用TCP协议,数据都可以及时被转发,所以原因应该是UDP并发的问题,如何解决?
...全文
1185
25
打赏
收藏
UDP 并发丢包问题
有如下应用,客户端发送数据到服务器,然后服务器负责转发该数据给订阅该发送客户端信息的客户端,测试发现当接受客户端多余200个以后,随着订阅者的增加,丢包率也随之增加,发送端发送的数据量大约是60个1K左右的包每秒,测试环境为千兆网,server CPU利用率低于50%,带宽利用率这个时候也很低,如果使用TCP协议,数据都可以及时被转发,所以原因应该是UDP并发的问题,如何解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wuleeemail
2008-10-03
打赏
举报
回复
组播是不错,但是组播应该是不能跨网段的,好像你那600多个接收端不会都在一个网段里吧?闲聊!
AthlonxpX86
2008-10-01
打赏
举报
回复
如果UDP的话应该用广播模式,丢包是因为UDP没有3次握手,请求传输返回请求,UDP要做到无误就的自己做握手
贵子潘
2008-09-29
打赏
举报
回复
UDP一定要有拥塞控制才能最大限量的不丢包
而想每个包都送到,则要有重传机制 (排除网线被拔,没有网卡等情况...)
这两样东西,tcp都有,所以出现了楼主所说的描述
wxq4100798
2008-09-27
打赏
举报
回复
[Quote=引用 20 楼 dengfeng_liu 的回复:]
这样设计上就是有问题的啊。
订阅终端太多,用点对点方式通信会造成效率很低。
为什么不考虑用组播的方式通信?
[/Quote]
组播正解
netelife
2008-09-27
打赏
举报
回复
才几百个终端,算什么多啊,设计问题,如果怕丢包,就不应该用UDP,如果用了UDP,丢包的事情应该有程序自己来解决,因为这个协议本身就没有考虑丢包的问题。
dengfeng_liu
2008-09-26
打赏
举报
回复
这样设计上就是有问题的啊。
订阅终端太多,用点对点方式通信会造成效率很低。
为什么不考虑用组播的方式通信?
Wenxy1
2008-09-25
打赏
举报
回复
晕,怎么重复回答这么多???
Wenxy1
2008-09-25
打赏
举报
回复
[Quote=引用 14 楼 victor_cui 的回复:]
是的,肯定是我们程序的转发机制的原因,测试发现我们600个接收端转发一轮需要6ms左右,而接收到发送端的数据间隔15ms左右,也就是说系统有9ms左右的空闲,可以肯定应该是转发过程中造成的问题,而不是接收端的问题,因为存在600个接收端,接收这点数据绰绰有余。所以我想如果有方法把转发每个包的时间平均分布在15ms的时间范围内是最理想均衡的结果,我想这也是解决这个问题的一个办法
[/Quote]
楼主,你没有找到出现这个问题的主要原因!!!。
Wenxy1
2008-09-25
打赏
举报
回复
[Quote=引用 14 楼 victor_cui 的回复:]
是的,肯定是我们程序的转发机制的原因,测试发现我们600个接收端转发一轮需要6ms左右,而接收到发送端的数据间隔15ms左右,也就是说系统有9ms左右的空闲,可以肯定应该是转发过程中造成的问题,而不是接收端的问题,因为存在600个接收端,接收这点数据绰绰有余。所以我想如果有方法把转发每个包的时间平均分布在15ms的时间范围内是最理想均衡的结果,我想这也是解决这个问题的一个办法
[/Quote]
楼主,你没有找到出现这个问题的主要原因!!!。
Wenxy1
2008-09-25
打赏
举报
回复
[Quote=引用 14 楼 victor_cui 的回复:]
是的,肯定是我们程序的转发机制的原因,测试发现我们600个接收端转发一轮需要6ms左右,而接收到发送端的数据间隔15ms左右,也就是说系统有9ms左右的空闲,可以肯定应该是转发过程中造成的问题,而不是接收端的问题,因为存在600个接收端,接收这点数据绰绰有余。所以我想如果有方法把转发每个包的时间平均分布在15ms的时间范围内是最理想均衡的结果,我想这也是解决这个问题的一个办法
[/Quote]
楼主,你没有找到出现这个问题的主要原因!!!。
niyubao2233
2008-09-25
打赏
举报
回复
用什么语言实现的?
UDX协议
2008-09-24
打赏
举报
回复
一般不会是发送慢的原因,而是需要拥赛控制。
有机会可以聊一下。msn: ruby.li#wswtek.com
Wenxy1
2008-09-24
打赏
举报
回复
我修改了一下我的回答,使它更严谨.
关键在于UDP协议不可靠且不面向连接的传输层协议,TCP协议是面向连接的可靠的传输层协议.
Wenxy1
2008-09-24
打赏
举报
回复
所以原因应该是UDP并发的问题,如何解决?
-------------------------------------
1. UDP协议是不可靠的,TCP是可靠的当然能保证到达嘛。
2. UDP丢包的原因有多种,我列出几种:
1) 交换机的缓存用完(也就是交换机所在的网络非常忙)。
2)路由器存储转发时,由于某些原因(比如IP分组的头部设置了不分片标志,而IP的分组的长度超过了它的MTU),丢弃一些UDP包.
3) 接收UDP包的机器的UDP socket缓存已满.
其它情况...
所以,你虽然在千兆网,但还是存在忙的情况(人家高速公路还堵车呢!).
3. 解决方法,应用程序设置一个可靠传输的机制,可以参考一下TCP的实现.:)
kikyou_zk
2008-09-24
打赏
举报
回复
UDP是没有流量控制的, 发送端总是"尽可能快"地发送, 而接收端总是"尽可能快"地接收, 接收端如果因为处理逻辑复杂或者其它原因导致接收过慢, 必然有丢包问题, 其实不是中间因为传输问题丢掉了, 而是接收端主机因为接收缓冲区满而直接丢掉了.
解决办法就是每包一个ACK, 不然还能怎么办呢?
UDX协议
2008-09-24
打赏
举报
回复
应该是代码问题 。
victor_cui
2008-09-24
打赏
举报
回复
是的,肯定是我们程序的转发机制的原因,测试发现我们600个接收端转发一轮需要6ms左右,而接收到发送端的数据间隔15ms左右,也就是说系统有9ms左右的空闲,可以肯定应该是转发过程中造成的问题,而不是接收端的问题,因为存在600个接收端,接收这点数据绰绰有余。所以我想如果有方法把转发每个包的时间平均分布在15ms的时间范围内是最理想均衡的结果,我想这也是解决这个问题的一个办法
lew0002
2008-09-23
打赏
举报
回复
linux随便一个api都是微秒级的精度啊,比如select
victor_cui
2008-09-23
打赏
举报
回复
但是linux系统没有那么高的时间分辨率啊,最小也就10ms而已,除非有在1ms级的精度才可以做适当负载分配啊,怎么办啊,郁闷之极
lew0002
2008-09-19
打赏
举报
回复
嘿嘿,发得太快了,传输路径上的只要任何一点缓存不了那么多包,就会丢包
按时间间隔更均匀地分布网络荷载
加载更多回复(5)
UDP
套接字服务器客户端及
丢包
率测试
源码及实验报告 (1)
UDP
循环服务器 (2)
UDP
并发
服务器 (3)
UDP
丢包
率测试
UDP
test.rar
vs2010工程, 用于测试服务器网络高
并发
时的处理性能,例如 服务端:同时开启300个线程,监听端口 客户端:开启300个线程,发送数据包 。
UDP
模式: 统计服务端收包数,客户端的
丢包
率、延时、抖动 TCP模式: 统计服务端收包数,客户端RRT延时
UDP
丢包
问题
详解
UDP
丢包
问题
详解
UDP
包过大,缓存太小,不能及时接收数据。
UDP
发包速率过快,突发大数据流量超过了缓冲区上限recvfrom()接收到数据之后处理速度太慢最复杂的方式
UDP
包过大,缓存太小,不能及时接收数据。 解决方法:增加系统发送或接收缓冲区大小 int nBuf=32*1024;//设置为32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nBuf,sizeof(int)); setsockopt(s,SOL_SOCKET,SO_SND
python
udp
丢包
_
UDP
两种
丢包
处理策略:
丢包
重传(ARQ) 和 前向纠错(FEC)
1. 两种
丢包
处理策略为了保证实时性,通常适应
UDP
协议来针对RTP数据进行传输,而
UDP
无法保证数据传输的质量,所以在网络环境不好的时候,
丢包
是经常出现的
问题
,有什么策略来改善这个
问题
吗?常用的方法有:
丢包
重传(ARQ)和前向纠错(FEC)。通常抗
丢包
有两种方式,FEC和ARQ。FEC是前向冗余,举个例子,发送数据A和B,增加发送一个数据C等于A和B的异或。接收方接到这3个包的任意2个包,异或...
UDP
服务端
丢包
-发送频率过高导致
丢包
接收方丢
UDP
包,发送频率过高导致
丢包
,主要会造成接收方自身
丢包
。
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章