1. 程式人生 > >淺談TCP協議的埠(port)

淺談TCP協議的埠(port)

一:如何檢視埠

1.檢視所有的端口占用情況:
   在windows命令列視窗下執行: C:\>netstat -ano

2.檢視指定埠的佔用情況
 C:\>netstat -aon|findstr "9050"

3.也可以使用其他第三方工具,例如:

二:如何理解TCP協議與埠

    計算機"埠"是英文port的譯義,可以認為是計算機與外界通訊交流的出口。其中硬體領域的埠又稱介面,如:USB埠、串列埠等。軟體領域的埠一般指網路中面向連線服務和無連線服務的通訊協議埠,是一種抽象的軟體結構,包括一些資料結構和I/O(基本輸入輸出)緩衝區。

    我們這裡所說的埠,不是計算機硬體的I/O埠,而是軟體形式上的概念.工具提供服務型別的不同,埠分為兩種,一種是TCP埠,一種是UDP埠。計算機之間相互通訊的時候,分為兩種方式:一種是傳送資訊以後,可以確認資訊是否到達,也就是有應答的方式,這種方式大多采用TCP協議;一種是傳送以後就不管了,不去確認資訊是否到達,這種方式大多采用UDP協議。對應這兩種協議的服務提供的埠,也就分為TCP埠和UDP埠。

    那麼TCP/IP協議中的埠指的是什麼呢?如果把IP地址比作一間房子 ,埠就是出入這間房子的門。真正的房子只有幾個門,但是一個IP地址的埠可以有65536(即:256×256)個之多!埠是通過埠號來標記的,埠號只有整數,範圍是從0 到65535(256×256)。

    在Internet上,各主機間通過TCP/TP協議傳送和接收資料報,各個資料報根據其目的主機的ip地址來進行網際網路絡中的路由選擇。可見,把資料報順利的傳送到目的主機是沒有問題的。問題出在哪裡呢?我們知道大多數作業系統都支援多程式(程序)同時執行,那麼目的主機應該把接收到的資料報傳送給眾多同時執行的程序中的哪一個呢?顯然這個問題有待解決,埠機制便由此被引入進來。

    本地作業系統會給那些有需求的程序分配協議埠(protocalport,即我們常說的埠),每個協議埠由一個正整數標識,如:80,139,445,等等。當目的主機接收到資料報後,將根據報文首部的目的埠號,把資料傳送到相應埠,而與此埠相對應的那個程序將會領取資料並等待下一組資料的到來。說到這裡,埠的概念似乎仍然抽象,那麼繼續跟我來,別走開。

    埠其實就是隊,作業系統為各個程序分配了不同的隊,資料報按照目的埠被推入相應的隊中,等待被程序取用,在極特殊的情況下,這個隊也是有可能溢位的,不過作業系統允許各程序指定和調整自己的隊的大小。不光接受資料報的程序需要開啟它自己的埠,傳送資料報的程序也需要開啟埠,這樣,資料報中將會標識有源埠,以便接受方能順利的回傳資料報到這個埠。 每一個 TCP 聯機都必須由一端(通常為 client )發起請求這個port 通常是隨機選擇大於 1024 以上的 port 號來進行!其 TCP 封包會將(且只將) SYN 旗標設定起來!這是整個聯機的第一個封包;如果另一端(通常為 Server ) 接受這個請求的話(當然囉,特殊的服務需要以特殊的 port 來進行,例如 FTP 的 port 21 ),則會向請求端送回整個聯機的第二個封包!其上除了 SYN 旗標之外同時還將 ACK 旗標也設定起來,並同時時在本機端建立資源以待聯機之需;然後,請求端獲得服務端第一個響應封包之後,必須再響應對方一個確認封包,此時封包只帶 ACK 旗標(事實上,後繼聯機中的所有封包都必須帶有 ACK 旗標);只有當服務端收到請求端的確認( ACK )封包(也就是整個聯機的第三個封包)之後,兩端的聯機才能正式建立。這就是所謂的 TCP 聯機的'三段式交握(Three-Way Handshake )'的原理。

    經過三向交握之後,你的 client 端的 port 通常是高於 1024 的隨機取得的 port 至於主機端則視當時的服務是開啟哪一個 port 而定,例如 WWW 選擇 80 而 FTP 則以 21 為正常的聯機通道!