关于TCP和UDP两种网络协议的区别
1、tcp协议
TCP (Transmission Control Protocol - 传输控制协议)
TCP 的核心目标是为应用层提供一条可靠的、无差错的、有序的字节流通道。
主要特点:
面向连接:在数据传输之前,必须通过“三次握手”建立稳定的连接,传输结束后通过“四次挥手”断开连接。
可靠传输:使用确认应答(ACK)、超时重传、丢包重传等机制来确保数据一定能到达对端。
流量控制:通过滑动窗口机制,根据接收方的处理能力来动态调整发送数据的速度,防止接收方被淹没。
拥塞控制:通过复杂的算法(如慢启动、拥塞避免、快速重传、快速恢复)来感知网络状况,防止过多的数据注入网络导致网络瘫痪。
有序传输:为每个数据包编号(序列号),接收方会按照编号重新组装,保证数据顺序的正确性。
基于字节流:TCP 不保留消息边界。发送方连续写入多次数据,接收方可能一次全部读出,或者分多次读出。应用程序需要自己处理消息边界问题(例如,通过规定消息长度或使用特殊分隔符)。
优点: 数据可靠,无差错,不丢失,不重复,且按序到达。
缺点: 机制复杂,头部开销大(至少20字节),延迟高,传输效率相对较低。
2、udp协议
UDP 的核心目标是提供一个简单、高效的传输服务,它只负责发送数据,不提供任何可靠性保证。
主要特点:
无连接:发送数据前不需要建立连接,直接发送。
不可靠传输:不提供确认、重传、序列号等机制。发送数据后不知道对方是否收到。
无流量和拥塞控制:不管网络是否拥堵,都会以恒定的速率发送数据。这既是缺点(容易加剧网络拥堵)也是优点(延迟稳定)。
面向数据报:UDP 保留消息边界。发送方调用一次发送函数发送一个数据包,接收方调用一次接收函数就会收到整个数据包。
头部开销小:只有8字节的固定头部,非常精简。
优点: 速度快、延迟低、开销小、实时性好。
缺点: 不保证数据一定到达,不保证顺序,不保证不重复。
典型应用场景: 对实时性要求高于可靠性的应用,或者可以自己实现简单可靠性机制的应用。
语音和视频通话(VoIP, Zoom, Teams):丢失少量数据包只会导致短暂卡顿或杂音,但如果用TCP重传,延迟会高到无法正常对话。
在线直播和流媒体:同理,追求实时性。
实时在线游戏:玩家的每一个操作都需要极低的延迟,偶尔丢包比高延迟更能接受。
DNS查询:查询请求本身很小,且需要快速响应,如果超时未收到回复,客户端会直接重发请求。
DHCP:网络分配IP地址的协议。
选择 TCP:当你需要可靠性和数据正确性时。你希望所有数据都能完整、无误、按顺序地到达目的地。例如:传输一个文件、加载一个网页、发送一封邮件。99%的通用应用都使用TCP。
选择 UDP:当你需要速度和低延迟,并能容忍少量数据丢失时。例如:视频通话时的一帧画面丢失,远比等待它重传导致整个对话卡住要好。或者,你可以在UDP的基础上,在应用层自己实现一套简单的确认和重传机制来满足特定需求,从而获得比TCP更好的性能。