各UDP库及其和TCP的比较

100 views
Skip to first unread message

清风雨

unread,
Aug 18, 2006, 2:52:02 AM8/18/06
to 高性能网络编程邮件列表
以前公司用过TNL,又有RakNet也是UDP的。但是,不知道各个库在吞吐量、CPU占用、内存占用量/性能/碎片等方面的详细数据。
另,UDP相对TCP响应更快?请给出实际数据(分别采用TCP或UDP处理同一问题的测试对比数据,越多越好,谢谢!)。

SevenCat

unread,
Aug 18, 2006, 2:57:08 AM8/18/06
to 高性能网络编程邮件列表
感觉UDP和TCP用在不同的地方,UDP用在像打枪之类的游戏,TCP可能更多用于像网络RPG之类的。

sunway

unread,
Aug 18, 2006, 4:31:40 AM8/18/06
to 高性能网络编程邮件列表
这个方面早就有人比较过乐,还有数据分析和结论。
UDP适合不考虑丢包点多媒体应用。TCP适合大块数据传输和安全性要求较高点场合。

Oscar

unread,
Aug 18, 2006, 9:36:20 AM8/18/06
to 高性能网络编程邮件列表
sunway兄,那是大学里有关网络的课本上写的!
对于实时性要求比较高的游戏,必须要UDP!
比较一下盛大的疯狂赛车和跑跑卡丁车就知道了!

sunway

unread,
Aug 18, 2006, 10:57:23 AM8/18/06
to 高性能网络编程邮件列表
具体的有测试数据的。我手头上有本TCP/IP高级编程上有测试数据。你可以找来看看。
疯狂赛车是TCP的。没有用UDP。性能也是可以接收的。
跑泡卡丁车我了解不多。

清风雨

unread,
Aug 18, 2006, 12:16:29 PM8/18/06
to 高性能网络编程邮件列表
to
SevenCat:现在好像有种趋势,大家习惯用UDP模拟的TCP,尤其是3D游戏(那就好像是说吞吐量更大),比较不解。
to
sunway:方便贴一下相关数据吗?(我有一同事他的UDP数据经计算为12Mbits/s,而我用TCP的计算为大于60Mbit/s,不过,我的CPU%100了(不知道分散会如何),他说他CPU占有很小。当然,数据都是局域网的,我的还是基于本机。)
to
Oscar:实时性高一定要用UDP,何因?如何证明UDP可以和实际比TCP更响应快(TCP的窗口机制和超时机制都是经过长期考验的比较完善的实现,而UDP就我所知,也就能略微节省包头和“无序暂存”——这个名字是我取的,大致应该能表达意思。而对于超时和窗口机制也同样要实现了)。

sunway

unread,
Aug 18, 2006, 10:02:33 PM8/18/06
to 高性能网络编程邮件列表
现在UDP比较火的原因是现在的MMORPG风险比较大,大家都开始做休闲游戏,休闲游戏一般实时性要求比较高。所以大家都开始用UDP来传输数据提高响应时间。UDP还有个好处就是单机能带更多的用户,在单连接数据量比较小的情况下,TCP单机带个3K用户就顶天了,UDP可能带个1W用户都很正常。
我说的数据是我上面说的那本书(非电子书)上的,你有兴趣可以去书店找那本书。

清风雨

unread,
Aug 18, 2006, 10:47:47 PM8/18/06
to 高性能网络编程邮件列表
有两个问题:
1.
UDP响应时间更快的事实“直接证据”,内部原因(应该不是TCP要保证有序,而UDP可以无序,因此不用维护顺序,没有这个开销吧。就我所知的,现在的UDP基本都是用的它的模拟TCP,也就是保序的。)?
2.
UDP为什么可以比TCP带的多呢(如我前面所说,也就是相对节省包头,而要实现保序、模拟连接,实际能省却下了的包头大小估计也就最多能省4个字节(本来相差也就12个包头字节,而相对整个协议头IP:20,UDP:12,真的是微不足道,还不能补应用层浪费(我所见过的设计,个人认为都能省却大量数据不用传输)——这个可能我理解有误,还请纠正);显然,广播是不能用的,也还是TCP的连接机制。)?

附:
我知道的TNL的超时机制那和TCP真的就不是一个档次的(TNL是定时的轮询,TCP会根据网络状况动态调整);RakNet没有了解,它的机制不了解。也就是说,UDP模拟TCP应用,还不一定做的好,而且,往往比TCP做的差。

找书,我就先不找了。不妨先介绍一下,可否告知大致对比信息和大致结论呢。

sunway

