UDP協(xié)議的面向鏈接問題
UDP協(xié)議的優(yōu)點有很多,在TCP協(xié)議方面我們也做過比較。大家也都清楚,它的快速是TCP無法比擬的?,F(xiàn)在我們就來簡單介紹一下UDP協(xié)議的情況。走進UDP協(xié)議: UDP(User Datagram Protocol)協(xié)議就是“用戶數(shù)據(jù)報協(xié)議",它是一種無連接的協(xié)議,無連接主要是和TCP協(xié)議相比較的。
我們知道當利用TCP協(xié)議傳送數(shù)據(jù)的時候,首先必須先建立連接(也就是所謂的握手)才可以傳輸數(shù)據(jù)。而當計算機利用UDP協(xié)議進行數(shù)據(jù)傳輸?shù)臅r候,發(fā)送方只需要知道對方的IP地址和端口號就可以發(fā)送數(shù)據(jù),而并不需要進行連接。
當然如果你非要進行連接,通過Visual C#也是可以實現(xiàn)的,但前提是要確定連接的遠程主機的端口號處于監(jiān)聽狀態(tài),否則程序會出現(xiàn)不必要的錯誤,但這是種畫蛇添足的做法,不僅丟失了UDP協(xié)議的無連接傳送數(shù)據(jù)的特點和優(yōu)點,而且還給程序運行帶來了不安定的因素。所以這種方法并不值得提倡。
由于UDP協(xié)議并不需要進行確定的連接,所以編寫基于UDP協(xié)議的應用程序比起編寫基于TCP協(xié)議的應用程序要簡單些(程序中可以不需要考慮連接和一些異常的捕獲工作)。但同時也給基于UDP協(xié)議編寫的程序帶來了一個致命的缺點,UDP由于不提供可靠數(shù)據(jù)的傳輸,當計算機之間利用UDP協(xié)議傳送數(shù)據(jù)的時候,發(fā)送方只管發(fā)送數(shù)據(jù),而并不確認數(shù)據(jù)是否被對方接收。這樣就會導致某些UDP協(xié)議數(shù)據(jù)包在傳送的過程中丟失,尤其網(wǎng)絡質(zhì)量不令人滿意的情況下,丟失數(shù)據(jù)包的現(xiàn)象會更嚴重。這就是為什么在網(wǎng)絡上傳輸重要數(shù)據(jù)不采用UDP協(xié)議的原因。
但是我們也不能因為這一個缺點就全面否定UDP協(xié)議,這是因為雖然利用UDP協(xié)議來傳送安全性要求高的數(shù)據(jù)是不適合的,但對于那些不重要的數(shù)據(jù),或者即使丟失若干數(shù)據(jù)包也不影響整體性的數(shù)據(jù),如音頻數(shù)據(jù),視頻數(shù)據(jù)等,采用UDP協(xié)議就是一個非常不錯的選擇。
如目前網(wǎng)絡流行的很多即時聊天程序,如OICQ和ICQ等,采用的就是UDP協(xié)議。同時雖然UDP協(xié)議無法保證數(shù)據(jù)可靠性,但具有對網(wǎng)絡資源開銷較小,數(shù)據(jù)處理速度快的優(yōu)點,所以在有些對數(shù)據(jù)安全性要求不是很高的情況下,采用UDP協(xié)議也是一個非常不錯的選擇。
總結(jié)一下上面的內(nèi)容,可見UDP是一種不面向連接的網(wǎng)絡協(xié)議,既有其優(yōu)點,也有其不足,具體如下:
1.基于UDP協(xié)議的網(wǎng)絡應用程序,實現(xiàn)起來比較簡單,并且基于UDP協(xié)議的網(wǎng)絡應用程序在運行時,由于受到環(huán)境影響較小,所以不容易出錯。
2.UDP協(xié)議占用網(wǎng)絡資源較少,數(shù)據(jù)處理較快,所以在網(wǎng)絡中傳送對安全性要求不是十分高數(shù)據(jù)時,其優(yōu)點比較明顯。所謂對安全性要求不高的數(shù)據(jù),是指那些不重要的數(shù)據(jù),或者是即使丟失若干數(shù)據(jù),也不影響其整體的數(shù)據(jù),如音頻數(shù)據(jù)等。目前很多流行的網(wǎng)絡應用程序都是基于UDP協(xié)議的,如OICQ、ICQ等。
3.由于其不是面向連接的網(wǎng)絡協(xié)議,其缺點也是非常明顯的,有些時候甚至是致命的。因為使用UDP協(xié)議來傳送數(shù)據(jù),在數(shù)據(jù)發(fā)送后,在發(fā)送方并不確認對方是否接收到。這樣就可能導致傳送的數(shù)據(jù)在網(wǎng)絡中丟失,尤其在網(wǎng)絡條件并不很好的情況下,丟失數(shù)據(jù)包的現(xiàn)象就更多。所以傳送重要數(shù)據(jù)一般不采用UDP協(xié)議。