本節書摘來自異步社群《unix網絡程式設計 卷1:套接字聯網api(第3版)》一書中的第8章,第8.1節,作者:【美】w. richard stevens , bill fenner , andrew m. rudoff著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
在使用tcp編寫的應用程式和使用udp編寫的應用程式之間存在一些本質差異,其原因在于這兩個傳輸層之間的差别:udp是無連接配接不可靠的資料報協定,非常不同于tcp提供的面向連接配接的可靠位元組流。然而相比tcp,有些場合确實更适合使用udp,我們将在22.4節探讨這個設計選擇。使用udp編寫的一些常見的應用程式有:dns(域名系統)、nfs(網絡檔案系統)和snmp(簡單網絡管理協定)。
圖8-1給出了典型的udp客戶/伺服器程式的函數調用。客戶不與伺服器建立連接配接,而是隻管使用sendto函數(将在下一節介紹)給伺服器發送資料報,其中必須指定目的地(即伺服器)的位址作為參數。類似地,伺服器不接受來自客戶的連接配接,而是隻管調用recvfrom函數,等待來自某個客戶的資料到達。recvfrom将與所接收的資料報一道傳回客戶的協定位址,是以伺服器可以把響應發送給正确的客戶。

圖8-1所示為udp客戶/伺服器互動中發生的典型情形的時間線圖。我們可以将該圖和圖4-1所示的tcp的典型互動進行比較。
本章中我們将介紹用于udp套接字的兩個新函數recvfrom和sendto,并使用udp重寫我們的回射客戶/伺服器程式。我們還将介紹connect函數在udp套接字中的用法以及異步錯誤這個概念。