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來說通信雙方所實現的步驟是一模一樣的,沒有服務器和客戶端的區分。

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