unread,
Aug 18, 2006, 11:12:10 PM8/18/06
to 高性能网络编程邮件列表
你说的这些问题可以去找那3本TCP/IP详解的书看看,看完就都明白了。

疯子阿虹

unread,
Aug 19, 2006, 7:51:57 AM8/19/06
to 高性能网络编程邮件列表
是的,我觉得比较的意义不大了,
就像JAVA和C++,需要什么,或者自己想做什么,
那就去做了。
与其自己在这里疑惑,不如去撞几个跟头。

PS:盛大的疯狂赛车就是TCP的,我当时看后吃了一惊,因为他们甚至没有客户端互联,
不知道现在改了没有:)

跑跑卡丁车好像是泡泡堂那个公司做的。所以应该和泡泡堂一样的,UDP
+ TCP
游戏时UDP互连,平常和服务器连接的时候使用TCP。(我记得是这样:))

kuoxin

unread,
Aug 24, 2006, 9:20:49 PM8/24/06
to 高性能网络编程邮件列表
对于高效率服务器程序udp是不太适合的,他的机制对于并发的实施比较困难,并不适合高交换率的c/s结构,如果想用udp仿真tcp,可以参考tcp/s,在tcp/ip三卷中最后一卷,至于udp
&
tcp的使用,要根据不同的环境来决定,dns就使用udp,但是http服务就使用tcp,这主要是两者在应用和服务要求上不同,udp效率固然不错,但丢包严重尤其是cpu100%时,它也100%丢包。

总之,我个人看来,如果p2p可以使用udp,当创建高效率的c/s,最好使用tcp,如果仍然想要使用udp,将付出非常高昂的成本并且不一定能做好,如果寻找有关证据请参考tcp/ip三卷,
unix 网络编成 1,2卷

caiqi...@gmail.com

unread,
Aug 25, 2006, 7:49:50 AM8/25/06
to 高性能网络编程邮件列表
> 对于高效率服务器程序udp是不太适合的,他的机制对于并发的实施比较困难,并不适合高交换率的c/s结构


这个到底为何,有何依据,为什么UDP不适合做高校服务器,请指点一二。
《TCP/IP详解》我大略看过卷一,但好像没有说过对应问题。

kuoxin

unread,
Aug 25, 2006, 9:20:39 AM8/25/06
to 高性能网络编程邮件列表
参考 unix 网络编程 1卷,
关于开发udp服务器那一部分,有关于这部分介绍,同时我也在我的工程中用过,想要实现udp端口的多线程服务会有问题,因为所有用户要使用同一socket(不过也有变通办法,就是多个端口socket监听),
要使用大量互斥对象,不断上下文切换,效率会很低的,不如使用tcp(udp不过就是没有各种校验和保障而已),对于基于内核级别的io对象来说,tcp效率并不比udp低太多。

caiqi...@gmail.com

unread,
Aug 25, 2006, 9:46:50 AM8/25/06
to 高性能网络编程邮件列表
哦.原来是这样哦。呵呵.回答得还真快啊. 3KS
不过UDP程序可以不用并发的,可以选择使用每路连接保存一个上下文,
然后根据套接口查找上下文,再进行处理啊,
只要你对UDP接收的数据的处理,不耗费太长的时间的话,这样也是可行的.
只不过在处理该路数据的时候不能传递其他用户数据的请求.

而且如果采用TCP多线程,则线程数目多处理也未必越快啊.
这个是我的见解,不知道对不...

Oscar

unread,
Aug 30, 2006, 3:39:52 AM8/30/06
to 高性能网络编程邮件列表
to 清风雨 :
如果要让UDP完全实现TCP的功能,那么干脆用UDP好了,何必自找麻烦呢?
至于UDP的丢包和无序,我们要不要十分在意?另外注意游戏通讯中一般都是小报,所以你测试的时候,
应该要测试小报的"敏感度"!

to 疯子阿虹:
泡泡卡丁车是Tcp和UDP通讯两种方式,但是80%以上的数据都是通过UDP来发送/接收的!

to sunway :
TCP/IP高级编程这个书名很陌生,后来发现是Effective
TCP/IP
Programming这本书!好像以前用emule下过,晚上去硬盘找找!

清风雨

unread,
Sep 4, 2006, 3:06:16 AM9/4/06
to 高性能网络编程邮件列表
你说的"敏感度"指什么?就是响应时间吧(注意不是logic处理时间)。
你的意思是说很多游戏用的就是无序和丢包?如果这样,开发难度岂不是上升?——在现在工程如此庞大的情况下,是不是不太可取。或者要么好处很大,值得付出。这样的话,希望能够告知一下。
为什么80%用UDP呢?肯定是有它独特的好处,还请相告。
Reply all
Reply to author
Forward
0 new messages