【计算机网络】 ——UDP(用户数据报协议)以及TCP与UDP的区别

一、TCP/IP协议族

在博主阅读很多文档之后,觉得这么一句话很有道理:要想学好TCP和UDP协议,首先得清楚TCP协议和UDP协议与TCP/IP协议的联系,有时候我们以为自己懂了这个知识点,但是并没有把知识串起来。这种学习感觉像是知其然但不知其所以然。就假如说面试官直接问你TCP的特点,你很轻松的说出它是面向连接,可靠传输,面向字节流的,但是如果人家再问你既然TCP已经做到了可靠传输,为什么还需要UDP这种无连接不可靠的协议?如果你不知道这个问题的答案,那我觉得你就属于这种知其然不知其所以然这种。得重新捋一下知识点。

TCP/IP协议是一个协议族,里面包括很多协议。UDP只是其中的一个,之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。下图是博主找到比较整齐且又容易理解的协议层次图:
【计算机网络】 ——UDP(用户数据报协议)以及TCP与UDP的区别

二、UDP协议简介以及特点

UDP:User Datagram Protocol的简称,中文名用户数据报协议,是OSI开放式系统互连参考模型中一种无连接的传输层协议主要是处理数据包

2.1 UDP数据报的首部结构

UDP有两个字段:首部字段和数据字段
首部字段有八个字节,源端口,目的端口,长度,校验和各占两个字节,如下图所示:
【计算机网络】 ——UDP(用户数据报协议)以及TCP与UDP的区别
(1)源端口
在需要对方回信时使用,不需要时全为0
(2)目的端口
发送UDP数据报的目的地
(3)长度
UDP数据段的长度,最短为8个字节,只包含首部
(4)校验和
用于检验UDP数据报在传输过程中有没有出错,有则丢弃

在上图还出现了一个伪首部,其实UDP首部中有个校验和,它在计算的时候要加上伪首部。书上对这个只是简略的说了下。伪首部中由源ip和目的ip,以及协议头,这么做的目的:收到这个UDP的对端也做同样的校验和计算,如果接收端IP传递了错误的数据到UDP层的话,校验和就会不一致,丢弃包。

2.2 UDP协议的特点

无连接,不可靠,面向数据报(一定要记住!!!)

(1)无连接的

发送数据之前源端和终端不需要建立连接,当它想传送时候就的去抓取应用程序的数据,并尽可能快的把他扔到网络上。在发送端,UDP传送数据的速度仅受应用程序生成数据的速度,计算机的处理能力,网络带宽的限制;在接收端,把每个消息段放在队列中,应用程序每次从队列中读一个消息段。减少了开销和发送之前的时延

(2)不可靠

由于传输数据不需要建立连接,因此就不需要维护连接状态,包括收发状态。尽最大努力交付,但是不保证可靠交付。因此一台服务机可同时向多个客户机传输相同的消息。

(3)面向数据报

发送方的UDP对应用程序交下来的报文,在添加首部之后就向下交付给IP层,既不拆分,也不合并,而是保留这些报文的边界。因此,应用程序需要选择合适的报文大小。

(4)UDP没有拥塞控制

网络拥塞不会导致UDP的发送速率降低,接收端要求发送端以恒定的速率发送,并且允许少量丢包时候,UDP恰好符合这种需求

(5)UDP支持多种模式

UDP支持一对一,多对一,一对多,多对多的交互通信

外加一个小的知识点,我们经常使用的“ping”命令来测试两台主机之间TCP/IP 通信是否正常,其实“ping”命令的原理就是向对方发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

三、TCP与UDP的区别

(1)TCP是提供面向连接的,通信前要先建立连接(三次握手);UDP提供无连接,通信前不需要建立连接,所以起步快,延时小

(2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输,由于不需要双方都在线,所以服务端不用维护巨量的并发连接,节省系统资源。

(3)TCP面向字节流的传输,因此它能够将信息分割成组,并在接收端将其分组;UDP是面向数据报的传输,没有分组开销。

(4)TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。(对实时应用很有用,如IP电话和视频会议等 )

再回到我们开头提到的问题,TCP已经实现了可靠传输,为什么还需要不可靠的UDP呢?TCP的实时性要求不高,但是要求内容完整传输到应用。UDP由于无连接,无重传确认,所以传输效率高,延时小,适合实时性要求高的应用。比如游戏服务器,音频,视频等。再者就是UDP可以更高效的利用网络带宽。

四、UDP的使用场景

  • 需求资源少,网络情况稳定的内网,或者对于对包不敏感的应用,比如DHCP就是基于UDP协议的
  • 不需要一对一沟通,建立连接,而是可以广播的应用。因为它不面向连接,所以可以做到一对多,承担广播和多播的协议
  • 需要处理速度快,可以容忍对包,但是即使网络拥塞,也毫不退缩,一往无前的时候。

(emmm,有问题的还是需要广大网友提出,我会好好学习的)