什麼是端口?到底是做什麼的呢?

老男孩IT教育


一、端口定義

端口是指接口電路中的一些寄存器,這些寄存器分別用來存放數據信息、控制信息和狀態信息,相應的端口分別稱為數據端口、控制端口和狀態端口。

  

電腦運行的系統程序,其實就像一個閉合的圓圈,但是電腦是為人服務的,他需要接受一些指令,並且要按照指令調整系統功能來工作,於是系統程序設計者,就把這個圓圈截成好多段,這些線段接口就叫端口(通俗講是斷口,就是中斷),系統運行到這些端口時,一看端口是否打開或關閉,如果關閉,就是繩子接通了,系統往下運行,如果端口是打開的,系統就得到命令,有外部數據輸入,接受外部數據並執 行。

 (一)什麼是TCP端口?

  

   TCP:Transmission Control Protocol 傳輸控制協議TCP是一種面向連接(連接導向)的、可靠的、基於字節流的運輸層(Transport layer)通信協議,

由IETF的RFC 793說明(specified)。在簡化的計算機網絡OSI模型中,它完成第四層傳輸層所指定的功能,UDP是同一層內另一個重要的傳輸協議。

(二)什麼是UDP端口?

 

  UDP:UDP是ISO參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。 UDP 協議基本上是IP協議與上層協議的接口。

UDP協議適用端口分辨運行在同一臺設備上的多個應用程序。

二、端口作用

 

 我們知道,一臺擁有IP地址的主機可以提供許多服務,比如Web服務、FTP服務、SMTP服務等,這些服務完全可以通過1個IP地址來實現。那麼,主機是怎樣區分不同的網絡服務呢?顯然不能只靠IP地址,因為IP 地址與網絡服務的關係是一對多的關係。實際上是通過“IP地址+端口號”來區分不同的服務的。

需要注意的是,端口並不是一一對應的。比如你的電腦作為客戶機訪 問一臺WWW服務器時,WWW服務器使用“80”端口與你的電腦通信,但你的電腦則可能使用“3457”這樣的端口。

(一)動態端口(Dynamic Ports)

  動態端口的範圍是從1024到65535。之所以稱為動態端口,是因為它 一般不固定分配某種服務,而是動態分配。動態分配是指當一個系統進程或應用

 程序進程需要網絡通信時,它向主機申請一個端口,主機從可用的端口號中分配 一個供它使用。當這個進程關閉時,同時也就釋放了所佔用的端口號。

(二)端口在入侵中的作用

 

有人曾經把服務器比作房子,而把端口比作通向不同房間(服務)的門,如果不考慮細節的話,這是一個不錯的比喻。入侵者要佔領這間房子,勢必要破門而入(物理入侵另說),那麼對於入侵者來說,瞭解房子開了幾扇門,都是什麼樣的門,門後面有什麼東西就顯得至關重要。

  

入侵者通常會用掃描器對目標主機的端口進行掃描,以確定哪些端口是開放的,從開放的端口,入侵者可以知道目標主機大致提供了哪些服務,進而猜測可能存在的漏洞,因此對端口的掃描可以幫助我們更好的瞭解目標主機,而對於管理員,掃描本機的開放端口也是做好安全防範的第一步。

  

(三)面向連接服務和無連接服務

可以先了解面向連接和無連接協議,面向連接服務的主要特點有:面向連接服務要經過三個階段:數據傳輸前,先建立連接,連接建立後再傳輸數據,數據傳送完後,釋放連接。面向連接服務,確保數據傳送的次序和傳輸的可靠性。無連接服務的特點是:無連接服務只有傳輸數據階段。消除了除數據通信外的其它開銷。只要發送實體是活躍的,無須接收實體也是活躍的。它的優點是靈活方便、迅速,特別適合於傳送少量零星的報文,但無連接服務不能防止報文的丟失、重複或失序。

區分"面向連接服務"和"無連接服務"的概念  區分特別簡單,形象的例子是:打電話和寫信。兩個人如果要通電話,必須先建立連接--撥號,等待應答後才能相互傳遞信息,最後還要釋放連接--掛電話。

寫信就沒有那麼複雜了,地址姓名填好以後直接往郵筒一扔,收信人就能收到。

 

TCP/IP協議在網絡層是無連接的(數據包只管往網上發,如何傳輸和到達以及是否到達由網絡設備來管理)。而"端口",是傳輸層的內容,

是面向連接的。協議裡面低於1024的端口都有確切的定義,它們對應著因特網上常見的一些服務。

 

三、端口分類

