应用程序端口分类
軟件領(lǐng)域的端口一般指網(wǎng)絡(luò)中面向連接服務(wù)和無連接服務(wù)的通信協(xié)議端口,是一種抽象的軟件結(jié)構(gòu),包括一些數(shù)據(jù)結(jié)構(gòu)和I/O(基本輸入輸出)緩沖區(qū)。
面向連接服務(wù)和無連接服務(wù)
可以先了解面向連接和無連接協(xié)議(Connection-OrientedandConnectionlessProtocols)面向連接服務(wù)的主要特點(diǎn)有:面向連接服務(wù)要經(jīng)過三個(gè)階段:數(shù)據(jù)傳數(shù)前,先建立連接,連接建立后再傳輸數(shù)據(jù),數(shù)據(jù)傳送完后,釋放連接。面向連接服務(wù),可確保數(shù)據(jù)傳送的次序和傳輸?shù)目煽啃?。無連接服務(wù)的特點(diǎn)是:無連接服務(wù)只有傳輸數(shù)據(jù)階段。消除了除數(shù)據(jù)通信外的其它開銷。只要發(fā)送實(shí)體是活躍的,無須接收實(shí)體也是活躍的。它的優(yōu)點(diǎn)是靈活方便、迅速,特別適合于傳送少量零星的報(bào)文,但無連接服務(wù)不能防止報(bào)文的丟失、重復(fù)或失序。
區(qū)分"面向連接服務(wù)"和"無連接服務(wù)"的概念
區(qū)分特別簡單、形象的例子是:打電話和寫信。兩個(gè)人如果要通電話,必須先建立連接--撥號,等待應(yīng)答后才能相互傳遞信息,最后還要釋放連接--掛電話。寫信就沒有那么復(fù)雜了,地址姓名填好以后直接往郵筒一扔,收信人就能收到。TCP/IP協(xié)議在網(wǎng)絡(luò)層是無連接的(數(shù)據(jù)包只管往網(wǎng)上發(fā),如何傳輸和到達(dá)以及是否到達(dá)由網(wǎng)絡(luò)設(shè)備來管理)。而"端口",是傳輸層的內(nèi)容,是面向連接的。協(xié)議里面低于1024的端口都有確切的定義,它們對應(yīng)著因特網(wǎng)上常見的一些服務(wù)。
這些常見的服務(wù)劃分
劃分為使用TCP端口(面向連接如打電話)和使用UDP端口(無連接如寫信)兩種。
網(wǎng)絡(luò)中可以被命名和尋址的通信端口是操作系統(tǒng)的一種可分配資源。由網(wǎng)絡(luò)OSI(開放系統(tǒng)互聯(lián)參考模型,OpenSystemInterconnectionReferenceModel)七層協(xié)議可知,傳輸層與網(wǎng)絡(luò)層最大的區(qū)別是傳輸層提供進(jìn)程通信能力,網(wǎng)絡(luò)通信的最終地址不僅包括主機(jī)地址,還包括可描述進(jìn)程的某種標(biāo)識。所以TCP/IP協(xié)議提出的協(xié)議端口,可以認(rèn)為是網(wǎng)絡(luò)通信進(jìn)程的一種標(biāo)識符。
應(yīng)用程序(調(diào)入內(nèi)存運(yùn)行后一般稱為:進(jìn)程)通過系統(tǒng)調(diào)用與某端口建立連接(binding,綁定)后,傳輸層傳給該端口的數(shù)據(jù)都被相應(yīng)的進(jìn)程所接收,相應(yīng)進(jìn)程發(fā)給傳輸層的數(shù)據(jù)都從該端口輸出。在TCP/IP協(xié)議的實(shí)現(xiàn)中,端口操作類似于一般的I/O操作,進(jìn)程獲取一個(gè)端口,相當(dāng)于獲取本地唯一的I/O文件,可以用一般的讀寫方式訪問類似于文件描述符,每個(gè)端口都擁有一個(gè)叫端口號的整數(shù)描述符,用來區(qū)別不同的端口。由于TCP/IP傳輸層的TCP和UDP兩個(gè)協(xié)議是兩個(gè)完全獨(dú)立的軟件模塊,因此各自的端口號也相互獨(dú)立。如TCP有一個(gè)255號端口,UDP也可以有一個(gè)255號端口,兩者并不沖突。端口號有兩種基本分配方式:第一種叫全局分配這是一種集中分配方式,由一個(gè)公認(rèn)權(quán)威的中央機(jī)構(gòu)根據(jù)用戶需要進(jìn)行統(tǒng)一分配,并將結(jié)果公布于眾,第二種是本地分配,又稱動態(tài)連接,即進(jìn)程需要訪問傳輸層服務(wù)時(shí),向本地操作系統(tǒng)提出申請,操作系統(tǒng)返回本地唯一的端口號,進(jìn)程再通過合適的系統(tǒng)調(diào)用,將自己和該端口連接起來(binding,綁定)。TCP/IP端口號的分配綜合了以上兩種方式,將端口號分為兩部分,少量的作為保留端口,以全局方式分配給服務(wù)進(jìn)程。每一個(gè)標(biāo)準(zhǔn)服務(wù)器都擁有一個(gè)全局公認(rèn)的端口叫周知口,即使在不同的機(jī)器上,其端口號也相同。剩余的為自由端口,以本地方式進(jìn)行分配。TCP和UDP規(guī)定,小于256的端口才能作為保留端口。
按端口號可分為3大類:
(1)公認(rèn)端口(WellKnownPorts):從0到1023,它們緊密綁定(binding)于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。例如:80端口實(shí)際上總是HTTP通訊。
(2)注冊端口(RegisteredPorts):從1024到49151。它們松散地綁定于一些服務(wù)。也就是說有許多服務(wù)綁定于這些端口,這些端口同樣用于許多其它目的。例如:許多系統(tǒng)處理動態(tài)端口從1024左右開始。
(3)動態(tài)和/或私有端口(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應(yīng)為服務(wù)分配這些端口。實(shí)際上,機(jī)器通常從1024起分配動態(tài)端口。但也有例外:SUN的RPC端口從32768開始。
系統(tǒng)管理員可以"重定向"端口:
一種常見的技術(shù)是把一個(gè)端口重定向到另一個(gè)地址。例如默認(rèn)的HTTP端口是80,不少人將它重定向到另一個(gè)端口,如8080。如果是這樣改了,要訪問本文就應(yīng)改用這個(gè)地址http://wwd.3322.net:8080/net/port.htm(當(dāng)然,這僅僅是理論上的舉例)。實(shí)現(xiàn)重定向是為了隱藏公認(rèn)的默認(rèn)端口,降低受破壞率。這樣如果有人要對一個(gè)公認(rèn)的默認(rèn)端口進(jìn)行攻擊則必須先進(jìn)行端口掃描。大多數(shù)端口重定向與原端口有相似之處,例如多數(shù)HTTP端口由80變化而來:81,88,8000,8080,8888。同樣POP的端口原來在110,也常被重定向到1100。也有不少情況是選取統(tǒng)計(jì)上有特別意義的數(shù),象1234,23456,34567等。許多人有其它原因選擇奇怪的數(shù),42,69,666,31337。近來,越來越多的遠(yuǎn)程控制木馬(RemoteAccessTrojans,RATs)采用相同的默認(rèn)端口。如NetBus的默認(rèn)端口是12345。BlakeR.Swopes指出使用重定向端口還有一個(gè)原因,在UNIX系統(tǒng)上,如果你想偵聽1024以下的端口需要有root權(quán)限。如果你沒有root權(quán)限而又想開web服務(wù),你就需要將其安裝在較高的端口。此外,一些ISP的防火墻將阻擋低端口的通訊,這樣的話即使你擁有整個(gè)機(jī)器你還是得重定向端口。
按對應(yīng)的協(xié)議類型端口有兩種:
TCP端口和UDP端口。由于TCP和UDP 兩個(gè)協(xié)議是獨(dú)立的,因此各自的端口號也相互獨(dú)立,比如TCP有235端口,UDP也 可以有235端口,兩者并不沖突。
1.周知端口(Well Known Ports)
周知端口是眾所周知的端口號,范圍從0到1023,其中80端口分配給W WW服務(wù),21端口分配給FTP服務(wù)等。我們在IE的地址欄里輸入一個(gè)網(wǎng)址的時(shí)候( 比如www.cce.com.cn)是不必指定端口號的,因?yàn)樵谀J(rèn)情況下WWW服務(wù)的端口 號是“80”。
網(wǎng)絡(luò)服務(wù)是可以使用其他端口號的,如果不是默認(rèn)的端口號則應(yīng)該在 地址欄上指定端口號,方法是在地址后面加上冒號“:”(半角),再加上端口 號。比如使用“8080”作為WWW服務(wù)的端口,則需要在地址欄里輸入“www.cce.com.cn:8080”。
但是有些系統(tǒng)協(xié)議使用固定的端口號,它是不能被改變的,比如139 端口專門用于NetBIOS與TCP/IP之間的通信,不能手動改變。
2.動態(tài)端口(Dynamic Ports)
動態(tài)端口的范圍是從1024到65535。之所以稱為動態(tài)端口,是因?yàn)樗?一般不固定分配某種服務(wù),而是動態(tài)分配。動態(tài)分配是指當(dāng)一個(gè)系統(tǒng)進(jìn)程或應(yīng)用 程序進(jìn)程需要網(wǎng)絡(luò)通信時(shí),它向主機(jī)申請一個(gè)端口,主機(jī)從可用的端口號中分配 一個(gè)供它使用。當(dāng)這個(gè)進(jìn)程關(guān)閉時(shí),同時(shí)也就釋放了所占用的端口號。
原文地址:http://blog.163.com/liuying_z/blog/static/11414072007111393228593/
總結(jié)
- 上一篇: java关闭当前窗口打开另一窗口
- 下一篇: JAVA 常用对话框