端口就好一個房子的門,是出入這間房子的必經(jīng)之路。
如果一個程序需要收發(fā)網(wǎng)絡(luò)數(shù)據(jù),那么就需要有這樣的端口
在linux系統(tǒng)中,端口可以有65536(2的16次方)個之多!
既然有這么多,操作系統(tǒng)為了統(tǒng)一管理,所以進(jìn)行了編號,這就是端口號
端口是通過端口號來標(biāo)記的,端口號只有整數(shù),范圍是從0到65535
注意:端口數(shù)不一樣的*nix系統(tǒng)不一樣,還可以手動修改
端口號不是隨意使用的,而是按照一定的規(guī)定進(jìn)行分配。
端口的分類標(biāo)準(zhǔn)有好幾種,我們這里不做詳細(xì)講解,只介紹一下知名端口和動態(tài)端口
3.1 知名端口(Well Known Ports)
知名端口是眾所周知的端口號,范圍從0到1023
80端口分配給HTTP服務(wù) 21端口分配給FTP服務(wù)
可以理解為,一些常用的功能使用的號碼是估計的,好比 電話號碼110、10086、10010一樣
一般情況下,如果一個程序需要使用知名端口的需要有root權(quán)限
3.2 動態(tài)端口(Dynamic Ports)
動態(tài)端口的范圍是從1024到65535
之所以稱為動態(tài)端口,是因為它一般不固定分配某種服務(wù),而是動態(tài)分配。
動態(tài)分配是指當(dāng)一個系統(tǒng)程序或應(yīng)用程序程序需要網(wǎng)絡(luò)通信時,它向主機(jī)申請一個端口,主機(jī)從可用的端口號中分配一個供它使用。
當(dāng)這個程序關(guān)閉時,同時也就釋放了所占用的端口號
3.3 怎樣查看端口 ?
用“netstat -an”查看端口狀態(tài)
lsof -i [tcp/udp]:2425
端口有什么用呢 ? 我們知道,一臺擁有IP地址的主機(jī)可以提供許多服務(wù),比如HTTP(萬維網(wǎng)服務(wù))、FTP(文件傳輸)、SMTP(電子郵件)等,這些服務(wù)完全可以通過1個IP地址來實現(xiàn)。那么,主機(jī)是怎樣區(qū)分不同的網(wǎng)絡(luò)服務(wù)呢?顯然不能只靠IP地址,因為IP地址與網(wǎng)絡(luò)服務(wù)的關(guān)系是一對多的關(guān)系。實際上是通過“IP地址+端口號”來區(qū)分不同的服務(wù)的。 需要注意的是,端口并不是一一對應(yīng)的。比如你的電腦作為客戶機(jī)訪問一臺WWW服務(wù)器時,WWW服務(wù)器使用“80”端口與你的電腦通信,但你的電腦則可能使用“3457”這樣的端口。
口是什么?
"端口"是英文port的意譯,可以認(rèn)為是設(shè)備與外界通訊交流的出口。端口可分為虛擬端口和物理端口,其中虛擬端口指計算機(jī)內(nèi)部或交換機(jī)路由器內(nèi)的端口,不可見。
端口有什么作用?
端口的作用是對TCP/IP體系的應(yīng)用進(jìn)程進(jìn)行統(tǒng)一的標(biāo)志,使運行不同操作系統(tǒng)的計算機(jī)的應(yīng)用進(jìn)程能夠互相通信。熟知端口數(shù)值一般為0~1023。標(biāo)記常規(guī)的服務(wù)進(jìn)程;登記端口號,數(shù)值為1024~49151,標(biāo)記沒有熟知端口的非常規(guī)的服務(wù)進(jìn)程。
端口必須分為兩大類,一類是服務(wù)器使用的另一端是客戶端使用的;在服務(wù)器使用的端口中,必須為熟知的應(yīng)用分配熟知的端口號,必須為沒有熟知端口號的應(yīng)用登記端口號以免重復(fù)。因此需劃分為三種。
查看自己電腦的端口號,可以采取以下方法:
一、使用命令提示符(CMD)查看:
打開命令提示符。在鍵盤上同時按下Win+R快捷鍵打開運行窗口,輸入“cmd”并按下回車鍵。
輸入命令查看端口。在命令提示符中輸入“netstat -ano”或者"netstat -na"等命令,并按下回車鍵,即可查看電腦端口號。
二、使用任務(wù)管理器查看:
打開任務(wù)管理器。按Ctrl + Shift + Esc打開任務(wù)管理器。
查找端口號。切換到“詳細(xì)信息”選項卡,查找想要了解的網(wǎng)絡(luò)服務(wù)對應(yīng)的進(jìn)程,或者切換到“性能”選項卡,點擊“打開資源監(jiān)視器”,再切換到“網(wǎng)絡(luò)”選項卡,查看“監(jiān)聽端口”部分。
使用網(wǎng)絡(luò)監(jiān)視工具查看:
可以使用如Wireshark、TcpView等網(wǎng)絡(luò)監(jiān)視工具,實時顯示當(dāng)前所有活動的網(wǎng)絡(luò)連接和監(jiān)聽的端口。
此外,在macOS中,還可以使用終端和lsof命令或者netstat命令查看端口號。
三、Mac查看自己電腦的端口號的方法如下:
在"關(guān)于本機(jī)"中查看:點擊屏幕左上角的蘋果圖標(biāo),選擇"關(guān)于本機(jī)",切換到"系統(tǒng)報告"選項卡中,點擊左側(cè)菜單欄中的"網(wǎng)絡(luò)",在右側(cè)的網(wǎng)絡(luò)連接列表中,選擇當(dāng)前連接的網(wǎng)絡(luò),點擊下方"端口"后面的"TCP",在TCP連接列表中即可查看當(dāng)前網(wǎng)絡(luò)連接的端口號。
使用終端命令查看:在終端中輸入命令"lsof -i tcp:端口號",其中"端口號"替換為你要查看的具體端口號,按下回車鍵即可查看該端口號被哪個進(jìn)程占用。如果要查看所有端口號及對應(yīng)進(jìn)程,可以輸入命令"netstat -tuln"。
一
在PC 系統(tǒng)的接口卡和主板上,裝有各種接口芯片。這些外設(shè)接口芯片的內(nèi)部有若干寄存器,CPU 將這些寄存器當(dāng)作端口來訪問。
圖一表示了一個實際的端口電路。從圖中我們可以看出以下幾點:
一:端口首先是一個硬件,是一塊具體的電路。
二:這個硬件是CPU和外部設(shè)備連接的橋梁。
三:這個接口電路通過地址線和控制線與CPU相連。
四:這個接口電路有若干寄存器,是用來和CPU交換信息的。因于這個硬件有地址線和CPU相連,因此CPU可以通過尋址的方式找到這些寄存器。
這些寄存器通常稱為端口。
匯編語言中,in和out指令,是端口的讀寫指令,分別用于從端口讀取數(shù)據(jù)和往端口寫入數(shù)據(jù)。
外設(shè)的輸入不直接送入內(nèi)存和CPU ,而是送入相關(guān)的接口芯片的端口中;
CPU 向外設(shè)的輸出也不是直接送入外設(shè),而是先送入端口中,再由相關(guān)的芯片送到外設(shè)。
比如:從端口60h讀出鍵盤的輸入
in al,60h
上面介紹的是對應(yīng)于具體硬件的端口概念,屬于物理(硬件)端口。我們記住:上述物理端口指的其實就是接口電路中的寄存器。計算機(jī)學(xué)科中除了物理端口外,還有邏輯上的端口。
除了物理端口外,還有:
在網(wǎng)絡(luò)技術(shù)中,端口(Port)有好幾種意思。集線器、交換機(jī)、路由器的端口指的是連接其他網(wǎng)絡(luò)設(shè)備的接口,如RJ-45端口、Serial端口等。我們 這里所指的端口不是指物理意義上的端口,而是特指TCP/IP協(xié)議中的端口,是邏輯意義上的端口。
緩沖區(qū)。
如果把IP地址比作一間房子 ,端口就是出入這間房子的門。真正的房子只有幾個門,但是一個IP地址的端口可以有65536(即:2^16)個之多!端口是通過端口號來標(biāo)記的,端口號只有整數(shù),范圍是從0 到65535(2^16-1)。
在Internet上,各主機(jī)間通過TCP/IP協(xié)議發(fā)送和接收數(shù)據(jù)包,各個數(shù)據(jù)包根據(jù)其目的主機(jī)的ip地址來進(jìn)行互聯(lián)網(wǎng)絡(luò)中的路由選擇,把數(shù)據(jù)包順利的傳送到目的主機(jī)。大多數(shù)操作系統(tǒng)都支持多程序(進(jìn)程)同時運行,那么目的主機(jī)應(yīng)該把接收到的數(shù)據(jù)包傳送給眾多同時運行的進(jìn)程中的哪一個呢?顯然這個問題有待解決,端口機(jī)制便由此被引入進(jìn)來。
本地操作系統(tǒng)會給那些有需求的進(jìn)程分配協(xié)議端口(即我們常說的端口),每個協(xié)議端口由一個正整數(shù)標(biāo)識,如:80,139,445,等等。當(dāng)目的主機(jī)接收到數(shù)據(jù)包后,將根據(jù)報文首部的目的端口號,把數(shù)據(jù)發(fā)送到相應(yīng)端口,而與此端口相對應(yīng)的那個進(jìn)程將會領(lǐng)取數(shù)據(jù)并等待下一組數(shù)據(jù)的到來。那么與此端口相對應(yīng)的那個進(jìn)程接收到數(shù)據(jù)包以后,將放到哪里呢?
端口其實就是隊,操作系統(tǒng)為各個進(jìn)程分配了不同的隊,數(shù)據(jù)包按照目的端口被推入相應(yīng)的隊中,等待被進(jìn)程取用,在極特殊的情況下,這個隊也是有可能溢出的,不過操作系統(tǒng)允許各進(jìn)程指定和調(diào)整自己的隊的大小。那么,隊又到底是什么呢?隊其實就對應(yīng)一塊內(nèi)存區(qū)域,是進(jìn)程用來存儲自己所接收到的數(shù)據(jù)包的。
不光接受數(shù)據(jù)包的進(jìn)程需要開啟它自己的端口,發(fā)送數(shù)據(jù)包的進(jìn)程也需要開啟端口,這樣,數(shù)據(jù)包中將會標(biāo)識有源端口,以便接受方能順利地回傳數(shù)據(jù)包到這個端口。那么,如何理解開啟或者關(guān)閉端口呢?我們可以理解為有一個邏輯變量A,A=0時代表關(guān)閉端口,A=1時代表開啟端口。
每種網(wǎng)絡(luò)的服務(wù)功能都不相同,因此有必要將不同的封包送給不同的服務(wù)來處理,當(dāng)你的主機(jī)同時開啟了FTP與WWW服務(wù)時,別人送來的資料封包,就會依照 TCP 上面的 port 號碼來給 FTP 這個服務(wù)或者是 WWW 這個服務(wù)來處理。
端口按照號碼分類:
· 第一類
公認(rèn)端口:從0到1023,它們緊密綁定于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議,例如:80端口實際上總是HTTP通訊。
注冊端口:從1024到49151。它們松散地綁定于一些服務(wù)。也就是說有許多服務(wù)綁定于這些端口,這些端口同樣用于許多其它目的。例如:許多系統(tǒng)處理動態(tài)端口從1024左右開始。
動態(tài)和/或私有端口:從49152到65535。理論上,不應(yīng)為服務(wù)分配這些端口。實際上,機(jī)器通常從1024起分配動態(tài)端口。但也有例外:SUN的RPC端口從32768開始。
一些端口常常會被黑客利用,還會被一些木馬病毒利用,對計算機(jī)系統(tǒng)進(jìn)行攻擊。
如果攻擊者使用軟件掃描目標(biāo)計算機(jī),得到目標(biāo)計算機(jī)打開的端口,也就了解了目標(biāo)計算機(jī)提供了哪些服務(wù)。我們都知道,提供服務(wù)就一定有服務(wù)軟件的漏洞,根據(jù)這些,攻擊者可以達(dá)到對目標(biāo)計算機(jī)的初步了解。如果計算機(jī)的端口打開太多,而管理者不知道,那么這種情況是很危險的。因為端口如果打開了,就允許本地機(jī)的CPU一直可以通過這個端口與外設(shè)(網(wǎng)絡(luò))交換信息,如果外部有惡意程序通過這個端口不間斷地和本地機(jī)進(jìn)行信息交換,那就必然大量占用本地機(jī)的CPU時間以及內(nèi)存資源,從而導(dǎo)致本地機(jī)的功能下降甚至崩潰。
有名的DDoS攻擊手段就是通過使網(wǎng)絡(luò)過載來干擾甚至阻斷正常的網(wǎng)絡(luò)通訊。通過向服務(wù)器提交大量請求,使服務(wù)器超負(fù)荷。阻斷某一用戶訪問服務(wù)器,阻斷某服務(wù)與特定系統(tǒng)或個人的通訊。
(1)8080端口
服務(wù):HTTP
說明:為http服務(wù)的備用端口
(2)端口:21
服務(wù):FTP
說明:FTP服務(wù)器所開放的端口,用于上傳、下載。
(3)端口:22
服務(wù):SSH;
(4)端口:23
服務(wù):Telnet;
(5)端口:25
服務(wù):SMTP;
說明:SMTP服務(wù)器所開放的端口,用于發(fā)送郵件。
(6)端口:80
服務(wù):HTTP
說明:用于網(wǎng)頁瀏覽。
總之,無論物理端口還是邏輯端口,其最終都和物理上的寄存器或者內(nèi)存相關(guān)聯(lián)。
端口可以打開,也可以關(guān)閉。
打開的端口有可能遭到網(wǎng)絡(luò)攻擊。