讓女友能懂的網絡技術篇之動態代理

1、前言  html

  筆者在工做常常遇到須要遠程訪問部署在另一個城市的服務器上的網站,以分析並解決對方出現的程序異常問題。可是咱們部署的程序經常爲看不到對方的頁面感到困擾,通過一番研究後,終於找到一種切實可行的方法,在這裏也分享給面臨一樣問題的童鞋。
  情景是這樣的:我本地主機是S,想要遠程訪問T服務器上8080的web應用網站,也就是說我本地主機S的瀏覽器上打開目標網站。可是呢,問題是S和T不是直接相連的,不在同一個局域網,而且每個主機都有防火牆。慶幸的是,咱們發現每個局域網都一臺對外開放的服務器,好比S所在的局域網有一臺服務器A的22端口是鏈接到互聯網的,T所在的局域網有一臺服務器B的22的端口是鏈接到互聯網的。web

  問題能夠這樣形象地描述:我有一封寫好的將要寄往遠方的女友的信,我知道她所在的辦公的地方,那麼我要怎樣作才能把這封信寄給她呢?在這裏,個人請求數據就是封裝在IP數據報裏面的內容,而IP數據報就是信封,IP數據報裏面的頭部通常會寫上收信人和地址並蓋個戳。可是呢,我在公司的1號房間,路途遙遠,我不能直接把信給女友。忽然我想起,公司不是有郵件收發室A嗎?因而,我就跑去2號房間郵件收發室A,因爲我是公司內部人員,因此我不須要任何手續就能夠進去了。經過郵件收發室,我很快就把信發出去了,通常會有郵局(電信運行商或中間服務器)的人員定時來取。很快,郵遞人員按照我信封上面的地址,找到女友所在公司的大樓,可是因爲郵遞人員不是女友所在公司的內部員工,沒有權限進入她所在的T棟大樓,只能放在她所在公司的前臺。通常狀況下,前臺會定時通知公司內部人員哪些人有新郵件啦。最後,她看到了我寫給她的信,很是高興,因而她按照一樣的方式回覆了我。shell

2、操做過程瀏覽器

  下面須要介紹一個專門用於遠程訪問的工具xshell。服務器

  step1:我本地主機S訪問同一局域網的服務器A網絡

 

  step2:在登錄上A服務器後,以A爲代理去訪問互聯網上的服務器Msocket

 

 

  配代理A界面以下:工具

 

 

  A服務器監聽A本地端口,以創建隧道,這樣就使得A的信能夠傳遞到郵局M。網站

 

 

  step3:接着,經過M去訪問B,也就是郵局人員去B樓送郵件的過程:spa

 

  step4:這時已經連上了B,即已經到達了女友所在公司的前臺,只須要最後一步就能夠把信送到了,激動不激動。女友所在房間號,即IP地址:192.166.1.101.

  

  step5:最後,打開瀏覽器「Internet設置」,設置代理,而後在瀏覽器輸入localhost:8080/

 

 

3、動態代理與隧道技術原理引伸

  所謂動態代理即經過socket實現端口的轉發,socket是底層操做系統的一個應用程序,它可以實現端口的監聽,支持不一樣的傳輸層協議(TCP或UDP),當使用TCP協議進行鏈接時,該Socket鏈接就是一個TCP鏈接。所謂隧道,就相似於socket之間創建的TCP鏈接。在TCP鏈接中,咱們從一側的出口(socket)放入數據,數據就會原封不動地從另外一個出口出來,就好像在網絡中挖了一條地道,網絡包從這個地道里穿過來。它不一樣於其餘的須要歷來自多條路徑的網絡包組裝,而是好像存在一條專有的管道同樣,鏈接在網絡的兩端,所以它的速度通常比普通網絡傳輸要快。

  創建Socket鏈接至少須要一對套接字,其中一個運行於客戶端,稱爲ClientSocket ,另外一個運行於服務器端,稱爲ServerSocket 。

  套接字之間的鏈接過程分爲三個步驟:服務器監聽,客戶端請求,鏈接確認。

 

 

  服務器監聽:服務器端套接字並不定位具體的客戶端套接字,而是處於等待鏈接的狀態,實時監控網絡狀態,等待客戶端的鏈接請求。

  客戶端請求:指客戶端的套接字提出鏈接請求,要鏈接的目標是服務器端的套接字。爲此,客戶端的套接字必須首先描述它要鏈接的服務器的套接字,指出服務器端套接字的地址和端口號,而後就向服務器端套接字提出鏈接請求。

  鏈接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的鏈接請求時,就響應客戶端套接字的請求,創建一個新的線程,把服務器端套接字的描述發 給客戶端,一旦客戶端確認了此描述,雙方就正式創建鏈接。而服務器端套接字繼續處於監聽狀態,繼續接收其餘客戶端套接字的鏈接請求。

 

參考資料:

https://blog.csdn.net/a351945755/article/details/22572529

http://www.javashuo.com/article/p-xraxcikj-dm.html

《網絡是怎樣鏈接的》 

相關文章
相關標籤/搜索