###及时性要求高,数据又不能丢包,如何构建?###

如果需要通过internet构建一个网络服务器,服务器与n多个客客端建立链接,并且要求实时进行数据交互,又不能存在丢失数据包,请问各位大侠有什么好建议?或相关思路?
[82 byte] By [szch-灏然] at [2008-1-6]
# 1
用UDP,算法保证完整性,期待高手!
party9ly-las at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 2
UDT有无高手用过,并发量大时,及时及完整性的效果如何?
szch-灏然 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 3
UDT就是基于UDP的可靠数据传输方案。它可以发送可靠数据块,也可以像tcp那样发送可靠数据流。另外,它还对NAT打孔有一定的支持。
szch-灏然 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 4
只是网上有些简单的介绍,还望高手指教.
szch-灏然 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 5
请问为什么TCP不能满足要求?
herryhuang-Herry at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 6
TCP因為實現的算法問題,在包比較小且頻的時候,他會等待幾個包組成一個較大的包一起發送,這樣就可能不能滿足樓主要求的實時交互了.UDT是基於UDP的可靠通訊協議,网上有完整的文檔可以借鑒,不過實現也是比較複雜的.如果要求不高干脆自已實現一個簡單的好了.保證包的完整和順序就行.
# 7
实现过,用来在广域网传送大量的文件都没有问题。
taosiming-浪苍云 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 8
To leon7909 && 楼主:

首先要搞清楚,这里的“实时性”具体含义是什么。应该给出具体组网环境下的时延和响应时间的数值,否则讨论“实时性”就无从谈起,比方说,对于http的应用来说,我认为tcp就很实时了。

对于任何一段路经来说,要想不丢包,就必须在接受端返回确认,这就要求两端要实现一个类似TCP的窗口机制。

因此,实时性与不丢包肯定是冲突的,因为通讯实时性实际上受制于窗口大小。(当然也受其他因素的影响,比如链路时延,但是这种因素你用UDP也存在,因此无法消除)而窗口如果太大,又导致发生差错时重传代价增加,如果采用可填补的窗口(只需要重传发生差错的报文),则可能需要大量的确认报文,造成网络负荷增加。

因此,应该给需求下一个更加精确的定义,我们就以TCP为例,在你的应用中,传输时延有多大?如果使用TCP,时延是多少,你的期望值是多少,你能接受的丢包代价有多大?

这样分析数值之后,也许你就会发现,TCP离你的期望并不是特别远,也许只要更改一些参数,比如窗口大小,就可以满足你的要求了。毕竟,TCP的实现非常完整,从稳定性和可以移植性上来说要好的多。
herryhuang-Herry at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 9
实时性与不丢包不见得就一定是冲突的。

我们实现过1对1的UDP可靠连接,延迟在任何情况下都可以达到线路上的最小值。当然也是有一定的带宽代价,但带宽占用是稳定的,而且和TCP一样,传输效率不依赖于丢包率,也不会因为网络变差造成带宽占用进一步上升(这个是很多UDP确认算法都有的问题)。
ensoniq at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...
# 10
感谢各位的热心参与
szch-灏然 at 2007-10-19 > top of Msdn China Tech,专题开发,技术,项目,网络通信...