不一樣的HTTP 四

2021-10-18 15:27:18 字數 2679 閱讀 9264

第一層叫「鏈結層」(link layer),負責在乙太網、wifi 這樣的底層網路上傳送原始資料報,工作在網絡卡這個層次,使用 mac 位址來標記網路上的裝置,所以有時候也叫 mac 層。

第二層叫「網際層」或者「網路互連層」(internet layer),ip 協議就處在這一層。因為 ip 協議定義了「ip 位址」的概念,所以就可以在「鏈結層」的基礎上,用 ip 位址取代 mac 位址,把許許多多的區域網、廣域網連線成乙個虛擬的巨大網路,在這個網路裡找裝置時只要把 ip 位址再「翻譯」成 mac 位址就可以了。

第三層叫「傳輸層」(transport layer),這個層次協議的職責是保證資料在 ip 位址標記的兩點之間「可靠」地傳輸,是 tcp 協議工作的層次,另外還有它的乙個「小夥伴」udp。

tcp 是乙個有狀態的協議,需要先與對方建立連線然後才能傳送資料,而且保證資料不丟失不重複。而 udp 則比較簡單,它無狀態,不用事先建立連線就可以任意傳送資料,但不保證資料一定會發到對方。兩個協議的另乙個重要區別在於資料的形式。tcp 的資料是連續的「位元組流」,有先後順序,而 udp 則是分散的小資料報,是順序發,亂序收。

關於 tcp 和 udp 可以展開討論的話題還有很多,比如最經典的「三次握手」和「四次揮手」,一時半會很難說完,好在與 http 的關係不是太大,以後遇到了再詳細講解。

mac 層的傳輸單位是幀(frame),ip 層的傳輸單位是包(packet),tcp 層的傳輸單位是段(segment),http 的傳輸單位則是訊息或報文(message)。但這些名詞並沒有什麼本質的區分,可以統稱為資料報。

第一層:物理層,網路的物理形式,例如電纜、光纖、網絡卡、集線器等等;

第三層:網路層,相當於 tcp/ip 裡的網際層;

第四層:傳輸層,相當於 tcp/ip 裡的傳輸層;

第五層:會話層,維護網路中的連線狀態,即保持會話和同步;

第六層:表示層,把資料轉換為合適、可理解的語法和語義;

第七層:應用層,面向具體的應用傳輸資料。

第一層:物理層,tcp/ip 裡無對應;

第三層:網路層,對應 tcp/ip 的網際層;

第四層:傳輸層,對應 tcp/ip 的傳輸層;

第五、六、七層:統一對應到 tcp/ip 的應用層。

你可以把 http 利用 tcp/ip 協議棧傳輸資料想象成乙個發快遞的過程。

假設你想把一件毛絨玩具送給朋友,但你要先拿個塑膠袋套一下,這件玩具就相當於 http 協議裡要傳輸的內容,比如 html,然後 http 協議為它加乙個 http 專用附加資料。

你把玩具交給快遞小哥,為了保護貨物,他又加了層包裝再貼了個標籤,相當於在 tcp 層給資料再次打包,加上了 tcp 頭。

接著快遞小哥下樓,把包裹放進了三輪車裡,運到集散點,然後再裝進更大的卡車裡,相當於在 ip 層、mac 層對 tcp 資料報加上了 ip 頭、mac 頭。

之後經過漫長的運輸,包裹到達目的地,要卸貨再放進另一位快遞員的三輪車,就是在 ip 層、mac 層傳輸後拆包。

快遞員到了你朋友的家門口,撕掉標籤,去除了 tcp 層的頭,你朋友再拆掉塑膠袋包裝,也就是 http 頭,最後就拿到了玩具,也就是真正的 html 頁面。

這個比喻裡省略了很多 tcp/ip 協議裡的細節,比如建連、路由、資料切分與重組、錯誤檢查等,但核心的資料傳輸過程是差不多的。

http 協議的傳輸過程就是這樣通過協議棧逐層向下,每一層都新增本層的專有資料,層層打包,然後通過下層傳送出去。

接收資料是則是相反的操作,從下往上穿過協議棧,逐層拆包,每層去掉本層的專有頭,上層就會拿到自己的資料。

但下層的傳輸過程對於上層是完全「透明」的,上層也不需要關心下層的具體實現細節,所以就 http 層次來看,它不管下層是不是 tcp/ip 協議,看到的只是乙個可靠的傳輸鏈路,只要把資料加上自己的頭,對方就能原樣收到。

網域名稱是乙個有層次的結構,是一串用「.」分隔的多個單詞,最右邊的被稱為「頂級網域名稱」,然後是「二級網域名稱」,層級關係向左依次降低。

就像 ip 位址必須轉換成 mac 位址才能訪問主機一樣,網域名稱也必須要轉換成 ip 位址,這個過程就是「網域名稱解析」。

dns 的核心系統是乙個三層的樹狀、分布式服務,基本對應網域名稱的結構:

訪問根網域名稱伺服器,它會告訴你「com」頂級網域名稱伺服器的位址;

重定向,對外服務的網域名稱不變,而主機的ip位址任意改變;

不同的服務內部設定不同的二級網域名稱;

利用網域名稱實現負載均衡。

瀏覽器快取---->作業系統快取---->本地hosts檔案---->非核心(野生)dns伺服器 -->根網域名稱伺服器--->頂級網域名稱伺服器--->二級網域名稱伺服器..... 

不一樣的HTTP(一)

uri 即統一資源識別符號,作為網際網路上資源的唯一身份 http 即超文字傳輸協議,用來傳輸超文字。只允許用 get 動作從伺服器上獲取 html 文件,並且在響應請求之後立即關閉連線,功能非常有限 增加了 head post 等新方法 增加了響應狀態碼,標記可能的錯誤原因 引入了協議版本號概念 ...

不一樣的HTTP 二

一.http是什麼?1.首先,http 是乙個協議。不過,協議又是什麼呢?第一點,協議必須要有兩個或多個參與者,也就是 協 第二點,協議是對參與者的一種行為約定和規範,也就是 議 http 是乙個用在計算機世界裡的協議。它使用計算機能夠理解的語言確立了一種計算機之間交流通訊的規範,以及相關的各種控制...

不一樣的HTTP 三

cdn,全稱是 content delivery network 翻譯過來就是 內容分發網路 它應用了 http 協議裡的快取和 技術,代替源站響應客戶端的請求。爬蟲 crawler 實際上是一種可以自動訪問 web 資源的應用程式。html是 http 協議傳輸的主要內容之一,它描述了超文字頁面,...