实测发现RTP都不如TCP快?

new_new_man 2013-10-12 09:18:05
我最近试验JRTPLIB库的RTP实时流传输,写了一个发送程序和一个接收程序,程序都很简单,发送端就是用RTPSession发送一个154000字节数据,一个RTP包长1000字节,总共发送154个包;接收端就是一个死循环,用RTPSession不停的接收包,并统计收到的包数目。测试结果是:如果发送端发送的过程中不加延时的话,丢包很厉害,至少要每发送10个包后停顿1秒钟再继续发送,这样接收端就能收到全部的数据,否则总有丢包。然后我用TCP做实验,发送端直接发送154000字节数据,而接收端就直接接收数据,结果接收端完全接收到所有数据,而且速度要比RTP要快5倍左右。通信是本机通信,即用的IP是127.0.0.1。我不知道传说的RTP多么优秀是否真的是吹嘘浮夸,但是我实测后客观事实就是这样的结果,还请高手指点下,谢谢!
...全文
2167 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
韦翔罂 2014-10-16
  • 打赏
  • 举报
回复
优先使用TCP
gezi1227 2014-05-08
  • 打赏
  • 举报
回复
实时音视频传输有几个特点:数据量大,实时性要求高,但是可容忍适当丢包率,即一段语音中丢一两个包不会产生明显失真,或者部分失真也并不影响使用。 LZ的测试可能存在几个问题: 1、数据150K是否合适:低分辨率显示器640*480,每秒30帧,传输的数据量是640*480*32*30,即每秒需要传输27M左右的数据。 2、网络环境过于单纯:需考虑高负载网络导致的延时抖动、网络丢包问题。 实时音视频传输使用RTP意义在于: 1、实时音视频传输需要高效的数据传输效率,声卡编码压缩之后的大数据不断的产生需要及时的传输出去,TCP有效载荷率不高; 2、TCP可靠性的保证一点是流量控制,直接导致延时加大,抖动频发,实时性下降; 3、TCP丢包重传以尽力保证每一个包不丢失对于实时音视频通信并不十分必要,且重传机制直接降低实时性; 此外,RTP虽然名义上与TCP、UDP一样为传输层协议,但是使用上RTP可有开发人员进一步的实现控制,已保证其通信的稳定性。
UDX协议 2013-10-17
  • 打赏
  • 举报
回复
to楼上: 在我的机器上,就可以跑250MB/秒,我觉得主要原因在于连接处理逻辑上是单线程,是被CPU主频限制了。 并不是系统API的问题。你有你的意见,我保持自己的观点,这就是为什么,不同性能的机器,速度不一样的根本原因。 可靠传输并没有你想象的简单,你只是做到了可靠,并不高效(我主观认为,你可以认为我是错的),可靠协议最大的用处,并不只是在内网这样的好的条件的网络,而是在公网条件,无线WIFI,3G条件下,发挥更好的吞吐性,在实时应用,比如监控中的IPC,手持设备上,保持协议的一致性,发挥更好的实时性,吞吐量和稳定性相对传统的协议(TCP,RTSP/RTP)之类。 可靠的难点不在可靠,而在于他要充份利用现有代宽,并能实时的反馈发送方的信息,让APP做出相应对策。 如果你认为我的观点错误,完全可以拿你自己写的协议和我的协议对比,随时欢迎你比较,我们一起讨论原因及现象。
真相重于对错 2013-10-16
  • 打赏
  • 举报
回复
tcp和udp性能差异的原因知道吗?
真相重于对错 2013-10-16
  • 打赏
  • 举报
回复
引用 13 楼 wwwllg 的回复:
[quote=引用 12 楼 hdt 的回复:] [quote=引用 11 楼 wwwllg 的回复:] [quote=引用 10 楼 hdt 的回复:] rtp介绍 如果传输大数据,tcp效率优于udp
这个不见得,在传输效率上,大多数的时候,UDP是优于TCP的,我这有测试程序,有兴趣的可以和TCP对比测试。http://www.goodudx.com/web/index.php/site/download/6[/quote] 建议你看看《tcp/ip高效编程》[/quote] 我测试过不下10000次,UDX和TCP的对比了。 [/quote] 设置tcp的缓冲去了吗?
danscort2000 2013-10-16
  • 打赏
  • 举报
回复
引用 21 楼 wwwllg 的回复:
可靠UDP流 250MB/秒。
还变的真快,2012年发贴单路达不到200MB,眼睛一眨就达到了 wwwllg #19 得分:20 回复于: 2012-12-13 16:38:34 多条线程发送,对于本机,确实可以达到并超过200M,这个是指的总的接收流量。比如,一个服务,多个客户发送,多个客户流量相加,可以达到200多。 目前来说,不管是IOCP,还是SENDTO,我还没有见过200M/S的,单个可靠连接,注意这个前提。 在我的I7 CPU, 3.5GHZ的环境下,已经相当牛B了吧。 VTCP可以传到180MB/S,UDX可以传到156MB/秒,VTCP是使用的IOCP,UDX使用的是一般的Sendto.单条连接。 所以,我认为,现在主流的系统,目前UDP不会超过250MB/S。
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
引用 12 楼 hdt 的回复:
[quote=引用 11 楼 wwwllg 的回复:] [quote=引用 10 楼 hdt 的回复:] rtp介绍 如果传输大数据,tcp效率优于udp
这个不见得,在传输效率上,大多数的时候,UDP是优于TCP的,我这有测试程序,有兴趣的可以和TCP对比测试。http://www.goodudx.com/web/index.php/site/download/6[/quote] 建议你看看《tcp/ip高效编程》[/quote] 我测试过不下10000次,UDX和TCP的对比了。
danscort2000 2013-10-16
  • 打赏
  • 举报
