有了TCP ,为什么还需要UDP?

有了TCP ,为什么还需要UDP?

前面我们介绍了了TCP协议,(不知道啥是TCP的看这篇:TCP的三次握手和四次挥手)知道TCP是面向连接的提供可靠性服务的传输层协议,今天讲下同属于传输层的另一个协议——UDP。

 

 

有了TCP ,为什么还需要UDP?

 

 

正文

 

 

1.什么是UDP?

 

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,传输可靠性没有保证。

 

2.UDP报文头

 

 

有了TCP ,为什么还需要UDP?

 

 

UDP报文分为UDP报文头和UDP数据区域两部分。报头由源端口、目的端口、报文长度以及校验和组成。

 

UDP头部的标识如下:

 

16位源端口号:源主机的应用程序使用的端口号。

 

16位目的端口号:目的主机的应用程序使用的端口号。

 

16位UDP长度:是指UDP头部和UDP数据的字节长度。因为UDP头部长度为8字节,所以该字段的最小值为8。

 

16位UDP校验和:该字段提供了与TCP校验字段同样的功能;该字段是可选的。

 

3 为什么需要UDP?

 

UDP(User Datagram Protocol)传输与IP传输非常类似,它的传输方式也是"Best Effort"的,所以UDP协议也是不可靠的。

 

我们知道TCP就是为了解决IP层不可靠的传输层协议,既然UDP是不可靠的,为什么不直接使用IP协议而要额外增加一个UDP协议呢?

 

1、一个重要的原因是IP协议中并没有端口(port)的概念。IP协议进行的是IP地址到IP地址的传输,这意味者两台计算机之间的对话。但每台计算机中需要有多个通信通道,并将多个通信通道分配给不同的进程使用。一个端口就代表了这样的一个通信通道。UDP协议实现了端口,从而让数据包可以在送到IP地址的基础上,进一步可以送到某个端口。

 

2、对于一些简单的通信,我们只需要“Best Effort”式的IP传输就可以了,而不需要TCP协议复杂的建立连接的方式(特别是在早期网络环境中,如果过多的建立TCP连接,会造成很大的网络负担,而UDP协议可以相对快速的处理这些简单通信)

 

3、在使用TCP协议传输数据时,如果一个数据段丢失或者接收端对某个数据段没有确认,发送端会重新发送该数据段。TCP重新发送数据会带来传输延迟和重复数据,降低了用户的体验。对于迟延敏感的应用,少量的数据丢失一般可以被忽略,这时使用UDP传输将能够提升用户的体验。

 

4.UDP应用场景:

 

当应用程序对传输的可靠性要求不高,但是对传输速度和延迟要求较高时,可以用UDP协议来替代TCP协议在传输层控制数据的转发。

 

UDP适合于实时数据传输,如语音和视频通信,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。例如:我们在看视频的时候偶尔丢一两个包也不影响体验。

 

常用的使用UDP协议包括:TFTP、SNMP、NFS、DNS、BOOTP。

 

UDP端口号有:53(DNS)、69(TFTP)、161(SNMP)。

 

5.UDP协议不可靠,可靠性由谁保障

 

UDP将数据从源端发送到目的端时,无需事先建立连接,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。

 

UDP传输的可靠性由应用层负责,由应用程序根据需要提供报文到达确认、排序、流量控制等功能。

 

6.UDP协议优缺点:

 

优点:UDP协议的控制选项较少,在数据传输过程中延迟小、数据传输效率高,开销更小,适合对可靠性要求不高的应用程序,或者可以保障可靠性的应用程序,如DNS、TFTP、SNMP等。

 

缺点:UDP报文没有可靠性保证、顺序保证和流量控制字段等,

 

7.UDP工作原理

 

主机A发送数据包时,这些数据包是以有序的方式发送到网络中的,每个数据包独立地在网络中被发送,所以不同的数据包可能会通过不同的网络路径到达主机B。这样的情况下,先发送的数据包不一定先到达主机B。

 

因为UDP数据包没有序号,主机B将无法通过UDP协议将数据包按照原来的顺序重新组合,所以此时需要应用程序提供报文的到达确认、排序和流量控制等功能。

 

通常情况下,UDP采用实时传输机制和时间戳来传输语音和视频数据。

 

8.UDP和TCP有什么区别呢

 

相同点:

UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。

 

不同点:

 

1、TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务;

2、TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP 在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;

3、UDP 具有较好的实时性,工作效率较 TCP 协议高;

4、UDP 段结构比 TCP 的段结构简单,因此网络开销也小。

 

总之:UDP,UDP其实可以看成是对TCP协议的补充,是一种无连接的不可靠的协议,具体延迟小,效率高等特点。

上一篇:【很干】终于有一篇把TCP、UDP特性搞明白了


下一篇:untiy 中的UDP和TCP通信 获取客户端的IP