在應(yīng)用層上有許多的應(yīng)用協(xié)議,它們提供各種不同的應(yīng)用功能。但是,當(dāng)傳輸數(shù)據(jù)時(shí),傳輸層怎么知道數(shù)據(jù)是由哪一種應(yīng)用協(xié)議或應(yīng)用程序發(fā)出的呢?或者所接收到的數(shù)據(jù)是要訪問(wèn)哪一個(gè)應(yīng)用協(xié)議或者應(yīng)用程序呢?
TCP/IP協(xié)議使用端口解決這個(gè)問(wèn)題。
什么是端口與端口號(hào)?在應(yīng)用層與傳輸層之間,TCP/IP協(xié)議為每一個(gè)應(yīng)用協(xié)議或者應(yīng)用程序提供了唯一的接口,即端口,如圖1所示。
圖1 應(yīng)用層與傳輸層之間的端口
正如圖1所示,每種應(yīng)用層協(xié)議或應(yīng)用程序都具有與傳輸層唯一連接的端口,并且使用唯一的端口號(hào)將這些端口區(qū)分開(kāi)來(lái)。當(dāng)數(shù)據(jù)流從某一個(gè)應(yīng)用發(fā)送到遠(yuǎn)程網(wǎng)絡(luò)設(shè)備的某一個(gè)應(yīng)用時(shí),傳輸層根據(jù)這些端口號(hào),就能夠判斷出數(shù)據(jù)是來(lái)自于哪一個(gè)應(yīng)用,想要訪問(wèn)另一臺(tái)網(wǎng)絡(luò)設(shè)備的哪一個(gè)應(yīng)用,從而將數(shù)據(jù)傳遞到相應(yīng)的應(yīng)用層協(xié)議或應(yīng)用程序。
端口根據(jù)其對(duì)應(yīng)的協(xié)議或應(yīng)用不同,被分配了不同的端口號(hào)。負(fù)責(zé)分配端口號(hào)的機(jī)構(gòu)是因特網(wǎng)編號(hào)管理局(IANA)。目前,端口的分配有三種情況,這三種不同的端口可以根據(jù)端口號(hào)加以區(qū)別。
● 保留端口
這種端口的端口號(hào)一般都小于1024。它們基本上都被分配給了已知的應(yīng)用協(xié)議(如圖1中的部分端口)。目前,這一類端口的端口號(hào)分配已經(jīng)被廣大網(wǎng)絡(luò)應(yīng)用者接受,形成了標(biāo)準(zhǔn),在各種網(wǎng)絡(luò)的應(yīng)用中調(diào)用這些端口號(hào)就意味著使用它們所代表的應(yīng)用協(xié)議。這些端口由于已經(jīng)有了固定的使用者,所以不能被動(dòng)態(tài)地分配給其他應(yīng)用程序。表1給出了一些常用的保留端口。
表1 TCP協(xié)議和UDP協(xié)議的一些常用保留端口
● 動(dòng)態(tài)分配的端口
這種端口的端口號(hào)一般都大于1024。這一類端口沒(méi)有固定的使用者,它們可以被動(dòng)態(tài)地分配給應(yīng)用程序使用。也就是說(shuō),我們?cè)谑褂脩?yīng)用軟件訪問(wèn)網(wǎng)絡(luò)的時(shí)候,我們的應(yīng)用軟件可以向系統(tǒng)申請(qǐng)一個(gè)大于1024的端口號(hào)臨時(shí)代表這個(gè)軟件與傳輸層交換數(shù)據(jù),并且使用這個(gè)臨時(shí)的端口與網(wǎng)絡(luò)上的其他主機(jī)通信。圖2顯示了使用動(dòng)態(tài)分配的端口訪問(wèn)網(wǎng)絡(luò)資源的情況。
圖2 使用動(dòng)態(tài)分配的端口訪問(wèn)網(wǎng)絡(luò)資源
圖2顯示的是在使用微軟公司的IE瀏覽器上網(wǎng)時(shí),在DOS窗口中使用netstat命令查看端口使用情況的畫面。IE瀏覽器使用了1374和1384兩個(gè)動(dòng)態(tài)分配的端口號(hào)。
● 注冊(cè)端口
注冊(cè)端口比較特殊,它也是固定為某個(gè)應(yīng)用服務(wù)的端口,但是它所代表的不是已經(jīng)形成標(biāo)準(zhǔn)的應(yīng)用層協(xié)議,而是某個(gè)軟件廠商開(kāi)發(fā)的應(yīng)用程序。
某些軟件廠商通過(guò)使用注冊(cè)端口,使它的特定軟件享有固定的端口號(hào),而不用向系統(tǒng)申請(qǐng)動(dòng)態(tài)分配的端口號(hào)。一般,這些特定的軟件要使用注冊(cè)端口,其廠商必須向端口的管理機(jī)構(gòu)注冊(cè)。
大多數(shù)注冊(cè)端口的端口號(hào)大于1024。
TCP協(xié)議和UDP協(xié)議都允許16位的端口值,分別能夠提供65536個(gè)端口。不論端口號(hào)大于還是小于1024,以上三種端口都分別屬于TCP協(xié)議和UDP協(xié)議。當(dāng)然,也有些協(xié)議的端口既屬于TCP協(xié)議也屬于UDP協(xié)議,如圖1中的DNS服務(wù)。
當(dāng)網(wǎng)絡(luò)中的兩臺(tái)主機(jī)進(jìn)行通信的時(shí)候,為了表明數(shù)據(jù)是由源端的哪一種應(yīng)用發(fā)出的,以及數(shù)據(jù)所要訪問(wèn)的是目的端的哪一種服務(wù),TCP/IP協(xié)議會(huì)在傳輸層封裝數(shù)據(jù)段時(shí),把發(fā)出數(shù)據(jù)的應(yīng)用程序的端口作為源端口,把接收數(shù)據(jù)的應(yīng)用程序的端口作為目的端口,添加到數(shù)據(jù)段的頭中,從而使主機(jī)能夠同時(shí)維持多個(gè)會(huì)話的連接,使不同的應(yīng)用程序的數(shù)據(jù)不至于混淆。圖3表現(xiàn)了源端口與目的端口的作用。
圖3 源端口與目的端口的作用