內網穿透的實現和原理解析

2021-09-29 21:27:45 字數 3543 閱讀 6231

詳細的原文下面的鏈結

幾個概念:

1.osi網路七層協議以及每層的作用

1、物理層:該層包括物理連網媒介,如電纜連線聯結器,物理層的協議產生並檢測電壓以便能夠傳送和接受攜帶資料的訊號。如中繼器、集線器、網線、hub。

這一層的資料叫做位元。
2、資料鏈路層:控制網路層和物理層之間的通訊,主要功能是如何在不可靠的物理線路上進行資料的可靠傳遞。如:網絡卡、網橋、交換機。

這一層是和包結構和字段打交道的和事佬。一方面接收來自網路層(第三層)的資料幀並為物理層封裝這些幀;另一方面資料鏈路層把來自物理層的原始資料位元封裝到網路層的幀中。起著重要的中介作用。
如路由器、防火牆、多層交換機。

網路層確定把資料報傳送到其目的地的路徑。就是把邏輯網路位址轉換為實體地址。如果資料報太大不能通過路徑中的一條鏈路送到目的地,那麼網路層的任務就是把這些包分成較小的包。
4、傳輸層:最重要的層,傳輸協議同時進行流量控制或者是基於對方可接受資料的快慢程度規定適當的傳送速率。包括全雙工半雙工、流控制、錯誤恢復服務。同時按照網路能處理的最大尺寸將較長的資料報進行強行分割。程序和埠,tcp udp協議

5、會話層:負責在網路中的兩點之間建立和維護通訊。如建立回話、斷點續傳

在分開的計算機上的兩種應用程式之間建立一種虛擬鏈結,這種虛擬鏈結稱為會話(session)。會話層通過在資料流中設定檢查點而保持應用程式之間的同步。允許應用程式進行通訊的名稱識別和安全性的工作就由會話層完成。
6、表示層:應該程式和網路之間的翻譯官,管理資料的加密和解密。如編碼方式,影象編譯碼、交換機

定義由應用程式用來交換資料的格式。在這種意義上,表示層也稱為轉換器(translator)。該層負責協議轉換、資料編碼和資料壓縮。**程式在該層進行服務操作。
7、應用層:負責對軟體提供介面使能網路服務。如應用程式,如ftp、smtp、http

2.ip位址

網路中唯一定位一台裝置的邏輯位址,類似我們的**號碼。

其中220.181.112.244就是乙個公網的ip位址,他最終指向了一台伺服器。

ip位址是ip協議提供的一種統一的位址格式,它為網際網路上的每乙個網路和每一台主機分配乙個邏輯位址,以此來遮蔽實體地址的差異。

內網ip可以同時出現在多個不同的區域網路中,如a公司的u1使用者獲得了192.168.0.5,b公司的u3使用者也可以獲得192.168.0.5;但公網ip是唯一的,因為我們只有乙個internet。

3.網域名稱

網域名稱是ip的別名,便於記憶,網域名稱最終通過dns解析成ip位址。

p v4是乙個32位的數字,ip v6有128位,要記住一串毫無意義的數字非常困難,網域名稱解決了這個問題。

dns查詢過程如下,最終將網域名稱變成ip位址

4.nat

nat(network address translation)即網路位址轉換,nat能將其本地位址轉換成全球ip位址。

內網的一些主機本來已經分配到了本地ip位址(如區域網dhcp分配的ip),但現在又想和網際網路上的主機通訊(並不需要加密)時,可使用nat方法。

通過使用少量的公有ip 位址代表較多的私有ip 位址的方式,將有助於減緩可用的ip位址空間的枯竭。

nat不僅能解決了lp位址不足與共享上網的問題,而且還能夠有效地避免來自網路外部的攻擊,隱藏並保護網路內部的計算機。

多路由器可完成nat功能。

nat的實現方式:

靜態轉換是指將內部網路的私有ip位址轉換為公有ip位址,ip位址對是一對一。

動態轉換是指將內部網路的私有ip位址轉換為公用ip位址時,ip位址是不確定的,是隨機的。

埠多路復用(port address translation,pat),內部網路的所有主機均可共享乙個合法外部ip位址實現對internet的訪問,從而可以最大限度地節約ip位址資源。同時又可隱藏網路內部的所有主機,有效避免來自internet的攻擊。因此,目前網路中應用最多的就是埠多路復用方式。

proxy

proxy即**,被廣泛應用於計算機領域,主要分為正向**與反向**:

正向**

比如x花店代a,b,c,d,e五位男生向candy女生送匿名的生日鮮花,這裡的x花店就是5位顧客的**,花店**的是客戶,隱藏的是客戶。這就是我們常說的**。

