1. 程式人生 > >讓女朋友能懂的網路技術篇之動態代理

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

一、前言  

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

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

二、操作過程

  下面需要介紹一個專門用於遠端訪問的工具xshell。

  step1:我本地主機S訪問同一區域網的伺服器A

 

  step2:在登陸上A伺服器後,以A為代理去訪問網際網路上的伺服器M

 

 

  配代理A介面如下:

 

 

  A伺服器監聽A本地埠,以建立隧道,這樣就使得A的信可以傳遞到郵局M。

 

 

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

 

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

  

  step5:最後,開啟瀏覽器“Internet設定”,設定代理,然後在瀏覽器輸入localhost:8080/

 

 

三、動態代理與隧道技術原理引申

  所謂動態代理即通過socket實現埠的轉發,socket是底層作業系統的一個應用程式,它能夠實現埠的監聽,支援不同的傳輸層協議(TCP或UDP),當使用TCP協議進行連線時,該Socket連線就是一個TCP連線。所謂隧道,就類似於socket之間建立的TCP連線。在TCP連線中,我們從一側的出口(socket)放入資料,資料就會原封不動地從另一個出口出來,就好像在網路中挖了一條地道,網路包從這個地道里穿過來。它不同於其他的需要從來自多條路徑的網路包組裝,而是好像存在一條專有的管道一樣,連線在網路的兩端,因此它的速度一般比普通網路傳輸要快。

  建立Socket連線至少需要一對套接字,其中一個運行於客戶端,稱為ClientSocket ,另一個運行於伺服器端,稱為ServerSocket 。

  套接字之間的連線過程分為三個步驟:伺服器監聽,客戶端請求,連線確認。

 

 

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

  客戶端請求:指客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。

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

 

參考資料:

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

https://www.cnblogs.com/jking10/p/5525519.html

《網路是怎樣連線的》