【網絡通信 -- 直播】IM 學習系列 -- 網絡通信協議簡介(HTTP 協議 一)

【網絡通信 -- 直播】IM 學習系列 -- 網絡通信協議簡介(HTTP 協議 一)

【1】HTTP 簡介

HTTP 即超文本傳輸協議,HTTP 是一個在計算機世界裏專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規範,HTTP 是一個協議,是一種計算機間通信的規範,不存在“單獨的實體”,HTTP 不是互聯網,HTTP 不是編程語言,HTTP 不是 HTML,注意,HTML 是超文本的載體,是一種標記語言,使用各種標籤描述文字、圖片、超鏈接等資源,並且可以嵌入 CSS、JavaScript 等技術實現複雜的動態效果;

HTTP 是協議
第一點,協議必須要有兩個或多個參與者,也就是“協”;
第二點,協議是對參與者的一種行爲約定和規範,也就是“議”;

HTTP 是傳輸協議
第一點,HTTP 協議是一個雙向協議;
第二點,數據雖然是在 A 和 B 之間傳輸,但並沒有限制只有 A 和 B 這兩個角色,允許中間有“中轉”或者“接力”;

HTTP 超文本

"文本"(Text)表示 HTTP 傳輸的不是 TCP/UDP 這些底層協議裏被切分的雜亂無章的二進制包,而是完整的、有意義的數據,可以被瀏覽器、服務器這樣的上層應用程序處理;
“超文本”即“超越了普通文本的文本”,它是文字、圖片、音頻和視頻等的混合體,最關鍵的是含有“超鏈接”,能夠從一個“超文本”跳躍到另一個“超文本”,形成複雜的非線性、網狀的結構關係;

【2】HTTP 相關的概念

1. 瀏覽器本質上是 HTTP 協議中的請求方,使用 HTTP 協議獲取網絡上的各種資源;
2. Web 服務器是 HTTP 協議中的應答方,是 HTTP 協議裏響應請求的主體;
3. CDN(“Content Delivery Network”)即“內容分發網絡”,它應用 HTTP 協議裏的緩存和代理技術,代替源站響應客戶端的請求,
可以緩存源站的數據,讓瀏覽器的請求不用到達源站服務器,直接在“半路”就可以獲取響應,如果 CDN 的調度算法很優秀,便可以找到離用戶最近的節點,大幅度縮短響應時間,提供網絡加速,負載均衡、安全防護、邊緣計算、跨運營商網絡等功能,能夠成倍地“放大”源站服務器的服務能力;
4. “爬蟲”(Crawler)是一種可以自動訪問 Web 資源的應用程序;
5. HTML 是 HTTP 協議傳輸的主要內容之一,它描述了超文本頁面,用各種“標籤”定義文字、圖片等資源和排版佈局,最終由瀏覽器“渲染”出可視化頁面;HTML 目前有兩個主要的標準,HTML4 和 HTML5,廣義上的 HTML 通常是指 HTML、JavaScript、CSS 等前端技術的組合,能夠實現比傳統靜態頁面更豐富的動態頁面;
6. Web Service 是一種由 W3C 定義的應用服務開發規範,使用 client-server 主從架構,通常使用 WSDL(Web服務描述語言,Web Services Description Language) 定義服務接口,使用 HTTP 協議傳輸 XML(可擴展標記語言) 或 SOAP(簡單對象訪問協議) 消息,即它是一個基於 Web(HTTP)的服務架構技術,既可以運行在內網,也可以在適當保護後運行在外網;
7. WAF “網絡應用防火牆”,它是應用層面的“防火牆”,專門檢測 HTTP 流量,是防護 Web 應用的安全技術;

【3】HTTP 相關的協議

URI/URL

URI(Uniform Resource Identifier),統一資源標識符,能夠唯一地標記互聯網上資源;
URL(Uniform Resource Locator), 統一資源定位符,即“網址”,是 URI 的一個子集;

http://nginx.org/en/download.html

URI 主要有三個基本的部分構成:協議名,即訪問該資源應當使用的協議,在這裏是“http”;主機名,即互聯網上主機的標記,可以是域名或 IP 地址,在這裏是“nginx.org”;路徑,即資源在主機上的位置,使用“/”分隔多級目錄,在這裏是“/en/download.html”;

HTTPS

HTTPS HTTP over SSL/TLS”,即運行在 SSL/TLS 協議上的 HTTP;SSL/TLS 是一個負責加密通信的安全協議,建立在 TCP/IP 之上,所以也是個可靠的傳輸協議,可以被用作 HTTP 的下層;SSL(“Secure Socket Layer”)由網景公司發明,當發展到 3.0 時被標準化,改名爲 TLS(“Transport Layer Security”);

代理

代理(Proxy) 是 HTTP 協議中請求方和應答方中間的一個環節,既可以轉發客戶端的請求,也可以轉發服務器的應答;
代理的種類常見的有:匿名代理,完全“隱匿”了被代理的機器,外界看到的只是代理服務器;透明代理,在傳輸過程中是“透明開放”的,外界既知道代理,也知道客戶端;正向代理,靠近客戶端,代表客戶端向服務器發送請求;反向代理,靠近服務器端,代表服務器響應客戶端的請求;
代理在傳輸過程中插入了一個“中間層”在該中間層可以做一些處理,比如:負載均衡,把訪問請求均勻分散到多臺機器,實現訪問集羣化;內容緩存,暫存上下行的數據,減輕後端的壓力;安全防護,隱匿 IP, 使用 WAF 等工具抵禦網絡攻擊,保護被代理的機器;數據處理,提供壓縮、加密等額外的功能;

