UDP通信说明【linux】(zzzb)

UDP通信

UDP是User Datagram Protocol的缩写,直译为用户数据报协议。

UDP的特点

UDP是不可靠传输协议

刚好与TCP相反,TCP可以根据网络状态的好坏以自己为单位调节分组的大小,UDP是一种面向无连接的不可靠传输层协议,而且UDP每次发送的分组数据大小都是固定的。

为什么UDP是不可靠传输?

(1)不建立连接。
(2)没有应答机制。
(3)不会根据网络的好坏调整分组数据的大小。

其实有关UDP为什么是不可靠传输协议,我们在说明TCP时就说的很清楚了,之所以不是可靠传输协议,主要还是因为UDP没有连接和应答机制,导致UDP在发送数据时,根本不清楚通信线路的连通状态,所以UDP传输数据时,无法保证数据一定能发送给对方,因此UDP是不可靠传输协议,或者说是不可靠通信。

每次传输数据时,必须指定对方的IP和端口

回顾TCP通信

TCP通信必须建立连接,TCP建立连接时,服务器和客户端的TCP协议会自动记录下对方的IP和端口,后续调用recv、send来正式通信时,应用程序不再需要指定对方的Ip和端口,因为会自动使用TCP记录对方的IP和端口。

UDP通信

对于UDP通信来说,UDP协议没有建立连接的特性,所以UDP协议没有自动记录对方IP和端口的特点,因此每次发送数据时,应用程序必须亲自指定对方的IP和端口,只有这样才能将数据发送给对方。
如果是跨网通信的话,指定的ip就是对方的公网ip。

什么时候使用UDP呢?
对于数据量很大但是允许数据丢失的数据来说,可以使用UDP通信。
比如像视频、音频等这类数据,尽管数据量很大,但是就算数据有所丢失的话,对通信质量不会有太大影响,此时就可以使用UDP来传输。

当然,我们在开发项目时,如果有现成的调用UDP的应用层协议,我们可以直接这些应用层协议,这些协议代码是可以到网上下载或者购买的,否者我们就自己亲自调用UDP来实现。

比如我们在开发与视频监控相关的网络程序时(主要是开发客户端),往往会使用RSTP或者RTP应用层协议来传输监控视频数据,RSTP和RTP底层实际上使用的就是UDP协议。

UDP的编程模型

图解说明:
UDP的编程模型
学习TCP通信时我们说过,TCP协议要求必须要有一个服务器,这一点是由TCP协议本身的特性所决定的。

TCP通信服务器端调用socket函数返回的套接字文件描述符用于监听。

但是通过UDP的编程模型可以看出,UDP通信双方要做的事情一摸一样的,所以对于UDP通信的双方来说,不需要区分谁是服务器端、谁是客户端也不需要监听对方连接,因为不存在建立连接也不存在断开连接,通信双方的身份完全是对等的,所以UDP通信也被称为对等通信,或者叫“点对点”通信。

UDP通信调用socket应用程序调用socket函数返回的套接字文件描述符直接用于通信。

对于UDP通信来说,如果要接收数据那么就必须使用bind函数绑定固定的ip和端口。如果只是用于发送数据则不需要绑定。

同样的,UDP这种对等通信的特点,或者说点对点通信的特点,是由UDP协议本身的特性所决定的,与应用程序没有关系。

对于UDP来说通信双方所实现的步骤是一模一样的,没有服务器和客户端的区分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章