2024年3月27日发(作者:)

UDP协议与TCP协议的比较

UDP协议是无面向连接的、不可靠的、无序的、无流量控制的传输层协议,

UDP发送的每个数据报是记录型的数据报,所谓的记录型数据报就是接收进程可以

识别接收到的数据报的记录边界。TCP协议是面向连接的、可靠的、有序的、拥有

流量控制的传输层协议,它是字节流的协议,无记录边界。

1.记录与字节流

UDP协议:发送进程在发送每个数据报的时候并不等待多个数据报集中在一

起以一个较大数据报发送出去,而是立即发送出去,它是记录型的协议。并且接收

进程每次通过read或recv……获得的数据报必定是发送进程所发送的那个数据报

不可能是多个数据报,接收进程可以识别到发送进程所发送的每个数据报的记录边

界。

TCP协议:发送进程在发送每个数据报的时候在内核处理过程中有可能并不

立即发送出去,而是会将多个数据报集中在一起以一个较大的数据报来发送,它是

字节流的协议。而接收进程每次通过read来读取发送进程发送过来的数据报并不

一定是发送进程原先发送数据报,接收进程无法识别每个数据报的记录边界,所以

TCP协议就是字节流的、无记录边界的协议。

例如:QQ聊天所用到的协议就应该是有记录边界的,聊天过程中是以“消

息”为单位,消息可以看成一个记录,所以QQ聊天协议采取UDP协议而不是TCP

协议。

2.有序与无序

UDP协议:发送进程所发送的每个数据报并不按照原先发送的顺序到达接收

进程,有可能早发送的数据报较后到达接收进程。因为数据报在经过中间路径的传

送时会因为各个数据报传送的路径不同或者其它原因而造成这些数据报到达的顺序

不同,UDP协议是无序的传输协议。所以为了使基于UDP协议的应用程序有序,必

须在应用程序中设置序号、确认机制来使其有序。

TCP协议:有序协议,有超时、序号、重传、确认机制。

例如:FTP协议是用于传送文件的协议,为了确保在传送文件内容的时候,

传送的每个数据报协议有序接收,所以FTP协议是基于TCP协议。

那为什么TFTP协议是基于UDP协议?因为为了保证有序,TFTP协议中引入

了确认、序号字段。

这里还有一个问题,FTP协议中的控制连接传送的内容好像都是基于消息形

式,客户端在控制连接上发出一个请求消息,服务器端返回一个请求结果消息,感

觉应该FTP控制连接采取UDP协议,为什么采取TCP协议?因为控制连接上是交互

式的消息传送,客户端在发送一个请求之后,在服务器端的响应消息未到达之前,

客户端是不会发送第二个请求消息,所以不用担心这两个请求消息会叠加在一起。

也就是对于交互式的消息传递也可以采用TCP协议。

3.流量控制

UDP协议:没有流量控制机制,如果发送进程发送数据报塞满了接收进程的

接收缓冲区,就会丢弃数据报。出现这种情况,UDP协议不会通知发送进程减缓数

据的发送速率。

TCP协议:拥有流量控制。

4.客户端通信过程比较

4.1 客户端的连接过程比较