- TCP 就像打电话:
你必须先拨通(建立连接),确认对方听到了(确认应答)。如果你没听清,会要求对方重复(重传)。你们保证了对话内容一字不差,但可能会因为确认对方是否听到而花费更多时间。 - UDP 就像发微信语音条:
你录完直接发出去,不管对方有没有收到,也不管顺序对不对。这样发送速度极快,但如果网络不好丢了包,对方听到的就是一段空白或杂音,没法自动补救
| 特性 | TCP (传输控制协议) | UDP (用户数据报协议) |
|---|---|---|
| 连接方式 | 面向连接 (需三次握手建立连接) | 无连接 (直接发送,无需握手) |
| 可靠性 | 可靠 (数据不丢失、不重复、按序到达) | 不可靠 (尽力而为,可能丢包、乱序) |
| 传输单位 | 字节流 (没有固定边界,可能粘包) | 数据报 (保留消息边界,发几次收几次) |
| 速度与延迟 | 较慢 (因握手、确认、重传机制) | 极快 (无连接无确认,头部开销小) |
| 头部开销 | 20-60 字节 (功能多,包头大) | 8 字节 (结构简单,包头小) |
| 拥塞控制 | 有 (根据网络情况自动调整速度) | 无 (网络拥塞时可能加剧拥堵) |
选择 TCP 的场景 (要“靠谱”)
当你需要传输的数据必须完整、准确,哪怕牺牲一点速度也无所谓时,就选 TCP。
- 网页浏览 (HTTP/HTTPS):加载网页代码和图片,缺一个字节都可能导致页面错乱。
- 文件传输 (FTP):文件损坏通常比慢一点更让人无法接受。
- 电子邮件 (SMTP/POP3):邮件内容必须 100% 完整送达。
- 数据库操作:银行转账、数据查询,绝不允许出错。
选择 UDP 的场景 (要“快”)
当你对实时性要求极高,宁可丢几帧数据也不愿卡顿,或者数据量很小、频繁发送时,就选 UDP。
- 实时音视频 (直播/会议):视频通话时,如果某个画面包丢了,重传回来也是过时的画面,不如直接丢弃继续播放,保证流畅。
- 在线游戏 (射击/竞技):玩家位置实时变动,旧的位置信息过时了就没用了,必须用最新的位置数据。
- DNS 查询:简单的问一句“xxx域名IP是多少”,直接回一句就行,不需要建立连接的开销。
- 物联网 (IoT):传感器高频发送的小数据包,用 UDP 更省资源。
欢迎来撩 : 汇总all