(一)常見的服務劃分

劃分為使用TCP端口(面向連接如打電話)和使用UDP端口(無連接如寫信)兩種。

網絡中可以被命名和尋址的通信端口是操作系統的一種可分配資源。由網絡OSI(開放系統互聯參考模型,七層協議可知,傳輸層與網絡層最大的區別是傳輸層提供進程通信能力,網絡通信的最終地址不僅包括主機地址,還包括可描述進程的某種標識。

所以TCP/IP協議提出的協議端口,可以認為是網絡通信進程的一種標識符。

應用程序(調入內存運行後一般稱為:進程)通過系統調用與某端口建立連接(binding,綁定)後,傳輸層傳給該端口的數據都被相應的進程所接收,相應進程發給傳輸層的數據都從該端口輸出。在TCP/IP協議的實現中,端口操作類似於一般的I/O操作,進程獲取一個端口,相當於獲取本地唯一的I/O文件,可以用一般的讀寫方式訪問類似於文件描述符,每個端口都擁有一個叫端口號的整數描述符,用來區別不同的端口。

由於TCP/IP傳輸層的TCP和UDP兩個協議是兩個完全獨立的軟件模塊,因此各自的端口號也相互獨立。

如TCP有一個255號端口,UDP也可以有一個255號端口,兩者並不衝突。端口號有兩種基本分配方式:

第一種叫全局分配這是一種集中分配方式,由一個公認權威的中央機構根據用戶需要進行統一分配,並將結果公佈於眾。

第二種是本地分配,又稱動態連接,即進程需要訪問傳輸層服務時,向本地操作系統提出申請,操作系統返回本地唯一的端口號,進程再通過合適的系統調用,將自己和該端口連接起來(binding,綁定)。

TCP/IP端口號的分配綜合了以上兩種方式,將端口號分為兩部分,少量的作為保留端口,以全局方式分配給服務進程。

   每一個標準服務器都擁有一個全局公認的端口叫周知端口,即使在不同的機器上,其端口號也相同。剩餘的為自由端口,以本地方式進行分配。

TCP和UDP規定,小於256的端口才能作為保留端口。

(二)按端口號可分為3大類

 

 (1)公認端口(WellKnownPorts):從0到1023,它們緊密綁定(binding)於一些服務。通常這些端口的通訊明確表明了某種服務的協議。

例如:80端口實際上總是HTTP通訊。

  

(2)註冊端口(RegisteredPorts):從1024到49151。它們鬆散地綁定於一些服務。也就是說有許多服務綁定於這些端口,這些端口同樣用於許多其它目的。

例如:許多系統處理動態端口從1024左右開始。

  

(3)動態和/或私有端口(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應為服務分配這些端口。實際上,機器通常從1024起分配動態端口。但也有例外:SUN的RPC端口從32768開始。





Kali技術


    在網絡的世界裡,有兩個很重要的概念,一個是IP地址,一個是端口。根據IP地址可以找到互相通信的終端,根據端口可以找到互相通信的應用程序,也就是不同的端口號對應不同的應用程序。

    端口的作用

    一個IP地址標識了一臺主機,而一臺主機可以提供多種服務,比如web服務、ftp服務、遠程桌面等。如何區分不同的服務呢,顯示只靠IP地址是不行的,IP地址與服務是一對多的關係,這時就需要端口號進行區分了。


    比如我們訪問今日頭條網站,瀏覽器使用一個大於1024的隨機端口,通過DNS獲取到今日頭條的網站的IP地址,訪問web服務的80端口。下圖顯示了TCP報文的格式,其中前兩個字段就是源端口號和目的端口號。


    端口的分類

    端口號是個整數,範圍從0到65535(2^16-1),分為周知端口和動態端口。


    1)周知端口,周知端口就是眾所周知的端口,有些是約定俗成的。範圍從0~1023,比如常見的www為80,ftp為21、telnet為23、dns為53等等。

    2)動態端口,一般不用於固定分配給某種服務,範圍從1024到65535,是動態分配的。當系統的某個進程或者應用需要通信時,主機從可用的端口號中分配一個供其使用,程序關閉時,同時釋放所佔用的端口號。


    綜上所述,IP地址用於唯一標識一臺主機,端口號(Port)用於唯一標識不同的應用程序或進程,(源IP地址,源端口號,目的IP地址,目的端口號)四元組用於一個通信過程。

如果覺得對你有幫助,可以多多點贊哦,也可以隨手點個關注哦,謝謝。

Geek視界


