通讯协议的选择,TCP or UDP

在网络应用系统的实现中,一般来说,有两类协议可供选择, TCP或者UDP。关于这个话题,网上有大量的文章讨论,我在这里只是做一个比较简单的总结:
a.  从应用程序者角度来看,我们可以看到这样一些区别:
在整个TCP的会话过程中,总是与一个socket句柄相关联。在对于UDP,是没有这样一个固定的socket句柄。TCP的socket句柄,你可以把它作为一个普通的IO句柄一样看待,可以读入数据,或者写入数据,它的特质非常类似于一般的文件句柄。另外:当你在使用TCP是面向stream的,应用层与TCP的交互是与流的方式进行,这也意味着读入或者写入的数据是没有边界的,如果需要划分,那是应用层的责任。与TCP不同的是,UDP是一种面向数据报的传输协议,读入或者写入的数据本身是有边界的。这也就是我们从各种资料上看到的,TCP与UDP最为基本的区别:TCP提供一种面向连接的、可靠的字节流服务,而,UDP是一个简单的面向数据报的运输层协议。也是由于这样的本质性的区别,不同的协议选择,应用层需要不同的实现。如果你的应用需要独立于这样的协议特性,建议你有一个中间层,位于应用层与具体协议调用之间,实现应用层与协议层之间的松耦合关系。另外补充一点的是:由于TCP的连接是端到端的,在服务器的实现中,你会看到,如果使用的是TCP,TCP的连接数是与客户端的数目一致的,也就是说,假设一个服务器需要管理100个客户端,在服务器的实现里,就需要管理100个这样的连接,而如果使用UDP,是不存在这样的scalability问题。
b.  从协议本身方面比较:
毋庸置疑,在性能方面,UDP要高于TCP。但是这种性能的提高,是以牺牲某些服务为代价的,天下没有免费的午餐。众所周知,与UDP相比,TCP提供了很多服务特质,比如说它的可靠机制、流控制以及错误恢复功能等等,这都是UDP所没有的。UDP协议本身是不关心网络状态的转化,相比于TCP,它是一个轻量级的协议。关于TCP或者UDP性能方面的比较,可供参考的资料很多,这里就不作过多的描述。
在我们的应用中,到底选择TCP还是UDP,可能需要考虑的因素有以下几个:
  1. 你是否需要考虑数据传输的稳定性?(比如你的应用是在较差的网络环境中),如果是:选择TCP。
  2. 在你的系统中,是否需要考虑传输数据包的顺序性?如果是:选择TCP。(TCP协议本身保证了这样的顺序性,如果你的应用使用了UDP,而由应用层来保证数据包的顺序性,那将是个噩梦!)
  3. 你的应用是否需要广播,或者组播?如果是:选择UDP。(应用层可以用TCP模拟提供这样的功能,但那不是TCP协议本身提供的的服务。)
  4. 你的应用是否需要很好的传输性能?(如:音频和多媒体应用)如果是:选择UDP。
以上只是我基于自己的经验,给出的对于使用TCP还是UDP的一些基本判定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值