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