UDP套接字的作用和特點
在UDP協議的應用過程中,為了更加方便對于服務器以及客戶端的接觸,我們發現了UDP套接字的好處。那么什么是UDP套接字呢?現在我們就來簡要對大家進行一下介紹。
UDP套接字
UDP協議提供了一種不同于TCP協議的端到端服務。實際上UDP協議只實現兩個功能:
1)在IP協議的基礎上添加了另一層地址(端口)
2)對數據傳輸過程中可能產生的數據錯誤進行了檢測,并拋棄已經損壞的數據。
由于其簡單性,UDP套接字具有一些與我們之前所看到的TCP套接字不同的特征。
例如,UDP套接字在使用前不需要進行連接。TCP協議與電話通信相似,而UDP協議則與郵件通信相似:你寄包裹或信件時不需要進行"連接",但是你得為每個包裹和信件指定目的地址。類似的,每條信息(即數據報文,datagram)負載了自己的地址信息,并與其他信息相互獨立。在接收信息時,UDP套接字扮演的角色就像是一個信箱,從不同地址發送來的信件和包裹都可以放到里面。一旦被創建,UDP套接字就可以用來連續地向不同的地址發送信息,或從任何地址接收信息。
UDP套接字與TCP套接字的另一個不同點在于他們對信息邊界的處理方式不同:UDP套接字將保留邊界信息。這個特性使應用程序在接受信息時,從某些方面來說比使用TCP套接字更簡單。
最后一個不同點是,UDP協議所提供的端到端傳輸服務是盡力而為(best-effort)的,即UDP套接字將盡可能地傳送信息,但并不保證信息一定能成功到達目的地址,而且信息到達的順序與其發送順序不一定一致(就像通過郵政部門寄信一樣)。因此,使用了UDP套接字的程序必須準備好處理信息的丟失和重排。(稍后我們將給出一個這樣的例子)
既然UDP協議為程序帶來了這個額外的負擔,為什么還會使用它而不使用TCP協議呢?
原因之一是效率:如果應用程序只交換非常少量的數據,例如從客戶端到服務器端的簡單請求消息,或一個反方向的響應消息,TCP連接的建立階段就至少要傳輸其兩倍的信息量(還有兩倍的往返延遲時間)。
另一個原因是靈活性:如果除可靠的字節流服務外,還有其他的需求,UDP協議則提供了一個最小開銷的平臺來滿足任何需求的實現。
Java程序員通過DatagramPacket 類和 DatagramSocket類來使用UDP套接字??蛻舳撕头掌鞫硕际褂肈atagramSockets來發送數據,使用DatagramPackets來接收數據。