端口
Linux 的端口是一個邏輯概念,是傳輸層協議的內容,其由 TCP/IP 協議定義,是一個 0–65535 之間的一個2字節16位的整數。
端口號(port)用來標識一個進程, 告訴操作系統當前的數據要交給哪一個進程來處理,IP地址 + 端口號能夠標識網絡上的某一臺主機的某一個進程;一個進程可以綁定多個端口號,但是一個端口號不能被多個進程綁定,一個端口號只能被一個進程佔用。
傳輸層協議(TCP和UDP)的數據段中有兩個端口號, 分別叫做源端口號和目的端口號,就是在描述 “數據是誰發的, 要發給誰”。
端口號範圍劃分
- 0 - 1023:“固定”端口,指一些常用的軟件或者 TCP/IP 協議中確定和公佈的,通常來說不會被其他程序使用。
- 1024 - 65535:操作系統動態分配的端口號, 客戶端程序的端口號就是由操作系統從這個範圍分配。
Linux 中的常見“固定”端口和對應的協議
協議 | 端口號 |
---|---|
FTP | 21 |
TELNET | 23 |
TFTP | 69 |
SNMP | 161 |
SSH | 22 |
HTTP | 80 |
SMTP | 25 |
DNS | 53 |
HTTPS | 443 |
可用如下命令查看“固定”端口
cat /etc/services
netstat
netstat 是一個用來查看網絡狀態的重要工具.
語法:netstat [選項]
功能:查看網絡狀態
常用選項:
- n 拒絕顯示別名,能顯示數字的全部轉化成數字
- l 僅列出有在 Listen (監聽) 的服務狀態
- p 顯示建立相關鏈接的程序名
- t (tcp)僅顯示tcp相關選項
- u (udp)僅顯示udp相關選項
- a (all)顯示所有選項,默認不顯示LISTEN相關選項
pidof
查看服務器的進程 id 。
語法:pidof [進程名]
功能:通過進程名, 查看進程id
套接字
套接字(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 進行訪問的原始格式套接字。