本篇文章主要介紹建立套接字函數相關的3個輸入參數的含義,它們最終肯定了套接字通訊所採用的協議。同時,也簡單對比了TCP和UDP傳輸方式的區別。數組
什麼是協議?協議是對話中使用的通訊規則,而在計算機領域則可解釋爲「計算機間對話的通訊規則」。簡言之,協議就是爲了完成數據交換而約定的規則。安全
//建立套接字 #include <sys/socket.h> int socket(int domain, int type, int protocol); -> 成功時返回文件描述符,失敗時返回-1
domain 套接字中使用的協議族信息
dom
type 套接字數據傳輸的類型信息
socket
protocol 計算機間通訊使用的協議信息
函數
協議族(Protocol Family)spa
協議族的類型信息分類以下,其中經常使用的如IPv4協議族信息PF_INET及IPv6協議族信息PF_INET6等3d
協議族類型code
套接字類型blog
套接字類型指的是套接字通訊的數據傳輸方式,經常使用的套接字類型有兩種,即TCP傳輸類型SOCKET_STREAM,UDP傳輸類型SOCKET_DGRAM。書中舉例的兩幅漫畫形象地解釋了TCP和UDP數據傳輸的差別:it
TCP傳輸類型
上面提到了面向鏈接的套接字的一些特色,其中,比較容易驗證的是第三點--傳輸的數據不存在數據邊界,只須要調整通訊雙方write和read的次數不一致便可。那這一點又是如何作到的呢?-->收發數據的套接字內部有緩衝區,簡言之就是字節數組。經過套接字傳輸的數據會保存到該字節數組中,只要不超出該字節數組的容量,則可待改字節數組填滿以後經過一次read操做讀取所有內容。
那若是套接字緩衝區已盡是否意味着會發生數據丟失?並不會。因爲面向鏈接套接字的安全機制,若是套接字緩衝區滿,則傳輸端將中止傳輸;而且根據接收端的狀態傳輸數據,若是傳輸出錯還會提供重傳服務。
TCP:「可靠、有序、基於字節的面向鏈接的數據傳輸方式」
UDP傳輸類型
面向消息的套接字傳輸則剛好相反。其中,存在數據邊界的特性意味着接受和傳輸數據的次數必須保持一致。
UDP:「不可靠、無序、基於消息的無鏈接的數據傳輸方式」
協議的最終選擇
socket函數的第三個參數protocol肯定了socket通訊的最終協議。一般咱們並不須要關注該參數,由於只要前兩個參數肯定,第三個參數即可惟一肯定。此時只需將該參數置0便可,如IPv4協議族+TCP傳輸類型可肯定第三個參數只能爲IPPROTO_TCP;而IPv4協議族+UDP傳輸類型可肯定第三個參數只能爲IPPROTO_UDP。只有當同一協議族中存在多個數據傳輸方式相同的協議時,需特殊處理。