TCP和UDP的区别(4大区别图解)

TCP和UDP的区别(4大区别图解)-mikechen

TCP和UDP是两种不同的传输层协议,用于在计算机网络中传输数据,下面详解4大TCP和UDP的区别@mikechen

连接性的区别

TCP

TCP是面向连接的协议,它在数据传输之前建立了一个双向连接,这个连接包括握手过程,确保了数据的可靠传输。

TCP 建立连接需要经过三次握手,同时 TCP 断开连接需要经过四次挥手,这也表示 TCP 是一种面向连接的协议。

TCP 的三次握手流程,如下图所示:

TCP和UDP的区别(4大区别图解)-mikechen

第一次握手 :客户端发送SYN

客户端首先向服务器发送一个TCP报文段,其中包含一个SYN(同步)标志位,以请求建立连接。

客户端选择一个随机的初始序列号(ISN),该序列号用于标识数据包的顺序,以及后续数据包的可靠性传输。

第二次握手 :服务器发送SYN-ACK

服务器收到客户端的SYN报文后,知道客户端希望建立连接,于是生成一个新的序列号用于回复。

服务器向客户端发送一个TCP报文段,其中包含SYN和ACK(确认)标志位,表示接受客户端的连接请求,并将自己的序列号和确认号设定为自己的ISN加一。

服务器还分配缓冲区等资源以准备接收来自客户端的数据。

第三次握手 : 客户端发送ACK

客户端收到服务器的SYN-ACK报文后,确认了服务器的连接请求。

客户端向服务器发送一个TCP报文段,其中包含一个ACK标志位,表示接受了服务器的响应。

客户端的确认号设定为服务器的ISN加一,表明它准备好发送数据。

此时,连接已建立,双方可以开始安全地交换数据。

而 UDP 是面向数据报的协议,所以 UDP 压根不会有连接的概念,也就不会有三次握手建立连接的过程。

所以,每个UDP数据包都是独立的,不与其他数据包相关联。

因此,UDP通常比TCP更快,但不保证数据的可靠性。

 

可靠性的区别

TCP提供可靠的数据传输,它使用序列号、确认和重传机制来确保数据的完整性和可靠性。

如下图所示:

TCP和UDP的区别(4大区别图解)-mikechen

TCP 就是通过 ACK 来实现可靠的数据传输。

也就是说,发送方在发出请求之后会等待目标主机的响应,如果没有收到响应,发送方在经过一段时间后就会重传请求。

所以,即使在发送过程中产生丢包,TCP 仍然能够通过重传来实现可靠性。

而UDP不提供可靠性保障,数据包可能会丢失、乱序或重复。

这使得UDP适用于一些实时应用,如音频和视频流,因为它更快,但不适合对数据完整性有严格要求的应用。

 

报文段的区别

UDP报头相对较小,只包含源端口、目标端口、数据长度和校验和字段。

UDP 报文段结构,如下图所示:

TCP和UDP的区别(4大区别图解)-mikechen
主要包含了:
  • 源端口号(Source Port) :这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。
  • 目标端口号(Destination Port): 表示接收端端口,字段长为 16 位。
  • 长度(Length): 该字段占据 16 位,表示 UDP 数据报长度,包含 UDP 报文头和 UDP 数据长度。
  • 校验和(Checksum):UDP 的校验和也提供了差错检测功能,差错检测用于校验报文段从源到目标主机的过程中,数据的完整性是否发生了改变。

 

TCP报头相对较大,包含了大量控制信息,如序列号、确认号、窗口大小、选项等。

TCP 报文段结构,如下图所示:

TCP和UDP的区别(4大区别图解)-mikechen

TCP 报文段结构相比 UDP 报文结构多了很多内容:

  • TCP 相比 UDP 多了许多 Flags;
  • 序号;
  • 确认号等

这些都属于 TCP 的连接控制,除此之外还有接收窗口,这些属于拥塞控制和流量控制的内容。

所以,TCP报头相对较大,包含了大量控制信息,这增加了每个TCP报文段的开销。

UDP报头相对较小,只包含源端口、目标端口、数据长度和校验和字段,这使得UDP报文段开销较小,适用于传输小量数据或实时通信。

使用场景的区别

TCP通常用于需要可靠数据传输、数据完整性和数据顺序性的应用。

比如:网页浏览、电子邮件、文件传输和数据库交互等。

UDP通常用于实时应用,比如:音频和视频流、在线游戏、VoIP通话以及广播通信等,其中速度和实时性更为重要。

 

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法