国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux端口及查詢方法詳解

2024-08-27 23:56:33
字體:
來源:轉載
供稿:網友
服務是給系統提供功能的,在系統中除了有系統服務,還有網絡服務。而每個網絡服務都有自己的端口,一般端口號都是固定的。那么,什么是端口呢?

我們知道,IP 地址是計算機在互聯網上的地址編號,每臺聯網的計算機都必須有自己的 IP 地址,而且必須是唯一的,這樣才能正常通信。也就是說,在互聯網上是通過 IP 地址來確定不同計算機的位置的。

大家可以把 IP 地址想象成家庭的"門牌號碼",不管你住的是大雜院、公寓樓還是別墅,都有自己的門牌號碼,而且門牌號碼是唯一的。

如果知道了一臺服務器的 IP 地址,我們就可以找到這臺服務器。但是這臺服務器上有可能搭建了多個網絡服務,比如 WWW 服務、FTP 服務、Mail 服務,那么我們到底需要服務器為我們提供哪個網絡服務呢?這時就要靠端口(Port)來區分了,因為每個網絡服務對應的端口都是固定的。

比如,WWW 服務對應的端口是 80,FTP 服務對應的端口是 20 和 21,Mail 服務對應的端口是 25 和 110。也就是說,IP 地址可以想象成"門牌號碼",而端口可以想象成"家庭成員",找到了 IP 地址只能找到你們家,只有找到了端口,寄信時才能找到真正的收件人。

為了統一整個互聯網的端口和網絡服務的對應關系,以便讓所有的主機都能使用相同的機制來請求或提供服務,同一個服務使用相同的端口,這就是協議。

計算機中的協議主要分為兩大類:
  • 面向連接的可靠的TCP協議(Transmission Control Protocol,傳輸控制協議);
  • 面向無連接的不可靠的UDP協議(User Datagram Protocol,用戶數據報協議);

這兩種協議都支持 216,也就是 65535 個端口。這么多端口怎么記憶呢?系統給我們提供了服務與端口的對應文件 /etc/services。 查看—下:

[root@localhost ~]#vi /etc/services
…省略部分輸出…
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp
fsp fspd
#FTP服務的端口
…省略部分輸出…
smtp 25/tcp mail
smtp 25/udp mail
#郵件發送信件的端口
…省略部分輸出…
http 80/tcp www www-http #WorldWideWeb HTTP
http 80/udp www www-http #HyperText Transfer Protocol
#WWW服務的端口
…省略部分輸出…
pop3 110/tcp pop-3
# POP version 3
pop3 110/udp pop-3
#郵件接收信件的端口
…省略部分輸出…

網絡服務的端口能夠修改嗎?當然是可以的,不過一旦修改了端口,那么客戶機在訪問服務器時很難知道服務器對應的端口是什么,也就不能正確地獲取服務了。所以,除非在實驗環境下,否則不要修改網絡服務對應的端口。

查詢系統中已經啟動的服務

既然每個網絡服務對應的端口是固定的,那么是否可以通過查詢服務器中開啟的端口,來判斷當前服務器開啟了哪些服務?

當然是可以的。雖然判斷服務器中開啟的服務還有其他方法(如通過ps命令),但是通過端口的方法查看最為準確。命令格式如下:

[root@localhost ~]# netstat 選項

選項:
  • -a:列出系統中所有網絡連接,包括已經連接的網絡服務、監聽的網絡服務和 Socket 套接字;
  • -t:列出 TCP 數據;
  • -u:列出 UDF 數據;
  • -l:列出正在監聽的網絡服務(不包含已經連接的網絡服務);
  • -n:用端口號來顯示而不用服務名;
  • -p:列出該服務的進程 ID (PID);

舉個例子:

