目錄
1.通信的NAT技術
2.代理服務器
3.內網穿透和內網打洞
1.通信的NAT技術
? ? ? ? NAT技術產生的背景是我們為了解決IPV4不夠用的問題,NAT在通信的時候可以對IP將私網IP轉化為公網IP,全局IP要求唯一,但是私人IP不是唯一的。
將報文發給路由器進行轉發的時候,,路由器有一張NATP表,記錄了IP的替換情況,比如在一個局域網內我的客戶端A要去訪問我們的服務器,它就會將報文交給路由器,路由器將SRC轉化為它的公網IP,再把這個報文交給我們的服務器,服務器往回發的時候DST就是運營商路由器的公網IP和端口,然后路由器收到我們的服務器的應答在路由器內取查它的NATP表,IP和端口全部對上,進行跳躍,接下來的就是局域網內進行轉發的工作了。
我們一個局域網內可能同時有多臺主機要去訪問同一個服務器和端口,服務器返回的時候SRC都是相同的,它怎么把報文精準送達的呢?答案就是NATP表,每個路由器在對該局域網內的報文進行轉發的時候都會構建一一對應的映射表,我們的運營商路由器的公網IP是全球唯一的,加上不同的端口,我們的這個IP+端口就是全球唯一的!
當我們把數據發送給運用商的路由器,它就會在它的內部構建一一對應的映射關系,為我們的私人IP分配一個端口,如果端口沖突,就會自動分配一個端口,拿著這個IP+端口去訪問服務器就可以了。
所以如果我們的私人IP不向公網發請求的話,公網是無法隨意訪問我們的私人IP的,它沒有NAPT映射表就找不到我們對應的主機,數據自然無法傳輸。
但是內網可以訪問公網,因為在發送的過程中在路由器會建立NAPT表!返回的時候查NAPT表查到是哪個主機發的請求,再把請求返回給這個主機,我們就完成了內網對公網的訪問。
所以當我們聊微信的時候,你必須先登錄微信,對方也登錄微信,才可以進行聊天,不就是因為我們的公網無法直接訪問私人IP嗎?需要內網IP先向公網發送數據,公網才知道你這個主機在哪里?才好給你進行消息的轉發。
2.代理服務器
? ? ? ? 我們校園網上網需要認證,認證是什么?不就是申請一個私人IP嗎?
? ? ? ? 這樣我們訪問數據客戶端要先把請求交給校園網的機房,然后校園網構建應答,去互聯網去發送請求,當請求返回來的時候再返回給對應的客戶端。
? ? ? ? 代理服務器有緩存查找和內容過濾的功能,我們可以把一些常用的資源緩存在本地,提高訪問的效率,內容過濾就是當一些請求含有惡意網站的時候,不讓它響應,直接丟掉。
也可以進行訪問控制,比如不讓你看騰訊視頻,直接把騰訊視頻的請求識別攔截,直接干掉,就無法訪問這個網站了。
具體的應用是:
? ? ? ? 上面的服務器是我們的正向代理,是客戶端把請求全部交給服務器,讓服務器統一去訪問互聯網。
? ? ? ? 反向代理呢?反向代理就是,我們公司有很多服務器,然后為了統一調配,我們有一個前置Web服務器,服務器的響應全部交給Web服務器,然后有Web服務器再把響應返回給客戶端。
總而言之,正向代理是代表客戶端去和服務器。反向代理是代表服務器去和客戶端。
我們的CDN就是利用了反向代理
由于我們的前端代碼是公開的,也有對應的庫和框架,但是如果每一份前端代碼都帶一個庫和框架會浪費資源,所以把框架和庫放在一個服務器上,如果需要就直接向服務器發起請求。
CDN背后是一個服務器集群,我只需要訪問CDN,它幫助我和它連接的服務器進行交互。
3.內網穿透和內網打洞
? ? ? ? 內網穿透就是把本地的某個端口給到云服務器,然后映射一個端口比如8080,然后我另一臺主機如果想要時刻訪問這個主機,我拿著映射的端口8080就可以訪問到我們的本地主機了。
? ? ? ? 它主要運用于讓我們的能直接從公網訪問到內網。
? ? ? ? 而內網打洞呢,是利用NAT的特性,當我們把自己的報文發到同一臺服務器,然后服務器把它們的報文互相交換,各自拿到對端的IP和端口,這樣我們下一次進行訪問的話就不用通過服務器了,直接進行通信了。
? ? ? ? 本質就是互相拿到對方的入口路由器的IP和端口。
? ? ? ? 我們數據返回的時候也因為拿到了我們數據來的時候入口路由器的公網IP和端口,根據NAT技術進行轉發才進行應答的。
? ? ? ? 我們之所以無法訪問谷歌的網站是因為我們將我們的報文給我們的運營商的路由器它會對我們的鏈接做域名解析,發現你訪問的是黑名單的連接會直接丟掉,我們為了學習了解一下原理,報文在第一步就被干掉了,連公網都沒進去就沒了,所以我們需要對我們的報文進行加密,把我們得分請求放在加密的數據里面,然后把它交給一個既可以訪問國內的服務器,也可以訪問國外的服務器的地區,比如香港,把報文發給香港,然后香港去訪問外網,然后再把應答加密,發回給我們的主機,主機再對報文進行解密。
????????