Linux的端口和套接字

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 進行訪問的原始格式套接字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章