Skip to content

UDP和TCP区别及应用场景等 #14

@liquidTM

Description

@liquidTM

一. UDP基本认识

UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。UDP头部只有8个字节(64)位

image

  • 目标和源端口:告诉UDP协议应该把报文发给哪个进程
  • 包长度:该字段保存了UDP首部的长度跟数据的长度之和
  • 校验和:为了提供可靠的UDP首部和数据设计,防止收到在网络传输中受损的UDP包。

二. TCP 和 UDP 有什么区别

  1. 连接
  • TCP是面向连接的传输层协议,传输数据前要先建立连接
  • UDP不需要建立连接,即刻传输数据
  1. 服务对象
  • TCP是一对一的两点服务,一条连接只有两个端点
  • UDP支持一对一 、一对多、多对多的交互通信
  1. 可靠性
  • TCP是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达
  • UDP是尽最大努力交付,不保证可靠交付数据
  1. 拥塞控制、流量控制
  • TCP有拥塞控制和流量控制,保证数据传输的安全性
  • UDP没有,即使网络十分拥堵了,也不会影响UDP的发送速率
  1. 首部开销
  • TCP首部长度较长,有一定开销,首部在没有使用 选项 字段时是20个字节,如果使用了选项字段,则会变长
  • UDP首部只有8个字节(64位),并且是固定不变的,开销小
  1. 传输方式
  • TCP是面向字节流,流式传输,没有边界,但保证顺序和可靠

面向字节流的话,虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流。TCP有一个缓冲,当应用程序传送的数据块太长,TCP可以把他划分短一些再传送。如果应用程序一次只发送一个字节,TCP也可以等待积累足够多的字节后再构成报文发出去。(有发生粘包的可能)

  • UDP是面向报文,一个包一个包的发送,是有边界的,但可能会丢包和乱序

面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此应用程序必须选择合适大小的报文,若报文太长,则IP层需要分片,降低效率。UDP对应用层交下来的报文,即不合并,也不拆分,而是保留这些报文的边界。应用层交给UDP多长的报文,UDP就照样发送,一次发送一个报文。

  1. 分片不同
  • TCP的数据大小如果大于 MSS 大小,会在传输层进行分片,目标主机收到后,也会在传输层组装TCP数据包,如果中途丢失了一个分片,只需要传输丢失的分片
  • UDP的数据大小如果大于MTU大小,会在IP层分片,目标主机收到后,会在IP层组装完数据,接着再发送给传输层。

三. 两者的应用场景

  1. TCP面向连接,可以保证数据的可靠性交付,常用于
  • FTP 文件传输
  • HTTP/HTTPS
  1. UDP面向无连接,可以随时发送数据,再加上本身的处理即简单又高效,因此常用于
  • 包总量较少的通信,如 DNS、SNMP等
  • 视频、音频等多媒体通信
  • 广播通信

四. 为什么 UDP 头部没有「首部长度」字段,而 TCP 头部有「首部长度」字段呢?

因为TCP 有可变长的「选项」字段,而 UDP 头部长度则是不会变化的,无需多一个字段去记录 UDP 的首部长度。

五. 为什么 UDP 头部有「包长度」字段,而 TCP 头部则没有「包长度」字段呢?

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions