Linux 的端口是一個邏輯概念,其由 TCP/IP 協議定義,是一個 0–65535 之間的數字,可以分爲常用的“固定”端口和通用端口兩個部分。
“固定”端口是指一些常用的軟件或者 TCP/IP 協議中確定和公佈的,通常來說不會被其他程序使用。
Linux 中的常見“固定”端口和對應的協議
協議 | 端口號 |
---|---|
FTP | 21 |
TELNET | 23 |
TFTP | 69 |
SNMP | 161 |
SSH | 23 |
HTTP | 80 |
SMTP | 25 |
DNS | 53 |
套接字(Sockets),即網絡進程的進程 ID ,和普通的進程 ID 不同,網絡進程的ID 是由運行這個進程的計算機的 IP 地址以及這個進程使用的端口(Port)組成的,在同一臺計算機上,一個端口只能分配給一個進程,這樣就可以確定網絡中計算機上的一個進程。
套接字的組成
可以使用“netstat-all”命令來查看當前系統中網絡應用進程的套接字和端口。
Linux 的套接字包括了BSD套接字和INET套接字兩部分。
BSD套接字接口是Linux套接字的基礎,套接字可以看成一種特殊的管道, BSD套接字通常包括以下幾種類型。
- Steam(數據流):該套接字提供了兩個方向的序列數據流,這些數據流保證在傳輸過程中數據不丟失、不破壞或不重複,數據流套接字由 Internet(INET)地址族的 TCP 協議所支持。
- Datagram(數據報):該套接字也提供兩個方向上的數據傳送,但不像數據流套接字,它們不提供消息到達的保證。即使到達也不保證這些數據報按照一定的順序到達(或丟失、重複)。這種類型的套接字由 Internet 地址族的 UDP 協議所支持。
- Raw(原始套接字):該套接字允許進程直接訪問底層協議。例如,可以爲以太網設備打開一個 Raw Socket,以使用原始 IP 數據進行傳輸。
- Reliable Delivered Message(可靠傳遞消息):該套接字非常類似於數據報套接字,但是可保證數據的可靠傳輸。
- Sequenced Packets(順序數據報):這個套接字類似於數據流套接字,但數據包的大小固定。
- Packet(包):這不是標準的 BSD 套接字類型,它是一個 Linux 特定的擴展,允許進程在設備層直接訪問 Packet。
在 Linux 網絡編程中最常使用的是支持 TCP 協議的數據流套接字、支持 UDP 協議的數據報套接字和可以直接對底層協議 IP 進行訪問的原始格式套接字。