什麼是網絡套接字(Socket)?
Socket是網絡上兩個程序雙向通訊連接的端點。
對於一個Socket而言,它至少需要3個參數來指定:
1)通信的目的地址;
2)使用的傳輸層協議(如TCP、UDP);
3)使用的端口號。
Socket類型
套接字類型是指創建套接字的應用程序要使用的通信服務類型。linux系統支持多種套接字類型,最常用的有以下三種:
1)SOCK_STREAM:流式套接字,提供面向連接、可靠的數據傳輸服務,數據按字節流、按順序收發,保證在傳輸過程中無丟失、無冗餘。TCP協議支持該套接字。
2)SOCK_DGRAM:數據報套接字,提供面向無連接的服務,數據收發無序,不能保證數據的準確到達。UDP協議支持該套接字。
3)SOCK_RAW:原始套接字。允許對低於傳輸層的協議或物理網絡直接訪問,例如可以接收和發送ICMP報文。常用於檢測新的協議。
Socket網絡層次
這部分主要參考自《深入淺出Linux工具與編程》(餘國平著)。
下圖畫出了套接字位於網絡中的層次,它位於傳輸層以上、應用層以下。Socket編程正是通過一系列系統調用(Socket API)來完成應用層協議(如ftp、http)。
圖:套接字層次圖
套接字是對網絡中應用層進程之間的通信進行了抽象,提供了應用層進程利用網絡協議棧交換數據的機制。
Socket API
這裏的Socket API指的是Berkeley Sockets API