一.端口概念
在網絡技術中,端口(Port)大致有兩種意思:一是物理意義上的端口,比如,ADSL Modem、集線器、交換機、路由器用于連接其他網絡設備的接口,如RJ-45端口、SC端口等等。二是邏輯意義上的端口,一般是指TCP/IP協議中的端口,端口號的范圍從0到65535,比如用于瀏覽網頁服務的80端口,用于FTP服務的21端口等等。
我們這里將要介紹的就是邏輯意義上的端口。我們這里所說的端口,不是計算機硬件的I/O端口,而是軟件形式上的概念.工具提供服務類型的不同,端口分為兩種,一種是TCP端口,一種是UDP端口。計算機之間相互通信的時候,分為兩種方式:一種是發送信息以后,可以確認信息是否到達,也就是有應答的方式,這種方式大多采用TCP協議;一種是發送以后就不管了,不去確認信息是否到達,這種方式大多采用UDP協議。對應這兩種協議的服務提供的端口,也就分為TCP端口和UDP端口。
二.網絡端口的分類:
2.1 公認端口(Well-KnownPorts):范圍從0到1023
它們緊密綁定(binding)于一些服務。通常這些端口的通訊明確表明了某種服務的協議。例如:21端口分配給FTP服務,
25端口分配給SMTP(簡單郵件傳輸協議)服務,80端口分配給HTTP服務,135端口分配給RPC(遠程過程調用)服務等等。
我們在IE的地址欄里輸入一個網址的時候( 比如www.cce.com.cn)是不必指定端口號的,因為在默認情況下WWW服務的端口號是“80”。
網絡服務是可以使用其他端口號的,如果不是默認的端口號則應該在地址欄上指定端口號,方法是在地址后面加上號“:”(半角),再加上端口號。比如使用“8080”作為WWW服務的端口,則需要在地址欄里輸入“www.cce.com.cn:8080”。 但是有些系統協議使用固定的端口號,它是不能被改變的,比如139 端口專門用于NetBIOS與TCP/IP之間的通信,不能手動改變。
2.2 動態端口(Dynamic Ports):范圍從1024到65535
之所以稱為動態端口,是因為它一般不固定分配某種服務,而是動態分配
動態分配是指當一個系統進程或應用程序進程需要網絡通信時,它向主機申請一個端口,主機從可用的端口號中分配一個供它使用。當這個進程關閉時,同時也就釋放了所占用的端口號。
2.2.1 注冊端口(RegisteredPorts):從1024到49151。它們松散地綁定于一些服務。也就是說有許多服務綁定于這些端口,這些端口同樣用于許多其它目的。例如:許多系統處理動態端口從1024左右開始。
2.2.2動態和/或私有端口(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應為服務分配這些端口。實際
上,機器通常從1024起分配動態端口。但也有例外:SUN的RPC端口從32768開始。
三.作用
tcp的連接是兩個進程間的通信,而數據鏈路層的是通過硬件地址來區分的,所以我認為端口號就是為了區分同一計算機上的不同進程,端口號本質上就是一個整型。tcp和udp端口號可以相同,不沖突。
當一臺電腦啟動了一個可以讓遠程其他電腦訪問的 程序 ,那么它就要開啟至少一個端口號來讓外界訪問。我們可以把沒有開啟端口號的電腦看作是一個 密封的房間 ,密封的房間當然不可能接受外界的訪問,所以當系統開啟了一個可以讓外界訪問的程序后它自然需要在房間上開一個窗口來接受來自外界的訪問,這個窗口就是端口。
那么為什么要給端口 編號 來區分它們呢,既然一個程序開了一個端口,那么不是 外部信息 都可以通過這個開啟的端口來訪問了嗎?答案是不可以。為什么呢?因為數據是用端口號來通知 傳輸層 協議 送給哪個軟件來處理的,數據是沒有智慧的,如果很多的程序共用一個端口來接受數據的話,那么當外界的一個 數據包 送來后傳輸層就不知道該送給哪一個軟件來處理,這樣勢必將導致混亂。
源端口號一般是由系統自己動態生成的一個從1024-65535的 號碼 ,當一臺計算機A通過網絡訪問計算機B時,如果它需要對方返回數據的話,它也會隨機創建一個大于1023的端口,告訴B返回數據時把數據送到自己的哪個端口,然后軟件開始偵聽這個端口,等待數據返回。而B收到數據后會讀取數據包的源端口號和目的端口號,然后記錄下來,當軟件創建了要返回的數據后就把原來數據包中的原端口號作為目的端口號,而把自己的端口號作為原端口號,也就是說把收到的數據包中的原和目的反過來,然后再送回A,A再重復這個過程如此反復直到數據傳輸完成。當數據全部傳輸完A就把 源端口 釋放出來,所以同一個軟件每次 傳輸數據 時不一定是同一個源端口號。