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中具体指出哪些数据片段已经正确接收到,这样发送方就可以只重传那些确实丢失的数据包,而不是从最后一个确认的数据包开始全部重传,提高了效率。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Addison_Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值