DNS

DNS(Domain Name System)“域名系統” 用有意義的名字來作爲 IP 地址的等價替代,DNS 中,“域名”(Domain Name)又稱爲“主機名”(Host);
域名的形式
域名是一個有層次的結構,是一串用“.”分隔的多個單詞,最右邊的被稱爲“頂級域名”,然後是“二級域名”,層級關係向左依次降低,最左邊的是主機名,通常用來表明主機的用途,比如“www”表示提供萬維網服務、“mail”表示提供郵件服務,域名本質上還是個名字空間系統,使用多級域名就可以劃分出不同的國家、地區、組織、公司、部門,每個域名都是獨一無二的,可以作爲一種身份的標識;

DNS 架構

DNS 的核心繫統是一個三層的樹狀、分佈式服務,基本對應域名的結構:根域名服務器(Root DNS Server),管理頂級域名服務器,返回“com”“net”“cn”等頂級域名服務器的 IP 地址;頂級域名服務器(Top-level DNS Server),管理各自域名下的權威域名服務器,比如 com 頂級域名服務器可以返回 apple.com 域名服務器的 IP 地址;權威域名服務器(Authoritative DNS Server),管理自己域名下主機的 IP 地址,比如 apple.com 權威域名服務器可以返回 www.apple.com 的 IP 地址;

核心 DNS 系統之外,減輕域名解析壓力的方式 : 首先,許多大公司、網絡運行商都會建立自己的 DNS 服務器,作爲用戶 DNS 查詢的代理,代替用戶訪問核心 DNS 系統,這些“野生”服務器被稱爲“非權威域名服務器”,可以緩存之前的查詢結果,如果已經有了記錄,就無需再向根服務器發起查詢,直接返回對應的 IP 地址;其次,操作系統裏也會對 DNS 解析結果做緩存,若之前訪問過“www.apple.com”,那麼下一次在瀏覽器裏再輸入這個網址的時候就不會再訪問 DNS 而是直接在操作系統裏獲取對應的 IP 地址;此外,操作系統裏還有一個特殊的“主機映射”文件,在 Linux 裏是“/etc/hosts”,在 Windows 裏是“C:\WINDOWS\system32\drivers\etc\hosts”,如果操作系統在緩存裏找不到 DNS 記錄,就會找這個文件;

域名解析

主機向本地域名服務器的查詢一般都是採用遞歸查詢;
遞歸查詢即如果主機所詢問的本地域名服務器不知道被查詢的域名的IP地址,那麼本地域名服務器就以DNS客戶的身份,向其它根域名服務器繼續發出查詢請求報文(即替主機繼續查詢),而不是讓主機自己進行下一步查詢,遞歸查詢返回的查詢結果或者是所要查詢的IP地址,或者是報錯,表示無法查詢到所需的IP地址;
本地域名服務器向根域名服務器的查詢的迭代查詢;
迭代查詢即當根域名服務器收到本地域名服務器發出的迭代查詢請求報文時,要麼給出所要查詢的IP地址,要麼告訴本地服務器下一步應當向哪一個域名服務器進行查詢,然後本地服務器進行後續的查詢;根域名服務器通常是把自己知道的頂級域名服務器的IP地址告訴本地域名服務器,讓本地域名服務器再向頂級域名服務器查詢,頂級域名服務器在收到本地域名服務器的查詢請求後,要麼給出所要查詢的IP地址,要麼告訴本地服務器下一步應當向哪一個權限域名服務器進行查詢;最後,知道了所要解析的IP地址或報錯,然後把這個結果返回給發起查詢的主機;

域名的擴展功能
1. “重定向”,因爲域名代替了 IP 地址,所以可以讓對外服務的域名不變,而主機的 IP 地址任意變動,當主機有情況需要下線、遷移時,可以更改 DNS 記錄,讓域名指向其他的機器;
2. 因爲域名是一個名字空間,所以可以使用 bind9 等開源軟件搭建一個在內部使用的 DNS,作爲名字服務器,這樣各種內部服務就都用域名來標記,比如數據庫服務都用域名“mysql.inner.app”,商品服務都用“goods.inner.app”,發起網絡通信時也就不必再寫死的 IP 地址,可以直接使用域名,而且這種方式也兼具了“重定向”;
3. 基於域名實現的負載均衡
3.1 因爲域名解析可以返回多個 IP 地址,所以一個域名可以對應多臺主機,客戶端收到多個 IP 地址後,就可以自己使用輪詢算法依次向服務器發起請求,實現負載均衡;
3.2 域名解析可以配置內部的策略,返回離客戶端最近的主機,或者返回當前服務質量最好的主機,這樣在 DNS 端把請求分發到不同的服務器,實現負載均衡;
4. “域名屏蔽”,對域名直接不解析,返回錯誤,讓你無法拿到 IP 地址,也就無法訪問網站;
5. “域名劫持”,也叫“域名污染”,你要訪問 A 網站,但 DNS 返回 B 網站;

參考致謝
本博客爲博主的學習實踐總結,並參考了衆多博主的博文,在此表示感謝,博主若有不足之處,請批評指正。

【1】透視HTTP協議

【2】chronolaw / http_study

【3】DNS原理總結及其解析過程詳解(遞歸查詢+迭代查詢)

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