tcp和udp都是传输层的通信协议,但他们的通信机制和应用场景又有所不同,那么到底有哪些区别呢?针对这个问题,做了一下总结:

1、基于连接VS无连接

tcp是面向连接的协议,而udp是无连接协议;意思就是说当一个客户端和一个服务器端通过tcp发送数据进行通信之前,必须先建立连接,他们通过tcp发送数据,tcp建立连接的过程就是tcp握手的过程。tcp是无连接的,所以发送数据之前不需要建立连接;所以udp更适合多播发布消息,即单点向多个点发送数据。

2、可靠性不同

tcp提供交付保证,即使用tcp协议传输给客户端的消息是保证交付给客户端的,tcp协议设置有重传机制,当传送过程中出现丢包现象时,它将重新发送;但是udp就不提供交付保证,一旦发生包丢失,也不会触发重传机制。

3、有序性

tcp保证消息的有效性,即该消息将以从服务器端发出的同样的顺序发送到客户端,尽管这些消息到网络的另一端时可能是无序的,TCP协议将会为你排好序;udp不提供任何有序性或者序列性保证

4、占用系统资源方面

TCP首部开销20字节;UDP的首部开销小,只有8个字节;

5、数据边界

tcp是面向字节流的,在传输数据时,以字节流发送,并没有明显传输信号标志的数据的边界,所以传送数据过程中可能会发生tcp粘包问题。
udp是面向报文的,在UDP中,数据包单独发送的,只有当他们到达时,才会再次集成。包有明确的界限来哪些包已经收到,这意味着在消息发送后,在接收器接口将会有一个读操作,来生成一个完整的消息。

6、传送速度问题

tcp发送数据的速度比较低,udp传送数据的速度比较快。这是因为tcp要建立连接,以保证信息的可靠性和有序性,做的工作比udp多很多,所以udp更适合对速度要求比较敏感的应用。

7、报头差别

udp报头是定长的,只有8自己
tcp报头有选项字段,最低是20字节大小

8、流量控制和拥塞控制

UDP没有拥塞控制流量控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等),
但是tcp有流量控制和拥塞控制。

9、应用场景

适合tcp协议的:当对可靠性,准确性要求较高,对效率要求一般时,首选tcp
适合udp协议的:对传输效率要求相对较高,对准确性要求相对较低时选择udp.

10、基于tcp和udp的协议

基于tcp的协议:HTTP、HTTPS协议、Telnet,FTP以及SMTP协议。
基于udp的协议:如SNMP,TFTP,BOOTP协议

11、TCP、UDP编程模型

如下图所示:
TCP和UDP的区别
TCP通信需要服务器端侦听listen、接收客户端连接请求accept,等待客户端connect建立连接后才能进行数据包的收发(recv/send)工作。而UDP则服务器和客户端的概念不明显,服务器端即接收端需要绑定端口,等待客户端的数据的到来。后续便可以进行数据的收发(recvfrom/sendto)工作。

相关文章: