《TCP/IP網絡編程》第2章 套接字類型與協議設置

套接字協議及其數據傳輸特性

1.       關於協議(Protocol)

    計算機間對話必備通信規則。

2.       創建套接字

#include <sys/socket>
int socket(int domain, int type, int protocol);

    -domain:套接字中使用的協議族(ProtocolFamily)信息;

    -type:套接字數據傳輸類型信息;

    -protocol:計算機間通信中使用的協議信息;

3.       協議族(Protocol Family)

  • PF_INET     ipv4
  • PF_INET6    ipv6
  • PF_LOCAL   本地通信的UNIX協議族

4.       套接字類型(Type)

    套接字類型指的是套接字的數據傳輸方式。Socket函數第一個參數PF_INET協議族中也存在多種數據傳輸方式。

套接字類型1:面向連接的套接字(SOCK_STREAM)

  • 傳輸過程中數據不會消失;
  • 按序傳輸數據;
  • 傳輸的數據不存在數據邊界(Boundary)。

    收發數據的套接字內部有緩衝(buffer),即字節數組。通過套接字傳輸的數據將保存到該數組,因此,收到數據並不意味着馬上調用read函數,只要不超過數組容量,則有可能在數據填充滿後通過1次函數調用讀取全部數據,也有可能分成多次read函數調用讀取。

    讀取速度較慢時,緩衝有可能被填滿,此時套接字無法再接收數據,但即使這樣也不會發生數據丟失,因爲傳輸端套接字將停止傳輸。

    面向連接的套接字:可靠的、按序傳遞的、基於字節的面向連接的數據傳輸方式。

套接字類型2:面向消息的套接字(SOCK_DGRAM)

    面向消息的套接字比面向連接的套接字具有更快的傳輸速度,但無法避免數據丟失或損毀;另外,每次傳輸的數據大小具有一定的限制,並存在數據邊界,存在數據邊界意味着接收數據的次數應和傳輸次數相同。

    面向消息的套接字:不可靠的、不按序傳遞的、以數據的高速傳輸爲目的的套接字。

5.       協議的最終選擇

    傳遞前兩個參數即可創建所需套接字,所以大部分情況下可以向第三個採納數傳遞0,除非遇到以下這種情況:

    “同一協議族中存在多個數據傳輸方式相同的協議”(傳輸方式相同,但協議不同)

int tcp_socket = socket(PF_INET, SOCK_STREAM,IPPROTO_TCP);
int udp_socket = socket(PF_INET, SOCK_DGRAM,IPPROTO_UDP);



 


發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5155
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章