关于UDP协议的理解
之前一直基本都是在关注TCP协议,写的程序都是基于TCP协议的。今天想来谈谈对另一种传输协议-UDP(User Data Protocol)的理解。
相对于TCP,UDP只提供了一种保证,那就是:收到的数据会是完整的。但它不能保证数据是不是真的按照期望能被收到,也不能保证数据是不是只接收一次,更不能保证收到的信息顺序和发出的时候的次序是一致的。
这是UDP的缺点,但也刚刚好造就了它的一个优点。因为它基本不提供什么保证,在打开数据连接和关闭连接方面的时间消耗几乎可以忽略,比较适合用于那些对连接开销很在意的情景,同时也适合简单对安全传输要求不高的数据交互场合。
通常UDP会用在客户端向服务端申请一个比特的信息,如果服务器没有回复请求则会继续申请。用得最为广泛的UDP软件是我们最为熟悉的DNS系统。因为客户端一般只要发送一个很简端的请求,并收到一个很简短的回答,UDP就很适合这种情景。另外,流式音频和视频中要求尽快的传输数据,对于少量的信息包的丢失尚可容忍,而不能容忍由于严格处理丢包而带来的开销,所以这种情况用UDP会更加合适。
下面是总结一下TCP和UDP的适用场合,作为一个参考。
TCP协议更适用于下面的场合,如果:
(1)需要一个可靠地数据传输,以保证数据完整无缺的到达目的地。
(2)协议中需要多个请求和服务器的答复。
(3)需要发送比较多的数据。
(4)能够容忍由于建立或关闭连接带来的性能开销。
UDP协议更适用于下面的场合,如果:
(1)不大关心信息包是否被收到或者不大在乎信息包的被接收的次序。
(2)协议中的内容只包括简短的基本请求和回答。
(3)希望尽快建立网络链接。
(4)传输的数据量少。UDP的信息包的大小限制为64KB以内。