TCP和UDP区别

TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别:

  1. 连接方式

    • TCP 是面向连接的协议。在数据传输前,TCP会先通过三次握手建立连接,确保双方都准备好进行通信,类似于打电话前需要先拨号接通。
    • UDP 是无连接的协议。它不建立正式的连接就可以直接发送数据报,类似于写信并邮寄出去,不确认对方是否在家或能否接收。
  2. 数据传输可靠性

    • TCP 提供可靠的数据传输服务,确保数据包无差错、不丢失、不重复且按序到达。TCP通过序列号、确认应答、重传机制和流量控制等策略来保证数据的可靠性。
    • UDP 不保证数据包的可靠传输,它只是尽可能快地将数据包发送出去,由上层应用负责处理数据完整性、顺序和丢包问题。因此,UDP可能遇到数据丢失、乱序等问题。
  3. 数据结构

    • TCP 是基于字节流的,它将数据看作一个无界的字节流,并没有明确的数据边界,适合连续数据的传输。【需要对字节流进行分割和组装】
    • UDP 是基于数据报的,每个UDP数据报都是一个独立的信息单元,包含完整的源地址、目的地址以及数据,适合一次性传输小块数据。【有明确的数据边界,数据报是独立的实体】
  4. 资源消耗和延迟

    • TCP 需要维护连接状态和执行复杂的错误检测与恢复机制,因此对系统资源的需求更高,可能导致较高的延迟。
    • **UDP 由于无需建立连接和维护连接状态,其头部开销小,处理速度快,延迟较低,更适用于对实时性要求高的应用。
  5. 应用场景

    • TCP 适用于对数据完整性、顺序和可靠性要求高的应用,如Web浏览器、电子邮件、文件传输(FTP)、远程登录(SSH)等。
    • UDP 适用于对实时性要求高、能容忍一定数据丢失的应用,如在线视频、直播、语音通话、在线游戏、DNS查询等。

概念讲解:

错误检查:

假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。

  1. 发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。

  2. 等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。

  3. 超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。

  4. 接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。

重传机制:

假设Alice要通过TCP给Bob发送一连串的数据包,每个数据包都有一个唯一的序列号。

  1. 发送数据:Alice首先发送数据包1,这个数据包包含了序列号1,表示这是第一个数据包。

  2. 等待确认:Bob收到数据包1后,他会向Alice发送一个确认应答(ACK),这个ACK中会包含他期望接下来收到的数据包的序列号。既然Bob已经收到了序列号为1的数据包,他的ACK就会声明他下一个期待接收的是序列号为2的数据包。

  3. 超时重传:如果Alice没有在预期的时间内收到针对数据包1的ACK(可能是因为数据包在网络中丢失了或者ACK在返回途中丢失),Alice会启动一个计时器。当这个计时器到达设定的超时时间后,Alice就会认为数据包1没有成功到达Bob,于是她会重新发送数据包1。

  4. 接收与排序:一旦Bob收到了重新发送的数据包1,他会再次发送ACK确认收到。这样,即使最初的数据包1丢失了,通过重传机制,Bob最终还是能够完整无误地接收到所有数据包,并且按照序列号对它们进行排序。

重传类型包括:

  1. 超时重传:TCP为每个发送的数据段设置一个定时器(称为重传定时器或RTO,Retransmission TimeOut)。如果在预期的时间内没有收到对方确认该数据段的ACK(Acknowledgment)报文,就认为数据段丢失或者网络中存在严重延迟,这时会触发超时重传。发送方会重新发送未被确认的数据段。

  2. 快速重传:这是对超时重传的一种补充。当接收方检测到数据包的顺序混乱(比如收到了序列号更高的数据包但期待的是更低序列号的数据包),它会立即发送重复的ACK,告知发送方某个特定序列号的数据包未到达。如果发送方短时间内收到多个重复确认同一个序列号的ACK,不用等待重传定时器超时,TCP会快速反应并重传被认为丢失的数据包,这样可以更快地恢复数据流,减少延迟。

  3. 选择性确认(SACK,Selective Acknowledgment):在某些情况下,接收方可能已经收到了数据流中的某些数据包,而另外一些则丢失了。选择性确认允许接收方在ACK中具体指出哪些数据片段已经正确接收到,这样发送方就可以只重传那些确实丢失的数据包,而不是从最后一个确认的数据包开始全部重传,提高了效率。

相关推荐
KaMeidebaby6 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
zjun10016 小时前
TCP专栏-4.四次挥手
网络协议·tcp/ip
酉鬼女又兒8 小时前
零基础入门计算机网络:网络层核心任务、三大关键问题、两种服务类型与 TCP/IP 网际层协议体系全解析
服务器·网络·网络协议·tcp/ip·计算机网络·php·求职招聘
代码中介商9 小时前
HTTPS加密原理:图解安全传输全流程
网络协议·http·https
“初生”10 小时前
Codex 桌面端新会话 5 次 Reconnecting 怎么办?HTTP/SSE 完美修复方案(2026最新)
网络·网络协议·http
夜悊10 小时前
网络编程代码实例:IO复用版
网络协议
TechWayfarer11 小时前
IP画像在企业安全中的应用:它能做什么?不能替代什么
网络·python·tcp/ip·安全·网络安全
北京耐用通信11 小时前
耐达讯自动化工业网关:极简组态实现 Modbus 转 PROFINET 稳定通讯
人工智能·物联网·网络协议·自动化·信息与通信
天启HTTP12 小时前
开启全局代理后网络变慢,问题出在哪
开发语言·前端·网络·tcp/ip·php
刘哥测评技术zcwz62612 小时前
海外动态IP和静态IP需要怎么选择
网络·网络协议·tcp/ip