套接字接口的種類
Linux 支持多種套接字種類,不同的套接字種類稱爲“地址族”,這是因爲每種套接字種類擁有自己的通訊尋址方法。Linux 所支持的套接字地址族見表12.3。
Linux將上述套接字地址族抽象爲統一的 BSD 套接字接口,應用程序關心的只是 BSD 套接字接口,而 BSD 套接字由各地址族專有的軟件支持。一般而言,BSD 套接字可支持多種套接字類型,不同的套接字類型提供的服務不同,Linux 所支持的部分 BSD 套接字類型見表 12.4,但表12.3中的套接字地址族並不一定全部支持表12.4中的這些套接字類型。
表12. 3 Linux 支持的套接字地址族
套接字地址族 |
描述 |
UNIX |
UNIX 域套接字 |
INET |
通過 TCP/IP 協議支持的 Internet地址族 |
AX25 |
Amater radio X25 |
APPLETALK |
Appletalk DDP |
IPX |
Novell IPX |
X25 |
X25 |
表12.4 Linux 所支持的 BSD 套接字類型
BSD 套接字類型 |
描述 |
流(stream) |
這種套接字提供了可靠的雙向順序數據流,可保證數據不會在傳輸過程中丟失、破壞或重複出現。流套接字通過 INET 地址族的TCP 協議實現。 |
數據報(datagram) |
這種套接字也提供雙向的數據傳輸,但是並不對數據的傳輸提供擔保,也就是說,數據可能會以錯誤的順序傳遞,甚至丟失或破壞。這種類型的套接字通過 INET 地址族的UDP 協議實現。 |
原始(raw) |
利用這種類型的套接字,進程可以直接訪問底層協議(因此稱爲原始)。例如,可在某個以太網設備上打開原始套接字,然後獲取原始的 IP 數據傳輸信息。 |
可靠發送的消息 |
和數據報套接字類似,但保證數據被正確傳輸到目的端。 |
順序數據包 |
和流套接字類似,但數據包大小是固定的。 |
數據包(packet) |
這並不是標準的 BSD 套接字類型,它是Linux 專有的 BSD 套接字擴展,可允許進程直接在設備級訪問數據包。 |