TCP和UDP协议有什么不同

188 阅读5分钟

一、答案

  • UDP是无连接的,TCP是面向连接的
  • UDP支持一对一、一对多、多对一和多对多交互通信;而TCP的每一条TCP连接只能有两个端点,只能是一对一通信
  • UDP对应用层交付的报文直接打包,而TCP是面向字节流的
  • UDP会尽最大努力交付,也就是不可靠,不使用流量控制和拥塞控制;而TCP是可靠传输的,使用流量控制和拥塞控制
  • UDP首部开销少,仅8字节;TCP首部最小20字节,最大60字节

二、解析

① UDP是无连接的,TCP是面向连接的

  • 作为UDP协议的双方,可以随时发送数据;
  • 作为TCP协议的双方,在数据传输之前,必须使用三报文握手建立连接,建立连接后才能进行数据传输。数据传输完毕后,必须使用四报文挥手释放TCP连接

② UDP支持一对一、一对多、多对一和多对多交互通信;而TCP的每一条TCP连接只能有两个端点,只能是一对一通信

  • 使用UDP协议的多台主机可以相互通信。其中任何一台主机都可以向其他三台主机发送广播,也可以向某个多播组发送多播,还可以向某台主机发送单播。
  • 使用TCP协议的通信双方,在数据传输之前,必须使用三报文握手来建立TCP连接,通信双方之间就好像有一条可靠的通信信道,通信双方使用基于这条TCP连接的可靠通信进行通信,TCP仅支持单播

③ UDP对应用层交付的报文直接打包,而TCP是面向字节流的

  • 应用进程提交一个应用层报文给UDP进程,UDP直接给应用层报文添加一个UDP首部,使之成为一个UDP用户数据报,然后进行发送。接收方的UDP收到该UDP用户数据报后,去掉UDP首部,将应用层报文交付给应用进程。UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界。换句话说,UDP是面向应用报文的
  • 重点)TCP把应用进程交付下来的数据块仅仅看作是一连串的、无结构的字符流,TCP并不知道这些待传送的字节流的含义,仅将他们编号,并存储在自己的发送缓存中。TCP根据发送策略,从发送缓存中提取一定数量的字节,构建TCP报文段并发送。TCP接收方的TCP一方面从所接收到的TCP报文段中,取出数据载荷部分并存储在接收缓存中,另一方面将接收缓存中的一些字节交付给应用进程.
  • TCP不保证接收方的应用进程所收到的数据块与发送方应用进程所发出的数据块具有对应大小的关系.例如发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块就把收到的字节流交付给了上层的应用进程.但接收方应用进程收到的字节流必须和发送方应用进程发出的字节流完全一样(先交付了4个数据块,后面6个后面也要交付).当然,接收方的应用进程必须有能力识别收到的字节流,把他还原成有意义的应用层数据.也就是说,TCP是面向字节流的.这正是TCP实现可靠传输、流量控制以及拥塞控制的基础。

④ UDP会尽最大努力交付,也就是不可靠,不使用流量控制和拥塞控制;而TCP是可靠传输的,使用流量控制和拥塞控制

  • TCP/IP体系结构的网际层向其上层提供的是无连接不可靠的传输服务。当运输层使用UDP协议时,向其上层提供的也是无连接不可靠的传输服务,发送方给接受方发送UDP数据报,若传输过程中用户数据受到干扰而产生误码,接收方UDP可以通过该数据报首部中的校验和字段的值,检查出产生误码的情况,但仅仅丢弃该数据报,其他什么也不做。如果发送方的数据报在因特网中的某个路由器丢弃了,发送方UDP不做任何处理,因为UDP向上提供的是无连接不可靠的传输服务。因此对于UDP用户数据报出现的误码和丢失等问题,UDP并不关心,基于这个特点,UDP适用于实时应用,例如IP电话、视频会议等
  • 网际层向上提供无连接不可靠的传输服务。IP数据报在传输的过程中可能会出现丢包或者误码。但只要运输层使用TCP协议,就可向其上层提供面向连接的可靠传输服务。我们可将其想象为使用TCP协议的收发双方基于TCP连接的可靠信道进行数据传输,不会出现误码、丢失、乱序以及重复等传输差错,TCP适用于要求可靠传输的应用,例如文件传输

⑤ UDP首部开销少,仅8字节;TCP首部最小20字节,最大60字节

  • UDP用户数据报由首部和数据载荷两部分构成。首部仅有四个字段(源端口、目的端口、长度、检验和),每个字段的长度为2个字节一共8个字节
  • TCP报文也由首部和数据载荷部分构成。比UDP用户数据报的首部复杂得多,最小长度为20字节,最大长度为60字节,这是因为TCP要实现可靠传输流量控制拥塞控制等服务,其首部自然会比较复杂,首部字段比较多,首部长度也比较长