題主針對端口並未做進一步的描述,所以這裡的端口並不清楚是物理端口還是邏輯端口?但可以大膽的猜測的一下,如果題主是搞網絡的肯定對端口這塊應該不會陌生,所以題主可能接觸到的是邏輯端口,並且可能是協議端口。協議端口可能大家接觸的更多一些,但如果你對網絡不是很熟悉,可能端口是什麼就比較迷惑!下面也主要是對協議端口的說明。

首先說明一下網絡的層級結構。

如上圖所示,網絡層主要提供了一種不同網絡主機之間的通信能力,通過IP地址來標識不同的主機。當然IP地址也是邏輯地址,至於IP地址的細節此文不再展開描述。傳輸層與網絡層的最大區別是傳輸層提供進程間通信通能力。從某種意義上講,網絡通信的最終地址就不能僅僅是主機的IP地址了,還包括可以描述進程的某種標識符。TCP/IP協議提出了協議端口的概念,用於表示通信的進程。有人將主機比作大樓,將端口比作房間。實際上端口可以進一步理解為不同的應用。例如主機上有WEB服務、FTP服務、SMTP服務等等,這些服務分別使用不同端口號來標識。

從某種意義上講,端口是對通信的進一步細化,由主機細化到主機裡面的進程,是通信進一步具體化。

端口有兩種分配方式。一種是全局分配,另一種動態連接。例如Socket編程的服務端是事先分配好地址的,這個是一種全局分配。而客戶端向服務端建立連接時獲取的地址是動態連接,是客戶端向操作系統提出申請,操作系統處理後返回的。這就容易理解服務端端口不變,而客戶端端口不斷變化。

在日常生活我們見到的各種服務都有端口,像HTTP、TELNET、DNS、SSH等,主要因為它們均是基於TCP/IP協議,底層或者是TCP,或者是UDP。UDP或TCP協議就需要有端口的標識。

本人具有多年的java開發經驗,熟悉多種框架,熟悉網絡編程,熟悉java安全編程,熟悉大數據,熟悉多種安全協議,熟悉併發編程,有興趣的同學可以互相關注,互相學習!!!


代碼飼養員天齊


不知道這裡的端口是指計算機上面的網絡端口嗎?我就當網絡端口來回答一下,純手打。

IP不夠用,端口來湊!

用IP來標記一臺計算機,通過這個IP就可以訪問到這臺計算機,那麼計算機上裝了很多應用怎麼區分呢?


我發送的這個數據是發給什麼應用的呢?總不能一臺計算機只裝一個應用。用端口就相當於給應用指定一個專門的通道,應用和端口綁定,數據達到指定端口,那個應用就去處理,計算機的網絡端口有65536個,從0-65535,有名的應用都是有默認端口,如Apache,Nginx佔80端口,FTP佔21端口,SSH佔22端口,Telnet佔23端口,MySql佔3306端口,Redis佔6379等等。大家約定俗成,後開發的軟件不會用別的軟件相同的端口,就像SSH佔用的22端口一樣,當時已經有FTP和Telnet各佔了21和23端口,22還沒人用,於是就選了22端口,具體可以查下哦。


總結一下:IP+端口 = 到達指定的應用,一一綁定


真的想不到吧


端口一般指兩種,一種是硬件比如路由器或者交換機的插網線的端口,一種是軟件的邏輯的概念,比如http的80端口!

從以上可以看出來,不論是硬件的還是邏輯的,端口其實就像“門”一樣,用來標識它負責的一個房間!和這個門連接上就代表進入了某個特定的房間,然後獲取自己需要的信息!

對於交換機和路由器等互聯電腦主機的設備來說,上面的一個個插口就可以說是一個接口或者端口,我需要接入交換機的5號端口,交換機就知道了有一個A設備在我的5號端口,A設備從5號端口發了數據,這個數據需要從5號端口發送到A設備!看,簡單理解端口就是一個定位用的門!


而在應用層面,會聽過端口映射,Windows遠程3389,網頁端口80,這些都是一些邏輯概念,是各個應用軟件用來接受和發送數據的門,比如3389,B設備從互聯網連接X設備的3389端口,X設備就會知道,B設備需要遠程連接而不是網頁!當我們從家裡打開瀏覽器輸入baidu時,瀏覽器默認會用80端口去請求百度的服務器,百度就會知道,哦 這個是從80端口進來的,他是需要打開我的網頁!於是我們就打開了網頁!

端口它就是門,各種不同的門,從A門進去就會有A房間的服務,並且用來區分不同服務的門!


分享到:


相關文章: