图文并茂,详解TCP和UDP协议的原理和区别
内容提要
TCP和UDP是传输层协议,TCP稳定可靠,适用于对通讯质量要求高的场景;UDP速度快,适用于对实时性要求高的场景。TCP的通信过程包括三次握手和四次挥手。UDP是非连接的,性能损耗少,但对丢包不能保证。
延伸解读
三次握手为何必要:从信道不可靠说起
文章用“两次握手可能导致状态不一致”的例子,解释了三次握手的核心目的:在不可靠的信道上建立可靠连接。如果只有两次握手,一个滞留在网络中的旧SYN包突然到达服务端,服务端会误以为客户端发起了新连接,而客户端并不知情,导致双方连接状态不一致。三次握手让服务端在收不到最终ACK时不会认为连接建立成功,从而避免这种错误。
TCP如何应对丢包与乱序:序列号与确认机制
TCP为每个连接建立发送缓冲区,并为每个字节分配递增的序列号。发送报文时携带序列号和长度,接收端回复确认报文,其中ack等于接收序列号加长度,即下一包数据的起始序列号。这种一问一答的机制让发送端能确认数据已被接收。发送端也可以连续发送多包数据,接收端只需回复一次ack,兼顾了可靠性与效率。
四次挥手与超时等待:确保连接可靠关闭
关闭连接需要四次挥手,因为TCP是全双工的,双方需各自确认关闭。主动关闭方发送FIN,被动方回复ACK后仍可发送剩余数据,再发送FIN,主动方回复ACK后进入超时等待状态,经过一段时间才关闭连接。这个等待是为了防止最后ACK丢失导致服务端一直停留在最后确认状态;若ACK丢失,服务端会重发FIN,客户端可重发ACK并刷新超时时间。
UDP的取舍:简单高效,但不保证可靠
UDP是非连接的,发送数据只需简单封装后从网卡发出,数据包之间没有状态联系。这种简单处理带来性能优势:CPU和内存资源占用远小于TCP。但UDP不保证丢包处理,传输稳定性弱于TCP。因此UDP适合对实时性要求高、能容忍少量丢包的场景,如域名查询、语音通话、视频直播,也常用于VPN、VXLAN等隧道网络。
Q&A
TCP和UDP的主要区别是什么?
TCP是基于连接的,适用于对通讯质量要求高的场景;UDP是非连接的,适用于对实时性要求高的场景。
TCP的三次握手过程是怎样的?
三次握手包括客户端发送SYN包,服务端回复SYN+ACK包,客户端再发送ACK包以建立连接。
UDP适合哪些应用场景?
UDP适合域名查询、语音通话、视频直播等对实时性要求高的场景。
TCP如何处理数据传输中的丢包和乱序问题?
TCP通过序列号和确认报文来处理丢包和乱序问题,确保数据按顺序到达。
TCP的四次挥手是为了什么?
四次挥手用于安全关闭连接,确保双方都确认连接已关闭。
为什么UDP不能保证数据传输的稳定性?
因为UDP是非连接的,数据包之间没有状态联系,可能会导致丢包。