了解 HTTP 協(xié)議

《圖解 HTTP》 讀書筆記

HTTP 在哪里

網(wǎng)絡(luò)設(shè)備之間鱼填,包括計算機與網(wǎng)絡(luò)設(shè)備之間要互相通信,那么雙方必須要基于相同的協(xié)議。如何探測到通信目標(biāo)稽寒,如何發(fā)起通信,怎么傳遞通信信息确丢,怎么樣結(jié)束通信等這些規(guī)則要事先約定搂赋,這些規(guī)則稱為協(xié)議(protocol)。

我們通常使用的網(wǎng)絡(luò)是在 TCP/IP 協(xié)議族的基礎(chǔ)上運作的祷杈,而 HTTP 屬于它的一個子集胡桃。


TCP/IP 是互聯(lián)網(wǎng)相關(guān)的各類協(xié)議族的總稱

TCP/IP 分層

TCP/IP 協(xié)議族按層次劃分可以分為 4 個層次,分別是應(yīng)用層龟糕、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層坤塞。

  1. 應(yīng)用層決定了向用戶提供應(yīng)用服務(wù)時通信的活動。TCP/IP 協(xié)議族里面有不少應(yīng)用服務(wù)挣轨,比如 FTP (File Transfer Protocol,文件傳輸協(xié)議)和 DNS (Domain Name System,域名服務(wù)系統(tǒng)),HTTP 協(xié)議也是在應(yīng)用層封断。
  2. 傳輸層位于應(yīng)用層之下剪况,提供處于網(wǎng)絡(luò)連接中的兩臺網(wǎng)絡(luò)設(shè)備之間的數(shù)據(jù)傳輸该贾。傳輸層有 2 個常見的協(xié)議寇荧, TCP (Transmission Control Protocol,傳輸控制協(xié)議)和 UDP (User Data Protocol,用戶數(shù)據(jù)報協(xié)議)。
  3. 網(wǎng)絡(luò)層用來處理網(wǎng)絡(luò)上流動的數(shù)據(jù)包耙替。數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位除抛,該層規(guī)定了數(shù)據(jù)包通過怎么樣的傳輸路線到達(dá)對方翩迈。通常情況下 2 臺計算機之間會有數(shù)量不定的各類網(wǎng)絡(luò)設(shè)備或者計算機,網(wǎng)絡(luò)層的作用就是在眾多傳輸路徑中選擇一條合適的傳輸線路匈仗。
  4. 鏈路層用來處理了解網(wǎng)絡(luò)的硬件部分何鸡。包括硬件的設(shè)備驅(qū)動,網(wǎng)卡骡男,光纖及連接器等一切傳輸媒介龙亲。

把 TCP/IP 分層是有好處的鳄炉,各層之間的接口部分規(guī)劃好之后簸呈,每個層次的內(nèi)部設(shè)計可以自由變動而無需考慮上層和下層的任務(wù)轿腺。處理應(yīng)用層上的應(yīng)用只需考慮應(yīng)用層面的問題展父,而無需考慮下層的 TCP 協(xié)議或者 UDP 協(xié)議栖茉,也無需考慮數(shù)據(jù)包是如何到達(dá)對方篮绿,更無需考慮網(wǎng)絡(luò)的硬件部分構(gòu)成。

TCP/IP 通信傳輸流

TCP/IP 通信傳輸流

利用 TCP/IP 協(xié)議族進行通信時吕漂,會通過分層結(jié)構(gòu)與對方通信亲配。對于發(fā)送端從應(yīng)用層向下走到網(wǎng)絡(luò)層,對于接收端則從網(wǎng)絡(luò)層向上走到應(yīng)用層惶凝。

HTTP 請求

以應(yīng)用層的 HTTP 協(xié)議為例吼虎,客戶端在應(yīng)用層首先發(fā)出一個查看 www.baidu.com Web 頁面的 HTTP 請求。接著到了傳輸層苍鲜,TCP 協(xié)議從應(yīng)用層處收到的HTTP報文進行分割思灰,并在各個分割的報文加上傳輸層相關(guān)的 TCP 首部后轉(zhuǎn)發(fā)給網(wǎng)絡(luò)層。在網(wǎng)絡(luò)層混滔,給報文加上網(wǎng)絡(luò)層相關(guān)的 IP 首部后轉(zhuǎn)發(fā)給鏈路層洒疚,最后鏈路層給報文添加上以太網(wǎng)首部歹颓,并發(fā)送數(shù)據(jù)包。流程如上圖左邊部分所示油湖。
接收端的服務(wù)器在鏈路層接收到數(shù)據(jù)之后巍扛,數(shù)據(jù)按序往上層發(fā)送,直到應(yīng)用層乏德。當(dāng)接收端的應(yīng)用層收到數(shù)據(jù)的時候撤奸,服務(wù)器才算真正接收到客戶端發(fā)送的 HTTP 請求。流程如上圖右邊部分所示喊括。
發(fā)送端在層與層之間傳輸數(shù)據(jù)時胧瓜,每經(jīng)過一層都會被加上屬于該層的首部信息。接收端在層與層之間傳輸數(shù)據(jù)時郑什,每經(jīng)過一層都會把該層對應(yīng)的首部去掉贷痪。

IP 協(xié)議

  1. IP 協(xié)議。IP (Internet Protocol)協(xié)議位于網(wǎng)絡(luò)層蹦误,IP 協(xié)議的作用是把各種數(shù)據(jù)包傳送給對方劫拢。為了保證數(shù)據(jù)包的正常傳輸,IP 協(xié)議規(guī)定了 2 個重要的條件强胰,一個是 IP 地址舱沧,一個是 MAC 地址(Media Access Control Address)。IP 地址指明了網(wǎng)絡(luò)節(jié)點被分配到的地址偶洋,MAC 地址則是網(wǎng)卡的固定地址熟吏。IP 地址可以變換,MAC 地址則是燒錄在硬件里面玄窝,通常情況下無法更改牵寺。
  1. ARP 協(xié)議。網(wǎng)絡(luò)上的通信依賴于設(shè)備的 MAC 地址恩脂,網(wǎng)絡(luò)上通信的雙方不可能在通信開始前都彼此了解雙方的 MAC 地址帽氓,但是通信的發(fā)送端肯定是了解接收方的 IP 地址。為了解決獲取通信接收方的MAC 地址這個問題俩块,網(wǎng)絡(luò)設(shè)計人員設(shè)計了一個 ARP 協(xié)議(Address Resolution Protocol)黎休,這個 ARP 協(xié)議可以根據(jù)通信方的 IP 地址查出對應(yīng)的 MAC 地址。
  1. routing 機制玉凯。網(wǎng)絡(luò)傳輸線路千變?nèi)f化势腮,沒有人能夠全面掌握網(wǎng)絡(luò)中的實時傳輸狀況。為了能夠讓參與傳輸過程的計算機漫仆,路由器等網(wǎng)絡(luò)設(shè)備粗略的了解傳輸線路捎拯。設(shè)計人員設(shè)計了一個叫做路由(routing)的機制。就像快遞公司的送貨過程盲厌,寄快遞的人只要將自己的貨物送到快遞集散中心署照,就可以知道快遞公司是否肯收件發(fā)貨座菠,該快遞集散中心檢查貨物的地址,明確下一站該送往哪個區(qū)域的集散中心藤树。接著,下一站的集散中心自己會判斷貨物的下一個線路拓萌。
發(fā)送數(shù)據(jù)包

如上圖所示岁钓。發(fā)送端想往 IP 地址為 192.0.43.10 的地方發(fā)送數(shù)據(jù)包,步驟如下微王。

  1. 使用 ARP 協(xié)議解析出該 IP 地址對應(yīng)的 MAC 地址屡限。
  2. 將數(shù)據(jù)包發(fā)送給路由器,路由器根據(jù) routing 機制轉(zhuǎn)發(fā)數(shù)據(jù)包
  3. IP 地址為 192.0.43.10 的設(shè)備收到數(shù)據(jù)包

TCP 協(xié)議

按 TCP/IP 分層結(jié)構(gòu)來看炕倘,TCP 協(xié)議位于傳輸層钧大。設(shè)計人員設(shè)計 TCP 協(xié)議是為了在不可靠網(wǎng)絡(luò)中,提供可靠字節(jié)流傳輸服務(wù)罩旋。TCP 協(xié)議為了更容易傳輸大數(shù)據(jù)將大數(shù)據(jù)分割成以報文段(segment)為單位的數(shù)據(jù)包進行管理啊央,而且TCP 在數(shù)據(jù)包發(fā)送出去之后,會向?qū)Ψ酱_認(rèn)是否成功送達(dá)涨醋。為了確保數(shù)據(jù)能夠到達(dá)目標(biāo)瓜饥, TCP 協(xié)議設(shè)計了三次握手策略(three-way handshaking),除了三次握手之外浴骂,TCP 協(xié)議還有其他的各種手段來保證通行的可靠性乓土。


三次握手策略
  1. 發(fā)送端首先發(fā)送一個帶 SYN 標(biāo)志的數(shù)據(jù)包給對方
  2. 接收端收到后,回傳一個帶有 SYN/ACK 的數(shù)據(jù)包表示數(shù)據(jù)包確認(rèn)收到溯警。
  3. 發(fā)送端收到 SYN/ACK 之后趣苏,再發(fā)送一個帶 ACK 標(biāo)志的數(shù)據(jù)包。
  4. 握手結(jié)束

DNS 服務(wù)

用戶通常使用域名來訪問一些提供服務(wù)的服務(wù)器梯轻,而不是直接通過 IP 地址食磕。比如,我們要訪問百度的主頁喳挑,通常情況下我們會使用域名而不是 IP 來訪問芬为。設(shè)計人員為這個使用情景設(shè)計了一個 DNS 服務(wù)(Domain Name Server),DNS 提供了域名到 IP 地址之間的解析服務(wù)。

DNS 服務(wù)
  1. 發(fā)送端想訪問 www.hackr.jp 這個網(wǎng)頁
  2. 發(fā)送端使用 DNS 來查詢 www.hackr.jp 的 IP 地址
  3. 發(fā)送端取得 IP 地址之后蟀悦,發(fā)起請求

HTTP 請求的基本流程

HTTP 與以上提到的幾個協(xié)議的關(guān)系可以用下面這張圖來概括媚朦。


HTTP 協(xié)議與其他協(xié)議關(guān)系
  1. 客戶端想瀏覽 http://hackr.jp/xss/ 這個 web 頁面
  2. 客戶端使用 DNS 服務(wù)獲取域名 hackr.jp 對應(yīng)的 IP 地址
  3. 客戶端利用應(yīng)用層 HTTP 協(xié)議發(fā)起 HTTP 請求
  4. 客戶端利用傳輸層 TCP 協(xié)議將 HTTP 請求報文分割成報文段,添加 TCP 頭部信息
  5. 網(wǎng)絡(luò)層利用 IP 協(xié)議和 Routing 機制傳送數(shù)據(jù)包
  6. 服務(wù)端傳輸層的 TCP 協(xié)議重組請求報文
  7. 服務(wù)端應(yīng)用層的 HTTP 協(xié)議處理客戶端請求
  8. 服務(wù)端將請求結(jié)果返回
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末日戈,一起剝皮案震驚了整個濱河市询张,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浙炼,老刑警劉巖份氧,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯袄,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜗帜,警方通過查閱死者的電腦和手機恋拷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厅缺,“玉大人蔬顾,你說我怎么就攤上這事∠嫔樱” “怎么了诀豁?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長窥妇。 經(jīng)常有香客問我舷胜,道長,這世上最難降的妖魔是什么活翩? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任烹骨,我火速辦了婚禮,結(jié)果婚禮上材泄,老公的妹妹穿的比我還像新娘展氓。我一直安慰自己,他們只是感情好脸爱,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布遇汞。 她就那樣靜靜地躺著,像睡著了一般簿废。 火紅的嫁衣襯著肌膚如雪空入。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天族檬,我揣著相機與錄音歪赢,去河邊找鬼。 笑死单料,一個胖子當(dāng)著我的面吹牛埋凯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扫尖,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼白对,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了换怖?” 一聲冷哼從身側(cè)響起甩恼,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后条摸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悦污,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年钉蒲,在試婚紗的時候發(fā)現(xiàn)自己被綠了切端。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡顷啼,死狀恐怖踏枣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情线梗,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布怠益,位于F島的核電站仪搔,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蜻牢。R本人自食惡果不足惜烤咧,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抢呆。 院中可真熱鬧煮嫌,春花似錦、人聲如沸抱虐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恳邀。三九已至懦冰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谣沸,已是汗流浹背刷钢。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乳附,地道東北人内地。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像赋除,于是被迫代替她去往敵國和親阱缓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的举农,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的茬祷,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,037評論 6 174
  • 個人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,051評論 0 8
  • 簡介 用簡單的話來定義tcpdump祭犯,就是:dump the traffic on a network秸妥,根據(jù)使用者...
    保川閱讀 5,941評論 1 13
  • 同樣的,本文篇幅也比較長沃粗,先來一張思維導(dǎo)圖粥惧,帶大家過一遍。 一最盅、 計算機網(wǎng)絡(luò)體系結(jié)構(gòu)分層 二突雪、 TCP/IP 基礎(chǔ)...
    滌生_Woo閱讀 64,932評論 38 1,038
  • 目前做iOS開發(fā)以來,使用的都是HTTP協(xié)議涡贱,所幸現(xiàn)在接觸到的東西還是之前的知識儲備所能夠應(yīng)付的咏删,正好趁著還沒有入...
    猿鹿說閱讀 672評論 0 2