求star

开源不易,喜欢请点个star吧

Ocean Han
1780 字
9 分钟
TCP和 UDP对比
TIP

在传输层有两个最常见的传输协议,分别是TCPUDP,他们都属于TCP/IP协议族

1. UDP(User Datagram Protocol):rocket:#

TIP

UDP也叫作用户数据报协议,在网络中主要用来处理数据包,是一种无连接协议,在OSI模型中,它处于传输层

  • UDP面向无连接的,也就是说它在发送数据前不需要进行三次握手建立连接,也不会对数据报文进行任何拆分和拼接操作,所以在报文发送后,并不知道报文有没有安全、完整的到达
  • UDP单播,多播,广播的功能,它的连接支持一对一,一对多,多对一,和多对多交互通信
  • 传输方式面向报文。UDP对应用层交付下来的报文,既不合并,也不拆分,而是保留这些报文的边界,在添加首部之后就向下交付IP层
  • **不可靠性:**一方面体现在它的无连接上,另一方面是它没有拥塞控制和流量控制,一直会以恒定的速度发送数据,跟网络环境没有关系
  • 头部开销小,只有8字节,相比TCP在传输数据报文时更高效
  • UDP不是面向连接的协议,因此资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

2. TCP(Transmission Control Protocol):rocket:#

TIP

TCP全称是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议

  • 面向连接:发送数据之前必须在两端建立连接,也就是俗称的三次握手,为数据的可靠传输提供基础
  • 仅支持单播传输:每条TCP传输连接只能由两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式
  • **面向字节流:**不保留报文边界的情况下以字节流方式进行传输
  • 可靠传输:会通过使用TCP的段编号和确认号来确认有没有出现丢包、误码,所以能保证数据的顺序的正确性。它会给每个包一个序号,保证接收端按序接收包;同时接收端实体会对已成功收到的字节返回一个响应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据将会被重传
  • **流量控制和拥塞控制:**当网络出现拥塞的时候,TCP能减小向网络注入数据的速率和数量,缓解拥塞
  • **提供全双工通信:**允许通信双方的应用程序在任何时候都能发送数据
  • 一般适用于要求可靠传输的应用,例如文件传输等对准确性要求较高的

3. 对比两者的区别#

TCP和UDP区别

4. 提出一些问题#

4.1 UDP为什么不可靠?#

TIP
  • 传输数据前不需要提前建立连接,在接收到UDP报文之后,不需要确认,提供不可靠交付,也不重传
  • 不保证交付的顺序,不设置包序号,不重排
  • 不进行拥塞控制和流量控制,发送数据跟网络环境没有关系
  • UDP只有一个socket接受缓冲区,没有socket发送缓冲区,即只要有数据就发,不管对方是否可以正确接受。当对方的socket接受缓冲区满了之后,新来的数据报无法进入到socket接受缓冲区,此数据报就会被丢弃,UDP是没有流量控制的,所以UDP的数据传输是不可靠的

4.2 如何让UDP变的可靠?#

TIP

答:可以参考TCP的可靠传输机制,和直接使用TCP的差别就是,将TCP传输层功能,确认机制、重传机制和窗口确认机制实现在应用层

在应用层实现可靠传输的关键点有两个,从应用层角度考虑分别是:

  • 提供超时重传机制,避免数据报丢失问题
  • 提供确认序列号,保证数据拼接时候的正确顺序

再稍微详细一点的操作:

  • 请求端:首先在UDP数据报定义一个首部,首部包含确认序列号和时间戳。时间戳是用来计算RTT(数据报传输的往返时间),计算出合适的RTO(重传的超时时间)。然后以等-停的方式发送数据报,即收到对端的确认之后才会发送下一个数据报。当时间超时,本端会重传数据报,同时RTO扩大为原来的两倍,并重新开始计时
  • 响应端:接收到一个数据报之后取下该数据报首部的时间戳和确认序列号,并添加本端的确认数据报首部之后发送给对端。根据此序列号对已收到的数据报进行排序并丢弃重复的数据报

4.3 TCP为什么可靠?它的重传机制是什么?#

TIP
  • **使用序列号和确认应答:**接收方在接收消息后会返回给发送方一个应答确认号,也就是ACK
  • **重发超时:**使用了ACK使得发送方可以知道数据有没有送达,如果消息发送失败了,TCP会根据往返时间与偏差计算重发超时时间,考虑偏差主要是网络环境存在波动,数据重发之后如果仍无法收到应答,则再次发送,此时等待确认应答的事件将会以2、4、8倍的指数延长,但数据也不会无限重发,当达到一定次数后,则自动判断对方异常,强制关闭连接
  • 三次握手、四次握手:正式通信之前回合服务器请求建立连接,结束时也会请求断开连接
  • **拥塞控制和流量控制:**TCP实现了发送方可以根据接收方的接收能力动态控制发送数据量的机制,这里控制的数据量实际也是窗口大小
  • 重传机制:由于TCP的下层网络(网络层)可能出现丢失、重复。乱序的情况,TCP协议提供可靠数据传输服务。为保证数据传输的正确性,TCP会重传那些它认为丢失(包括报文中的比特错误)的包。TCP使用两套独立的机制来完成重传,一是基于时间,二是基于确认信息。TCP在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号
TCP和 UDP对比
https://blog.oceanh.top/posts/network/tcp和udp/
作者
Ocean Han
发布于
2022-11-15
许可协议
CC BY-NC-SA 4.0
最后修改时间
2024-08-10 10:08:49