什么时候选择TCP?什么时候选择UDP?

1)    如果数据要求完整,不允许任何错误发生

    应用层协议开放模式 [例如http ftp],建议选择tcp,几乎是唯一选择.

    应用曾协议封闭模式 [例如游戏]

2)    大量连接

a)    长连接 

少量数据传输:优先考虑可靠udp传输 , tcp建议在20000连接以下使用.

     大流量数据传输:只有在10000连接以下可以考虑tcp , 其他情况优先使用udp可靠传输  

b)    短连接

少量数据传输:建议使用udp标准模式, 加入序列号, 如果连接上限不超2万,可以考虑tcp

大流量数据传输:10000连接以下考虑tcp ,其他情况使用udp可靠传输

     在遇到海量连接的情况下,建议优先考虑udp可靠传输,使用tcp,由于tcp/ip栈的链表实现的影响,连接越多,性能下降越快,而udp可以实现队列,是一条平滑的直线,几乎没有性能影响。

3)    有限连接 [通常小于2000 , 一般每服务器为几百到1000左右]

a)    长连接 :除非有数据的实时性要求,优先考虑tcp,否则使用udp可靠传输。     

b)    短连接:优先考虑tcp。

在有限连接的情况下,使用tcp可以减少代码的复杂性,增加广泛的移植性,并且不需要考虑性能问题.

4)    允许丢包,甚至可以乱序

对实时性要求比较高,例如voip , 那么udp是最优选择。

部分数据允许丢包,部分数据要求完整,部分有实时性要求,通常这样的需求是出现在游戏里, 这时候,基于udp协议改造的udp多路可靠传输[同时支持不可靠模式],基本是唯一能满足的,当然也可以使用tcp来传输要求完整的数据,但是通常不建议,因为同时使用tcp和udp传输数据,会导致代码臃肿复杂度增加,udp可靠传输完全可以替代tcp。

部分数据优先传输,部分可丢弃数据在规定时效内传输, 这通常是实时视频流, 在有限连接模式下,可以考虑tcp+udp, 但是通常, 可靠udp传输是最好的选择。