正向**隱藏了真實的請求客戶端。服務端不知道真實的客戶端是誰,客戶端請求的服務都被**伺服器代替來請求,某些科學上網工具扮演的就是典型的正向**角色。用瀏覽器訪問時被牆了,於是你可以在國外搭建一台**伺服器,讓**幫我去請求google.com,**把請求返回的相應結構再返回給我。

當多個客戶端訪問伺服器時伺服器不知道真正訪問自己的客戶端是那一台。正向**中,proxy和client同屬乙個lan,對server透明;

反向**

反向**隱藏了真實的服務端,當我們請求 ww.baidu.com 的時候,就像撥打10086一樣,背後可能有成千上萬臺伺服器為我們服務,但具體是哪一台,你不知道,也不需要知道,你只需要知道反向**伺服器是誰就好了,ww.baidu.com 就是我們的反向**伺服器,反向**伺服器會幫我們把請求**到真實的伺服器那裡去。nginx就是效能非常好的反向**伺服器,用來做負載均衡。

反向**中,proxy和server同屬乙個lan,對client透明。

ddns

ddns即動態網域名稱解析,是將使用者的動態ip位址對映到乙個固定的網域名稱解析服務上,使用者每次連線網路的時候,客戶端程式就會通過資訊傳遞把該主機的動態ip位址傳送給位於服務商主機上的伺服器程式,服務程式負責提供dns服務並實現動態網域名稱解析。就是說ddns捕獲使用者每次變化的ip位址,然後將其與網域名稱相對應,這樣網域名稱就可以始終解析到非固定ip的伺服器上,網際網路使用者通過本地的網域名稱伺服器獲得**網域名稱的ip位址,從而可以訪問**的服務。

為什麼需要內網穿透

當內網中的主機沒有靜態ip位址要被外網穩定訪問時可以使用內網穿透

在網際網路中唯一定位一台主機的方法是通過公網的ip位址,但固定ip是一種非常稀缺的資源,不可能給每個公司都分配乙個,且許多中小公司不願意為高昂的費用買單,多數公司直接或間接的撥號上網,電信部門會給接入網路的使用者分配ip位址,以前上網使用者少的時候基本分配的都是臨時的靜態ip位址,租約過了之後可能會更換成另乙個ip位址,這樣外網訪問就不穩定,因為內網的靜態ip位址一直變化,為了解決這個問題可以使用動態網域名稱解析的辦法變換網域名稱指向的靜態ip位址。但是現在越來越多的上網使用者使得臨時分配的靜態ip位址也不夠用了,電信部門開始分配一些虛擬的靜態ip位址,這些ip是公網不能直接訪問的,如以125開頭的一些ip位址,以前單純的動態網域名稱解析就不好用了。

內網穿透的定義與障礙

簡單來說實現不同區域網內的主機之間通過網際網路進行通訊的技術叫內網穿透。

障礙一:位於區域網內的主機有兩套 ip 位址,一套是區域網內的 ip 位址,通常是動態分配的,僅供區域網內的主機間通訊使用;一套是經過閘道器轉換後的外網 ip 位址,用於與外網程式進行通訊。

因為出於安全起見,除非是主機主動向對方發出了連線請求(這時會在該主機的資料結構中留下一條記錄),否則,當主機接收到資料報時,如果在其資料結構中查詢不到對應的記錄,那些不請自來的資料報將會被丟棄。

解決辦法:要想解決以上兩大障礙,我們需要借助一台具有公網 ip 的伺服器進行橋接。

SAP BADI 實現原理解析

最近幾天發現這篇文章被單擊的次數比較高,這裡把文件內容再充實一下 本文談得是sap badi 機制背後的一些設計問題,關於如何使用badi 請參考 在sap系統中 badi 相關類的 類圖 如下 下面能過 分析 badi 機制背後的一些設計問題 1.定義指向badi inte ce的referenc...

c c const實現原理解析

丟擲問題 下列 輸出的結果是什麼?include includeusing namespace std int main resault 100 10講解學習 原理在c 中,被const修飾的變數,可能為其分配儲存空間,也可能不分配儲存空間。有下面兩種情況,會為這個變數分配儲存空間 1 當const...

Ogre陰影實現原理解析

顧名思義,陰影錐陰影其實就是建立乙個椎體。我們以光源位置為起點,和需要產生陰影的物體的外圍輪廓 光源作為參考位置 連線然後無限延伸,這樣就得到了乙個椎體,利用這個椎體做模板測試。我們把面對攝像機為正面的椎體麵先繪製一遍,在相應的模板位置 1 我們把背對攝像機為反面的椎體面再繪製一遍,在相應的模板位置...