多域名解析及延伸知識點

我們想象一下,用戶輸入網址進行HTTP請求,DNS服務器找到域名對應的IP地址,連接IP地址對應的服務器,那麼服務器是如何知道用戶是通過A域名還是B域名找到自己的呢?
本文旨在通過通信協議的例子讓你更加深入瞭解HTTP以及一些小技巧,包括反向代理,HTTP報文,三次握手,DNS解析,DNS污染/劫持,HTTPS等。需要注意的是,本文碎片化的知識點實際上涵蓋了很多方向和領域,大家可以針對自己的愛好進行有深度的涉獵。

從實際應用到理論支持,我們由"深"入"淺",透過現象尋找本質。

反向代理解析多域名

反向代理的作用就是作爲中間層來訪問內網站點,防止了直接將內容服務器暴露給外網,起到了安全防護的作用,也同樣可以實現負載均衡、限流。

多域名解析及延伸知識點

我們看一下Nginx上多域名配置的代碼:

server
{
    listen 80;
    server_name A.com;
    location / {
        proxy_pass http://localhost:11111;
    }
}
server
{
    listen 80;
    server_name B.com;
    location / {
        proxy_pass http://localhost:22222;
    }
}

如上代碼所示,A/B域名分別對應主機11111/22222端口。
可以看出,反向代理Nginx可以獲取到HTTP請求中的域名。由此可以推斷出DNS解析並不是單純的將域明轉換成IP地址。那麼我們看一下HTTP報文是什麼樣子。

HTTP報文

我們打開Chrome監控HTTP請求,可以看到下圖所示:
多域名解析及延伸知識點

其中request中Host屬性在整個HTTP請求中始終存在,並且不可更改,這也就是Nginx反向代理服務器所判斷域名的依據。

HTTP的Request和Response的全部屬性如下圖所示:
多域名解析及延伸知識點

TCP三次握手

HTTP協議(應用層)是基於TCP協議(傳輸層)的,並非從屬關係。HTTP通信同樣需要三次握手。
舉個例子:

A:請求通話。(SYN)
B:請求通話。收到。(SYN+ACK)
A:收到。(ACK)

多域名解析及延伸知識點

其中SYN代表同步,ACK代表確認。三次握手本身的設計就像是一個君子協議,之所以進行三次握手而非兩次握手是爲了解決網絡延遲所造成的重新分組問題(可以理解爲聊天過程中網絡延遲導致的答非所問)。
三次握手與項目管理中的溝通模型一樣:
多域名解析及延伸知識點

細細體會,現實溝通中的"傳遞信息","告知收悉","反饋信息"和三次握手是一樣的。

DNS解析

DNS服務器是key-value(域名-IP地址)對應的緩存服務器,當HTTP請求中host記錄不在本地緩存時,向根(root)服務器轉移解析請求。

DNS劫持

劫持DNS服務器,進而修改其解析結果。

DNS污染

對DNS查詢進行***檢測,發現與黑名單上匹配的請求,該服務器就僞裝成DNS服務器,給查詢者返回虛假結果。它利用了UDP協議是無連接不可靠性。

DNS解析、CDN加速、***網關,這些通信層的東西面涉及到很多知識,我就不過多闡述了。我只說一點,大多數成熟的***技術都是基於互聯網協議的。

HTTP與HTTPS

HTTPS中的s代表secure,也可以理解爲HTTPS = HTTP + SSL
HTTP默認80端口,HTTPS默認443端口。同時,HTTPS對傳輸的數據進行加密。
更直觀的感受是,訪問HTTPS站點需要確認服務器的公鑰和加密的證書,進而保證了數據傳輸的安全。

通信協議層的東西比較散,我並沒有在上下文中進行較強的因果邏輯推斷,因而顯得知識點比較碎片化。通信層的東西本身和編程關係不大,但這些容易被程序員忽略的知識,往往像是一個紐帶一樣連接編程概念中的各個知識體系。希望本文對你有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章