当前位置: 代码迷 >> 综合 >> 网络通信:TCP与UDP的区别
  详细解决方案

网络通信:TCP与UDP的区别

热度:3   发布时间:2024-02-05 12:12:23.0

一、TCP(Transmission Control Protocol,传输控制协议):

       面向连接的、可靠的、字节流服务。

1、面向连接:

      在收发数据前,必须和对方建立可靠的连接,一个TCP接连需要经“三次握手”建立,而断开需要经“四次挥手”,大大提高了数据通信的可靠性,

2、可靠传输:

      依靠TCP的序号和确认号。序号可保证有序传输,接收端接收成功需要返回一个确认(ACK),否则超时未返回ACK,对应数据将被重传。

3、面向字节流:

      TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

4、提供拥塞控制

      当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

5、仅支持单播传输

       每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

6、TCP提供全双工通信

      TCP允许通信双方的应用程序在任何时候都能发送数据

 

TCP传输可靠性主要体现在:

1、确认应答机制

       TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号

2、超时重传

       发送方在发送完数据在一个特定时间内未收到接收方的ACK,将重传该数据

3、拥塞控制

      每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口。

4、数据不失真

       通过CRC算法 + 16位冗余效验码来保证TCP头部信息以及数据部分信息的完整性

 

TCP报头格式
源端口(16位) 目的端口(16位)
序号(32位)
确认好(32位)

TCP

头长度

(4位)

保留(6位) URG ACK PSH RST SYN FIN 窗口大小(16位)
校验和 紧急指针
可选项
数据(可选)

二、UDP(User Data Protocol,用户数据报协议):无连接的、不可靠的、数据报服务

1、无连接

     传输数据之前源端和终端不需要建立连接,知道对端的IP和端口号就直接进行传输

2、不可靠

     通信不需要建立连接,没有确认机制, 没有重传机制,因而传输速度很快

3、面向数据报

     应用层交给UDP多长的报文, UDP原样发送(仅仅添加UDP头部), 既不会拆分, 也不会合并,保留这些报文的边界。

4、尽最大努力交付

     即不保证可靠交付, 因此主机不需要维持复杂的链接状态表

5、头部开销小

     只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

6、有单播,多播,广播的功能

      由于传输数据不建立连接,因此也就不需要维护连接状态,UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

 

UDP报头格式
源端口(16位) 目的端口(16位)
报文段长度(16位) 校验和(16位)
数据

 

 三、TCP与UDP区别

  TCP UDP
1、是否连接 面向连接 无连接
2、是否可靠 可靠传输,使用流量控制和拥塞控制 不可靠传输,不使用流量控制和拥塞控制
3、连接对象个数 只能是一对一通信 支持一对一,一对多,多对一和多对多交互通信
4、传输方式 面向字节流 面向报文
5、首部开销 首部最小20字节,最大60字节 首部开销小,仅8字节
6、其他 程序结构较复杂 程序结构较简单
7、适用场景

适用于要求可靠传输的应用,例如文件传输

适用于实时应用(IP电话、视频会议、直播等)