回复
我那个测试是在2012年做的,硬件条件不如现在, 而且测试程序是完全按照Internet 应用环境设置的缓冲10个MTU[包], 本地传输对缓冲大小是很敏感的,我设置成64K(约 60个mtu) 也可以加速,或者把块传输改成流,同样可以加速,但是这种缓冲大小在Internet上没有意义的, 1对1的udp可靠传输实现多的是,我只用来试验新技术,做测试,不想投入太多,没什么意义 只是看到楼主这个主题,进来谈点看法.
真相重于对错 2013-10-16
  • 打赏
  • 举报
回复
引用 11 楼 wwwllg 的回复:
[quote=引用 10 楼 hdt 的回复:] rtp介绍 如果传输大数据,tcp效率优于udp
这个不见得,在传输效率上,大多数的时候,UDP是优于TCP的,我这有测试程序,有兴趣的可以和TCP对比测试。http://www.goodudx.com/web/index.php/site/download/6[/quote] 建议你看看《tcp/ip高效编程》
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
引用 10 楼 hdt 的回复:
rtp介绍 如果传输大数据,tcp效率优于udp
这个不见得,在传输效率上,大多数的时候,UDP是优于TCP的,我这有测试程序,有兴趣的可以和TCP对比测试。http://www.goodudx.com/web/index.php/site/download/6
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
可靠UDP流 250MB/秒。
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
在我本机I7cpu的测试下,本机可以达到收发250MB左右每秒
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
引用 17 楼 danscort2000 的回复:
udp 可靠传输,1对1 ,我使用了特殊的优化 [ETudp , 提供库,使用示范代码 , 以及现成的测试程序 UdpMark.exe],在i7 ddr3 1600 win8 64bit环境下,本机器极限传输能达到的数字也就是 205-215 MB/s , 也就是相当于 最高输出 2Gbps+ 关于这个性能的限制造成的原因,我在 udp可靠传输那些事 一文里都已经给出了 udp可靠传输,在目前通过的系统调用接口以及实现下,无法超过TCP的 jrt lib 不是这么用的,它的实现只是一个框架,投入商用,你需要替换里面的传输协议为自己的协议,有很多人已经做了这方面的工作,可以到海外网站去搜一下已经替换好的
我在你的博客中下载了你提供的测试程序,好象编译有些问题,看上去是版本已经不匹配,加我的Q,24508609,在线聊下。
new_new_man 2013-10-16
  • 打赏
  • 举报
回复
引用 17 楼 danscort2000 的回复:
udp 可靠传输,1对1 ,我使用了特殊的优化 [ETudp , 提供库,使用示范代码 , 以及现成的测试程序 UdpMark.exe],在i7 ddr3 1600 win8 64bit环境下,本机器极限传输能达到的数字也就是 205-215 MB/s , 也就是相当于 最高输出 2Gbps+ 关于这个性能的限制造成的原因,我在 udp可靠传输那些事 一文里都已经给出了 udp可靠传输,在目前通过的系统调用接口以及实现下,无法超过TCP的 jrt lib 不是这么用的,它的实现只是一个框架,投入商用,你需要替换里面的传输协议为自己的协议,有很多人已经做了这方面的工作,可以到海外网站去搜一下已经替换好的
好,学习!
danscort2000 2013-10-16
  • 打赏
  • 举报
回复
udp 可靠传输,1对1 ,我使用了特殊的优化 [ETudp , 提供库,使用示范代码 , 以及现成的测试程序 UdpMark.exe],在i7 ddr3 1600 win8 64bit环境下,本机器极限传输能达到的数字也就是 205-215 MB/s , 也就是相当于 最高输出 2Gbps+ 关于这个性能的限制造成的原因,我在 udp可靠传输那些事 一文里都已经给出了 udp可靠传输,在目前通过的系统调用接口以及实现下,无法超过TCP的 jrt lib 不是这么用的,它的实现只是一个框架,投入商用,你需要替换里面的传输协议为自己的协议,有很多人已经做了这方面的工作,可以到海外网站去搜一下已经替换好的
UDX协议 2013-10-16
  • 打赏
  • 举报
回复
你加我Q,我们测试下。
真相重于对错 2013-10-15
  • 打赏
  • 举报
回复
rtp介绍 如果传输大数据,tcp效率优于udp
真相重于对错 2013-10-15
  • 打赏
  • 举报
回复
rtp 是 在udp/tcp之上的
new_new_man 2013-10-15
  • 打赏
  • 举报
回复
引用 7 楼 wwwllg 的回复:
RTP如果不进行速度控制,很容易丢包,在公网条件,无线程更是丢包严重,不适合视频传输,但是对于固定流量的语音数据来说,确是最好的,原因是丢包产生的音噪可以通过算法进行,去噪,去回音。 而同样的道理,在传输视频的时候,RTP在公网条件,及3G条件是不适合的。 可以考虑UDP的可靠传输协议,UDX协议,UDT协议。
好,学习!
UDX协议 2013-10-15
  • 打赏
  • 举报
回复
RTP如果不进行速度控制,很容易丢包,在公网条件,无线程更是丢包严重,不适合视频传输,但是对于固定流量的语音数据来说,确是最好的,原因是丢包产生的音噪可以通过算法进行,去噪,去回音。 而同样的道理,在传输视频的时候,RTP在公网条件,及3G条件是不适合的。 可以考虑UDP的可靠传输协议,UDX协议,UDT协议。
加载更多回复(6)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