[root@localhost ~]# netstat -tlunp
#列出系統中所有已經啟動的服務(已經監聽的端口),但不包含已經連接的網絡服務
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:53575 0.0.0.0:*
LISTEN
1200/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1181/rpcbind
tcp 0 0 0.0.0.0:22 O.O.O.O:* LISTEN 1405/sshd
tcp 0 0127.0.0.1:631 O.O.O.O:* LISTEN 1287/cupsd
tcp 0 0 127.0.0.1:25 O.O.O.O:* LISTEN 1481/master
tcp 0 0 :::57454 :::* LISTEN 1200/rpc.statd
tcp 0 0 :::111 :::* LISTEN 1181/rpcbind
tcp 0 0 :::22 :::* LISTEN 1405/sshd
tcp 0 0 ::1:631 :::* LISTEN 1287/cupsd
tcp 0 0 ::1:25 :::* LISTEN 1481/master
udp 0 0 0.0.0.0:58322 0.0.0.0:* 1276/avahi-daemon
udp 0 0 0.0.0.0:5353 O.O.O.O:* 1276/avahi-daemon
udp 0 0 0.0.0.0:111 O.O.O.O:* 1181/rpcbind
udp 0 0 0.0.0.0:631 O.O.O.O:* 1287/cupsd
udp 0 0 0.0.0.0:56459 0.0.0.0:* 1200/rpc.statd
udp 0 0 0.0.0.0:932 O.O.O.O:* 1181/rpcbind
udp 0 0 0.0.0.0:952 O.O.O.O:* 1200/rpc.statd
udp 0 0 :::111 :::* 1181/rpcbind
udp 0 0 :::47858 :::* 1200/rpc.statd
udp 0 0 :::932 :::* 1181/rpcbind

執行這條命令會看到服務器上所有已經開啟的端口,也就是說,通過這些端口就可以知道當前服務器上開啟了哪些服務。

解釋一下命令的執行結果:
  • Proto:數據包的協議。分為 TCP 和 UDP 數據包;
  • Recv-Q:表示收到的數據已經在本地接收緩沖,但是還沒有被進程取走的數據包數量;
  • Send-Q:對方沒有收到的數據包數量;或者沒有 Ack 回復的,還在本地緩沖區的數據包數量;
  • Local Address:本地 IP : 端口。通過端口可以知道本機開啟了哪些服務;
  • Foreign Address:遠程主機:端口。也就是遠程是哪個 IP、使用哪個端口連接到本機。由于這條命令只能查看監聽端口,所以沒有 IP 連接到到本機;
  • State:連接狀態。主要有已經建立連接(ESTABLISED)和監聽(LISTEN)兩種狀態,當前只能查看監聽狀態;
  • PID/Program name:進程 ID 和進程命令;

再舉個例子:

[root@localhost ~]# netstat -an
#查看所有的網絡連接,包括已連接的網絡服務、監聽的網絡服務和Socket套接字
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:53575 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 192.168.0.210:22 192.168.0.105:4868 ESTABLISHED
tcp 0 0 :::57454 :::* LISTEN
...省略部分輸出...
udp 0 0 :::932 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
#Socket套接字輸出,后面有具體介紹
Unix 2 [ ACC ] STREAM LISTENING 11712 /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 8450 @/com/ubuntu/upstart unix 7. [ ] DGRAM 8651 @/org/kernel/udev/udevd
unix 2 [ ACC ] STREAM LISTENING 11942 @/var/run/hald/dbus-b4QVLkivf1
...省略部分輸出...

執行"netstat -an"命令能査看更多的信息,在 Stated 中也看到了已經建立的連接(ESTABLISED)。這是 ssh 遠程管理命令產生的連接,ssh 對應的端口是 22。

而且我們還看到了 Socket 套接字。在服務器上,除網絡服務可以綁定端口,用端口來接收客戶端的請求數據外,系統中的網絡程序或我們自己開發的網絡程序也可以綁定端口,用端口來接收客戶端的請求數據。這些網絡程序就是通過 Socket 套接字來綁定端口的。也就是說,網絡服務或網絡程序要想在網絡中傳遞數據,必須利用 Socke 套接字綁定端口,并進行數據傳遞。

使用"netstat -an"命令查看到的這些 Socke 套接字雖然不是網絡服務,但是同樣會占用端口,并在網絡中傳遞數據。

解釋一下 Socket 套接字的輸出:
  • Proto:協議,一般是unix;
  • RefCnt:連接到此Socket的進程數量;
  • Flags:連接標識;
  • Type:Socket訪問類型;
  • State:狀態,LISTENING表示監聽,CONNECTED表示已經建立連接;
  • I-Node:程序文件的 i 節點號;
  • Path:Socke程序的路徑,或者相關數據的輸出路徑;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安图县| 翁牛特旗| 青田县| 巴楚县| 海口市| 九江市| 齐河县| 彭州市| 义乌市| 万盛区| 图木舒克市| 桃园市| 曲沃县| 喀什市| 哈巴河县| 临武县| 宜宾县| 平顶山市| 诸暨市| 宁津县| 隆回县| 安福县| 涿鹿县| 潼关县| 瑞金市| 横山县| 阿鲁科尔沁旗| 佛学| 上饶市| 平乐县| 新宾| 南投县| 炉霍县| 梅州市| 四会市| 新民市| 金塔县| 铁岭县| 营山县| 绥宁县| 株洲县|