端口号介绍
數據鏈路和IP中的地址,分別指的是MAC地址和P地址。前者用來識別同一鏈路中不同的計算機,后者用來識別TCP/IP網絡中互連的主機和路由器。在傳輸層中也有這種類似于地址的概念,那就是端口號。端口號用來識別同一臺計算機中進行通信的不同應用程序。因此,它也被稱為程序地址。
根據端口號識別應用
一臺計算機上同時可以運行多個程序。例如,接受WWW服務的Web 瀏覽器、電郵客戶端、遠程登錄用的 ssh 客戶端等程序都可同時運行。傳輸層協議正是利用這些端口號識別本機中正在進行通信的應用程序,并準確地將數據傳輸。
通過IP地址、端口號、協議號進行通信識別
如下圖所示,①和②的通信是在兩臺計算機上進行的。它們的目標端口號相同,都是80。例如打開兩個Web瀏覽器,同時訪問兩個服務器上不同的頁面,就會在這個瀏覽器跟服務器之間產生類似前面的兩個通信。在這種情況下可以根據源端口號加以區分。①跟③的目標端口號和源端口號完全相同,但是它們各自的源IP地址不同,可以通過源地址進行區分。
此外,還有一種情況,IP地址和端口全都一樣,只是協議號(表示上層是TCP或UDP的一種編號)不同。這種情況下,也會認為是兩個不同的通信。
因此,TCP/P或UDP/IP通信中通常采用5個信息來識別一個通信。它們是“源P地址”、“目標P地址”、“協議號”、“源端口號”、“目標端口號”。只要其中某一項不同,則被認為是其他通信。
如何確定端口號
在實際進行通信時,要事先確定端口號。確定端口號的方法分為兩種:
-
標準既定的端口號(靜態方法),它是指每個應用程序都有其指定的端口號。
像HTTP、TELNET、FTP等廣為使用的應用協議中所使用的端口號是固定的。這些端口號也被稱之為知名端口號(Well—Known Port Number )。應用程序應該避免使用知名端口號進行既定目的之外的通信,以免產生沖突。
除知名端口號之外,還有一些端口號也被正式注冊,不過,這些端口號可用于任何通信用途。它們分布在1024到49151的數字之間。
-
時序分配法(動態分配法),此時,服務端有必要確定監聽端口號,但是接受服務的客戶端沒必要確定端口號。
在這種方法下,客戶端應用程序可以完全不用自己設置端口號,而全權交給操作系統進行分配。操作系統可以為每個應用程序分配互不沖突的端口號。例知,每需要一個新的端口號時,就在之前分配號碼的基礎上加1。這樣,操作系統就可以動態地管理端口號了。
根據這種動態分配端口號的機制,即使是同一個客戶端程序發起的多個TCP連接,識別這些通信連接的5部分數字也不會全部相同。動態分配的端口號取值范圍在49152到65535之間。
端口號與協議的關系
端口號由其使用的傳輸層協議決定。因此,不同的傳輸協議可以使用相同的端口號。例如,TCP與UDP使用同一個端口號,但使用目的各不相同。這是因為端口號上的處理是根據每個傳輸協議的不同而進行的。
數據到達IP層后,會先檢查IP首部中的協議號,再傳給相應協議的模塊。如果是TCP則傳給TCP模塊、如果是UDP則傳給UDP模塊去做端口號的處理。即使是同一個端口號,由于傳輸協議是各自獨立地進行處理,因此相互之間不會受到影響。
總結
- 上一篇: Linux环境下查看日志文件命令详解
- 下一篇: 实现一个C语言版本的圣诞树(附源代码)