連接埠與串連是網路中兩個非常基礎的概念,本篇博文將介紹相關的一些基礎知識。
1.連接埠
我們在學習網路技術時經常會提到80連接埠、21連接埠等,這些連接埠到底指的是什麼呢?要注意,它們可不是像路由器或交換器上的那些物理介面,而是一些純粹的邏輯介面,也就是說,它們都是作業系統裡面的概念。
連接埠其實就是應用程式層的程式與傳輸層的TCP或UDP協議之間聯絡的通道。
根據TCP/IP模型,所有的應用程式層程式所產生的資料,都要向下交給傳輸層去繼續處理。傳輸層的協議只有兩個:可靠的TCP和不可靠的UDP。而應用程式層的協議可是多種多樣,如負責網頁瀏覽的http、負責檔案傳輸的ftp、負責郵件發送和接收的smtp、pop3等。
我們的作業系統又允許同時運行多個程式,這就產生了一個問題:傳輸層的協議如何來區分它所接收到的資料到底是由應用程式層的哪個協議產生的呢?所以就必須得提供一種機制以使傳輸層協議能夠區分開不同的應用程式層程式。這個機制就是連接埠。
每個連接埠都對應著一個應用程式層的程式,當一個應用程式要與遠程主機上的應用程式通訊時,傳輸層協議就為該應用程式分配一個連接埠,不同的應用程式有著不同的連接埠,以使來往的資料互不干擾。
650) this.width=650;" title="1.jpg" alt="152340432.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534I193-0.jpg" />
每個連接埠都有一個唯一的編號,在TCP/IP協議中是用一個16位的位元來為連接埠編號,所以連接埠號碼的取值範圍為0~65535。這其中0連接埠未用,為了合理地分配使用連接埠,對它們進行了以下分類:
另外根據所使用的傳輸層協議不同,連接埠又可以分為TCP連接埠和UDP連接埠兩種類型。所以對連接埠的準確描述應該是:傳輸層協議+連接埠號碼。如HTTP預設使用TCP的80連接埠,FTP預設使用TCP的21連接埠,SMTP預設使用TCP的25連接埠,POP3預設使用TCP的110連接埠,HTTPS預設使用TCP的443連接埠,DNS使用UDP的53連接埠,遠端桌面通訊協定RDP)預設使用TCP的3389連接埠,telnet使用TCP的23連接埠,Windows訪問共用資源使用TCP的445連接埠等。對於這些常見的固定連接埠我們應該熟記。
650) this.width=650;" title="1.jpg" alt="152534743.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534H416-1.jpg" />
2.串連
當我們在電腦上開啟瀏覽器訪問一個網站比如百度)時,這就要用到http協議,剛才提到http使用的是tcp的80連接埠,那麼是否就是要在我們的電腦用戶端)和百度伺服器伺服器端)都開放TCP80連接埠,然後通過它來傳送資料呢?
其實不然,所謂的固定連接埠,主要是在伺服器端使用,即百度伺服器使用的是TCP80連接埠,而我們用戶端使用的則是隨機連接埠。原因很簡單,我們開啟瀏覽器後,很可能要訪問很多個不同的網站,如果用戶端只使用一個TCP80連接埠,那麼如何來區分這些不同的網站呢?
所以實際情況是:所有的網站伺服器端都開放TCP80連接埠,而我們用戶端每訪問一個網站,就會開放一個隨機連接埠去與它們的TCP80連接埠進行串連。這樣在用戶端就通過不同的連接埠號碼將這些網站區分開了。
用戶端和伺服器端之間的通訊,資料必須要通過各自的連接埠發送和接收。因此就可以把它們之間的通訊看做在兩個連接埠之間建立起來的邏輯通道上進行資料交換,這個邏輯通道就稱做“串連”。
650) this.width=650;" title="1.jpg" alt="152647344.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534J263-2.jpg" />
比如中的ClientA就通過TCP1234連接埠與Server的TCP80連接埠之間建立了一個串連;ClientB通過TCP1234連接埠與Server的TCP21連接埠之間建立了一個串連。
對於伺服器來說,只要是發往自己TCP80連接埠的資料,就交給Web服務去處理;只要是發往自己TCP21連接埠的資料,就交給FTP服務去處理。
串連的建立有兩種模式:主動串連和被動串連。主動串連是指當連接埠開啟之後,進程通過該連接埠主動發出串連請求,進而建立的串連;被動串連則是當連接埠開啟之後,進程在該連接埠等待別的電腦發來的串連請求,最終所建立的串連。
在用戶端/伺服器模式的網路架構下,串連的建立一般都是由用戶端申請一個動態連接埠發起主動串連,而伺服器端則要一直開放相應的固定連接埠,然後等待與用戶端建立被動串連。
3.查看連接埠與串連
如何查看電腦中開放的連接埠或已經建立好的串連呢?最簡單易行的方法是利用系統中內建的netstat命令。netstat命令的用法比較多,這裡主要用到兩個參數:-a和-n,而且這兩個參數通常都是結合在一起使用的:“netstat–an”。
-a參數的作用是顯示所有活動的TCP串連以及電腦偵聽的TCP和UDP連接埠,-n參數的作用是以數位形式顯示地址和連接埠也就是顯示IP地址,否則是顯示電腦的名字)。
比如,我們先在瀏覽器中開啟百度的網頁,然後執行“pingwww.baidu.com”命令解析出百度的IP地址61.135.169.105,接下來執行“netstat-an”命令,從中找到我們與百度之間所建立的串連。
650) this.width=650;" title="2.jpg" alt="161058365.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534G241-3.jpg" />
中標記出來的部分,10.12.13.160是我原生IP,它後面的連接埠號碼50977就是我這台用戶端開放的隨機連接埠;61.135.169.105:80,代表百度伺服器及它的TCP80連接埠,最後面的ESTABLISHED表示這是一個已經建立好的串連。
通過“netstat-an”命令,不僅可以查看串連,而且還可以查看我們的電腦開放了哪些連接埠
650) this.width=650;" title="2.jpg" alt="161645332.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534K262-4.jpg" />
中最後的狀態為“LISTENING"監聽)的記錄中所包含的連接埠號碼,就是我們目前所開放的連接埠。
這些連接埠隨時在等待別的電腦與它建立串連,也就是說它們在隨時等待為其它電腦提供服務,比如其中的TCP445連接埠就是用來提供檔案分享權限設定服務的。
在”netstat-an“命令的執行結果中,”本地地址“部分可能會有三種不同的表現形式:本機IP、0.0.0.0和127.0.0.1。
本機IP後面的連接埠一般都是由使用者所啟動並執行應用程式開啟的,比如開啟了瀏覽器,就會開啟了一個1024之後的隨機連接埠。
0.0.0.0表示的是本機預設所開放的連接埠,這些連接埠一般都是由一些系統服務預設開啟的,不過也可以關閉,比如135連接埠就是由WMI“MicrosoftWindows管理規範”)服務開啟的,可以方便使用者對電腦進行遠端管理。這些預設開放的連接埠它們所對應的外部地址一般也都是0.0.0.0,即表示它們對所有的外部機器開放,它們的狀態一般為Listening,處於監聽狀態。
127.0.0.1後面的連接埠通常都是由一些需要調用本地服務的程式開啟的,後面的外部地址一般也都為127.0.0.1。
“狀態”部分,最常見的兩種狀態為:”Listening“監聽)、”Established“已建立)。除此之外,還有很多其它不同的狀態,這些狀態通常都與建立TCP串連的三向交握過程密切相關。
4.連接埠掃描
在網路入侵或網路安全檢測的過程中,連接埠掃描都是比較重要的一個步驟。通過連接埠掃描,一方面可以瞭解目標電腦開放了哪些連接埠,每個連接埠都對應了一種服務,因而可以根據相應的服務有針對性的展開入侵;另一方面,通過查看自身電腦開放了哪些連接埠,也可以發現安全隱患。
連接埠掃描類的工具特別多,一些工具比較簡單,如L-ScanPort,設定好要掃描的IP位址範圍以及連接埠列表,就可以對指定網段內的電腦進行掃描。
650) this.width=650;" title="1.jpg" alt="162844430.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534M921-5.jpg" />
還有一類掃描軟體的功能比較強大,除了能夠掃描開放連接埠之外,一般還兼具弱口令猜解的功能,如X-Scan。
在X-Scan的掃描參數中可以設定掃描的IP位址範圍以及掃描模組。
650) this.width=650;" title="1.jpg" alt="162928549.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534HO3-6.jpg" />
如果目標電腦存在漏洞,則會直接得到掃描結果。
650) this.width=650;" title="1.jpg" alt="163001455.jpg" src="http://www.bkjia.com/uploads/allimg/131227/23534J2A-7.jpg" />
本文出自 “一壺濁酒” 部落格,轉載請與作者聯絡!