1. 部署環(huán)境
我們首先啟動一個Tomcat進程,Tomcat會占用8080
端口乍桂。
2. 查詢端口
Windows 下使用netstat -ano
命令查詢端口占用情況,下面的示例中可以看到效床,當(dāng)前主機啟動了MySQL服務(wù)睹酌,進程號為4732,監(jiān)聽3306端口剩檀;還啟動了Tomcat服務(wù)憋沿,進程號為7092,監(jiān)聽8080端口沪猴。
> netstat -ano
協(xié)議 本地地址 外部地址 狀態(tài) PID
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4732 # MySQL
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092 # IPv4 Tomcat
TCP [::]:8080 [::]:0 LISTENING 7092 # IPv6 Tomcat
UDP 0.0.0.0:53 *:* 2696 # DNS服務(wù)
netstat
:顯示協(xié)議統(tǒng)計信息和當(dāng)前 TCP/IP 網(wǎng)絡(luò)連接辐啄。
-
-a
顯示所有連接的端口和監(jiān)聽端口。 -
-n
以數(shù)字形式顯示地址和端口號运嗜。 -
-o
顯示擁有的與每個連接關(guān)聯(lián)的進程 ID壶辜。 - 輸出結(jié)果各列分別是1. 協(xié)議名稱TCP/UDP,2.本地地址與端口担租, 3.外部地址與端口砸民,4.連接狀態(tài),通常為LISTENING奋救,ESTABLISHED岭参,TIME_WAIT, FIN_WAIT_2等狀態(tài)尝艘,4. 進程ID
上面的查詢省略了其他不重要的連接演侯,我們也可以使用命令netstat -ano | findstr "8080"
來查詢指定端口的占用情況。
> netstat -ano | findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092
TCP [::]:8080 [::]:0 LISTENING 7092
然后根據(jù)查詢到的進程號7092
利耍,使用命令tasklist | findstr "7092"
去任務(wù)列表中查詢對應(yīng)的進程信息蚌本,當(dāng)然也可以直接打開任務(wù)管理器進行查詢盔粹。
> tasklist | findstr "7092"
映像名稱 PID 會話名 會話# 內(nèi)存使用
java.exe 7092 Console 1 305,928 K
從查詢結(jié)果可知,是一個進程號為7092
的Java程序占用了8080
端口程癌,可以使用命令taskkill -T -F -PID 7092
終止該程序舷嗡。當(dāng)然也可以在任務(wù)管理器手動終止該進程。
> taskkill -T -F -PID 7092
成功: 已終止 PID 8564 (屬于 PID 7092 子進程)的進程嵌莉。
成功: 已終止 PID 7092 (屬于 PID 13676 子進程)的進程进萄。
Linux
Linux 查詢端口占用使用 lsof
和netstat
命令,終止進程使用kill -9 PID
命令锐峭。
# lsof -i:8000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nodejs 26993 root 10u IPv4 37999514 0t0 TCP *:8000 (LISTEN)
# netstat -anp | grep 8080
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1752061/mysqld
Linux 查看端口占用情況 | 菜鳥教程 (runoob.com)
3. TCP連接信息
- 我們使用瀏覽器訪問
http://localhost:8080/
中鼠,然后查看端口占用如下所示。
-
第 1 個TCP連接沿癞,表示Tomcat進程7092監(jiān)聽
8080
端口援雇,連接狀態(tài)為LISTENING
。0.0.0.0
表示當(dāng)前主機椎扬,指的是本機上的所有IPV4地址惫搏,如果一個主機有兩個IP地址,192.168.1.103
和10.1.2.1
蚕涤,并且該主機上的一個服務(wù)監(jiān)聽的地址是0.0.0.0
筐赔,那么通過兩個IP地址都能夠訪問該服務(wù)。 -
第 2 個TCP連接揖铜,表示Tomcat進程7092監(jiān)聽
8080
端口茴丰,連接狀態(tài)為LISTENING
。[::]
表示當(dāng)前主機天吓,是IPV6地址[0000:0000:0000:0000:0000:0000:0000:0000]
的縮寫贿肩。 -
第 3-5 個TCP連接,表示瀏覽器進程15948通過
2126
端口失仁,與地址[::1]:8080
建立了TCP連接尸曼,連接狀態(tài)為ESTABLISHED
即連接已建立。通過任務(wù)管理器可以知道15948正是我們訪問Tomcat的瀏覽器進程萄焦。
[::1]
是環(huán)回地址控轿,用于同一臺設(shè)備中不同進程之間的通信,可以在host文件中看到拂封,locahost
就是IPV6地址::1
的別名茬射。瀏覽器第一次訪問時,為了避免建立TCP連接失敗冒签,會一次性發(fā)送三個TCP連接請求在抛,因此我們可以看到瀏覽器進程15948通過三個不同端口與地址
[::1]:8080
即Tomcat服務(wù)建立了TCP連接。 第 6-8 個TCP連接萧恕,表示Tomcat進程7092通過
8080
端口與地址[::1]:2126
建立了TCP連接刚梭,連接狀態(tài)為ESTABLISHED
即連接已建立肠阱。
> netstat -ano | findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092
TCP [::]:8080 [::]:0 LISTENING 7092
TCP [::1]:2126 [::1]:8080 ESTABLISHED 15948
TCP [::1]:2127 [::1]:8080 ESTABLISHED 15948
TCP [::1]:2132 [::1]:8080 ESTABLISHED 15948
TCP [::1]:8080 [::1]:2126 ESTABLISHED 7092
TCP [::1]:8080 [::1]:2127 ESTABLISHED 7092
TCP [::1]:8080 [::1]:2132 ESTABLISHED 7092
- 我們再使用瀏覽器訪問
http://127.0.0.1:8080/
,然后查看端口占用如下所示朴读。
第 2-3 個TCP連接屹徘,表示瀏覽器進程8176通過
2927
端口,與地址127.0.0.1:8080
建立了TCP連接衅金,連接狀態(tài)為ESTABLISHED
即連接已建立噪伊。第 4-5 個TCP連接,表示Tomcat進程7092通過
8080
端口與地址127.0.0.1:2927
建立了TCP連接氮唯,連接狀態(tài)為ESTABLISHED
即連接已建立鉴吹。通過以上連接可以看出,如果使用
127.0.0.1
惩琉,則建立TCP連接的是IPV4地址127.0.0.1
豆励,而不是localhost
代表的默認IPV6地址[::1]
> netstat -ano | findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092
TCP 127.0.0.1:2927 127.0.0.1:8080 ESTABLISHED 8176
TCP 127.0.0.1:2928 127.0.0.1:8080 ESTABLISHED 8176
TCP 127.0.0.1:8080 127.0.0.1:2927 ESTABLISHED 7092
TCP 127.0.0.1:8080 127.0.0.1:2928 ESTABLISHED 7092
TCP [::]:8080 [::]:0 LISTENING 7092
- 我們再使用瀏覽器訪問
http://127.11.22.33:8080/
,然后查看端口占用如下所示瞒渠。
> netstat -ano | findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092
TCP 127.0.0.1:3072 127.11.22.33:8080 ESTABLISHED 8176
TCP 127.11.22.33:8080 127.0.0.1:3072 ESTABLISHED 7092
可以看到肆糕,TCP連接的地址變?yōu)榱?code>127.11.22.33:8080,這是因為地址 127.0.0.1
到 127.255.255.255
均為環(huán)回地址在孝。
環(huán)回地址:
用于主機向自身發(fā)送通信的特殊地址,用于同一臺設(shè)備中不同進程之間的通信淮摔。也就是說私沮,這些數(shù)據(jù)包不會通過外部網(wǎng)絡(luò)接口。
IPv4 的環(huán)回地址是保留地址之一 127.0.0.1和橙。盡管只使用 127.0.0.1 這一個地址仔燕,但均予以保留。此地址塊中的任何地址都將環(huán)回到本地主機中魔招。我們可以使用瀏覽器訪問http://127.1.2.3:8080/
晰搀,同樣可以訪問到Tomcat服務(wù)。
與 IPv4 一樣办斑,IPv6 也提供了特殊環(huán)回地址以供測試使用外恕,發(fā)送到此地址的數(shù)據(jù)報會環(huán)回到發(fā)送設(shè)備。不過乡翅,IPv6 中環(huán)回地址只有一個鳞疲,為 0:0:0:0:0:0:0:1,一般用零的壓縮形式表示為[::1]
蠕蚜。
- 我們再使用手機瀏覽器尚洽,訪問在同一局域網(wǎng)內(nèi)的Tomcat進程,
http://192.168.1.103:8080/
靶累,然后查看端口占用如下所示腺毫。
> netstat -ano|findstr "8080"
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 7092
TCP 192.168.1.103:8080 192.168.1.101:38513 ESTABLISHED 7092
TCP 192.168.1.103:8080 192.168.1.101:38515 ESTABLISHED 7092
TCP 192.168.1.103:8080 192.168.1.101:38517 ESTABLISHED 7092
TCP [::]:8080 [::]:0 LISTENING 7092
- 第 2-4 個TCP連接癣疟,表示Tomcat進程7092通過
8080
端口與外部地址192.168.1.101:38513
建立了TCP連接,連接狀態(tài)為ESTABLISHED
即連接已建立潮酒。
4. TCP 連接狀態(tài)
這個詳見TCP三次握手和四次揮手睛挚。
- LISTENING 監(jiān)聽狀態(tài)
常見
- ESTABLISHED 連接已建立
常見
- SYN-SENT 客戶端TCP建立連接請求已發(fā)送,等待服務(wù)端響應(yīng)澈灼。
- SYN-REVD 服務(wù)端接收到客戶端的TCP建立連接請求并響應(yīng)竞川,等待客戶端確認。
- FIN-WAIT-1 客戶端TCP斷開連接請求已發(fā)送叁熔,等待服務(wù)端響應(yīng)委乌。
- CLOSE-WAIT 服務(wù)端接收到客戶端的TCP斷開連接請求并響應(yīng),進入等待狀態(tài)荣回,等待數(shù)據(jù)傳輸完成遭贸。
- FIN-WAIT-2 客戶端等待服務(wù)端的TCP斷開請求。
常見
- LAST-ACK 服務(wù)端TCP斷開連接請求已發(fā)送心软,等待客戶端響應(yīng)壕吹。
- TIME-WAIT 客戶端接收到服務(wù)端的TCP斷開連接請求并響應(yīng),等待一段時間進入關(guān)閉狀態(tài)删铃。
常見
- CLOSE 連接關(guān)閉