結合五層網絡結構講一下用戶在瀏覽器輸入一個網址并按下回車后到底發生了什么?

文章目錄

  • 實際應用
    • 第一步:用戶在瀏覽器輸入 `www.baidu.com` 并按下回車
      • 1. 瀏覽器觸發域名解析(DNS查詢)
    • 第二步:DNS請求的逐層封裝與傳輸
      • 1. 應用層(DNS協議)
      • 2. 傳輸層(UDP協議)
      • 3. 網絡層(IP協議)
      • 4. 數據鏈路層(以太網/Wi-Fi協議)
      • 5. 物理層(比特流傳輸)
    • 第三步:數據包如何找到DNS服務器?
      • 1. 局域網內傳輸(數據鏈路層)
      • 2. 跨網絡傳輸(網絡層)
      • 3. 最終抵達DNS服務器
    • 第四步:瀏覽器發起HTTP請求
      • 1. 建立TCP連接(傳輸層)
      • 2. 封裝HTTP請求(應用層)
      • 3. 逐層封裝
    • 第五步:數據包穿越互聯網到達百度服務器
      • 1. 路由器的逐跳轉發(網絡層)
      • 2. 服務器接收請求
    • 第六步:響應數據返回客戶端
      • 1. 反向封裝與傳輸
      • 2. 瀏覽器渲染頁面
    • 關鍵協作點總結
    • 補充技術細節

上一篇文章對計算機網絡的五層結構做了簡單的介紹,需要的可以看這里

計算機網絡的五層結構(物理層、數據鏈路層、網絡層、傳輸層、應用層)到底是什么?

實際應用

看到這里的時候我相信大家會有和我一樣的疑惑,這五層結構到底是干嘛用的,到底有什么用,我平時有用到這東西的機會嗎?

那么下面我給大家準備了一個實際的例子來讓大家對這五層機構可以更好的了解。
我下面的例子是用訪問瀏覽器中的某一個網址來舉例,在我訪問一個網址,比如www.baidu.com的時候,讓我們看看這五層結構都是怎么發揮作用的?

第一步:用戶在瀏覽器輸入 www.baidu.com 并按下回車

1. 瀏覽器觸發域名解析(DNS查詢)

  • 為什么需要DNS?
    計算機無法直接通過域名 www.baidu.com 通信,必須將其轉換為 IP 地址(如 14.215.177.38)。這一過程稱為 DNS解析

  • 具體流程

    • Step 1:檢查本地緩存
      瀏覽器緩存 → 系統緩存(如Windows的hosts文件) → 路由器緩存 → 若命中,直接使用緩存的IP地址。
    • Step 2:未命中緩存 → 發起遞歸查詢
      若本地無緩存,瀏覽器調用操作系統的 DNS解析器(應用層組件),生成一個 DNS請求報文,內容為:
      查詢域名:www.baidu.com
      查詢類型:A記錄(IPv4地址)
      

第二步:DNS請求的逐層封裝與傳輸

1. 應用層(DNS協議)

  • DNS協議使用 UDP(傳輸層協議),目標端口為 53,源端口隨機(如 50001)。
  • 封裝后的 DNS報文 交給傳輸層處理。

2. 傳輸層(UDP協議)

  • 添加 UDP頭部:包含源端口(50001)、目標端口(53)、長度和校驗和。
  • 此時數據變為:
    [UDP頭部 | DNS請求報文]
    

3. 網絡層(IP協議)

  • 添加 IP頭部:包含源IP(你的設備私有IP,如 192.168.1.100)、目標IP(默認DNS服務器IP,如 8.8.8.8)。
  • 此時數據變為:
    [IP頭部 | UDP頭部 | DNS請求報文]
    

4. 數據鏈路層(以太網/Wi-Fi協議)

  • 添加 幀頭部:包含源MAC地址(你的網卡MAC,如 AA:BB:CC:DD:EE:FF)和目標MAC地址(默認網關的MAC地址,如路由器的 11:22:33:44:55:66)。
  • 此時數據變為:
    [幀頭 | IP頭部 | UDP頭部 | DNS請求報文 | 幀尾]
    

5. 物理層(比特流傳輸)

  • 將幀轉換為 電信號(網線)無線電波(Wi-Fi),通過物理媒介發送到路由器(默認網關)。

第三步:數據包如何找到DNS服務器?

1. 局域網內傳輸(數據鏈路層)

  • 目標MAC地址是路由器:你的設備通過ARP協議(地址解析協議)提前獲取了默認網關(路由器)的MAC地址。
  • 交換機的作用:如果設備通過網線連接到交換機,交換機會根據MAC地址表將幀轉發到路由器對應的端口。

2. 跨網絡傳輸(網絡層)

  • 路由器收到數據包后,剝離幀頭部,檢查IP頭部:
    • 目標IP是 8.8.8.8(DNS服務器),不屬于本地局域網。
    • 路由器通過 NAT(網絡地址轉換) 將源IP(192.168.1.100)替換為路由器的公網IP(如 120.230.10.20)。
    • 路由器根據 路由表 選擇下一跳(如ISP的核心路由器),重新封裝幀頭部(目標MAC變為下一跳設備的MAC),轉發數據包。

3. 最終抵達DNS服務器

  • 數據包經過多個路由器的接力轉發(每經過一個路由器,源/目標MAC地址會變化,但IP地址不變),最終到達DNS服務器 8.8.8.8
  • DNS服務器解析請求,查詢 www.baidu.com 的IP地址,生成 DNS響應報文(包含 14.215.177.38),按原路返回給你的設備。

第四步:瀏覽器發起HTTP請求

1. 建立TCP連接(傳輸層)

  • 獲取到百度服務器的IP地址后,瀏覽器通過 TCP協議 與目標IP(14.215.177.38)的 80 端口(HTTP)或 443 端口(HTTPS)建立連接。
  • TCP三次握手
    • 客戶端發送 SYN 報文(序列號x)。
    • 服務器回復 SYN-ACK 報文(序列號y,確認號x+1)。
    • 客戶端發送 ACK 報文(確認號y+1)。
  • 此時TCP連接建立完成,雙方確認通信能力。

2. 封裝HTTP請求(應用層)

  • 瀏覽器生成 HTTP請求報文,例如:
    GET / HTTP/1.1
    Host: www.baidu.com
    User-Agent: Chrome/120.0
    
  • 如果是HTTPS,還需進行 TLS握手(交換密鑰、驗證證書等)。

3. 逐層封裝

  • 傳輸層:將HTTP報文拆分為多個 TCP段,添加TCP頭部(源端口、目標端口、序列號、確認號)。
  • 網絡層:添加IP頭部(源IP為公網IP 120.230.10.20,目標IP 14.215.177.38)。
  • 數據鏈路層:添加幀頭部(源MAC為路由器出口MAC,目標MAC為下一跳設備MAC)。
  • 物理層:轉換為比特流傳輸。

第五步:數據包穿越互聯網到達百度服務器

1. 路由器的逐跳轉發(網絡層)

  • 每個路由器根據目標IP 14.215.177.38 查詢路由表,選擇最優路徑(如通過BGP協議判斷)。
  • 數據包可能經過:
    • 家庭路由器 → ISP骨干網路由器 → 百度數據中心邊緣路由器 → 百度內部核心路由器。

2. 服務器接收請求

  • 百度服務器接收到數據包后,反向解封裝:
    • 物理層 → 數據鏈路層(剝離幀頭) → 網絡層(檢查IP地址) → 傳輸層(重組TCP段) → 應用層(處理HTTP請求)。
  • 服務器生成 HTTP響應報文(狀態碼200,包含HTML、CSS、JS等資源)。

第六步:響應數據返回客戶端

1. 反向封裝與傳輸

  • 服務器將HTTP響應按相同流程封裝(IP頭部源/目標地址調換,TCP端口調換),通過互聯網返回。
  • 客戶端路由器接收后,通過NAT將目標IP從公網IP 120.230.10.20 轉換為內網IP 192.168.1.100,再轉發給你的設備。

2. 瀏覽器渲染頁面

  • 瀏覽器接收HTTP響應后,解析HTML/CSS/JS,加載圖片等資源(可能觸發多次HTTP請求)。
  • 最終渲染出完整的百度首頁。

關鍵協作點總結

  1. DNS解析
    • 應用層協議(DNS) → 傳輸層(UDP) → 網絡層(IP路由) → 數據鏈路層(MAC尋址) → 物理層傳輸。
  2. HTTP請求
    • 應用層(HTTP) → 傳輸層(TCP連接) → 網絡層(IP跨網) → 數據鏈路層(幀轉發) → 物理層傳輸。
  3. 數據封裝與解封裝
    • 每經過一層設備(如路由器、交換機),數據包的外層封裝會被修改(如MAC地址、IP NAT),但核心內容(如HTTP報文)保持不變。

補充技術細節

  • NAT(網絡地址轉換)
    家庭路由器將內網設備的私有IP(如 192.168.1.100)轉換為公網IP(如 120.230.10.20),解決IPv4地址不足問題。
  • MTU與分片
    若數據包超過鏈路層最大傳輸單元(如1500字節),網絡層會將其分片,目標端重組。
  • ARP協議
    設備通過ARP廣播查詢IP地址對應的MAC地址(如“誰是 192.168.1.1?請告訴我你的MAC!”)。

通過以上流程,你可以清晰看到:五層模型并非獨立運作,而是像流水線一樣協同工作,最終實現“輸入網址 → 看到網頁”的復雜過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80585.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80585.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80585.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入理解N皇后問題:從DFS到對角線優化

N皇后問題是一個經典的算法問題,要求在NN的棋盤上放置N個皇后,使得它們互不攻擊。本文將全面解析該問題的解法,特別聚焦于DFS算法和對角線優化的數學原理。 問題描述 在NN的國際象棋棋盤上放置N個皇后,要求: 任意兩個…

Java面試場景篇:分布式鎖的實現與組件詳解

互聯網大廠Java求職者面試:分布式鎖的實現與組件 在一場緊張而又充滿挑戰的面試中,Java架構師馬架構正面對著一位經驗豐富的面試官。以下是他們之間關于分布式鎖實現方式及相關問題的對話。 第一輪提問 面試官:請介紹一下分布式鎖的概念。…

關于使用 讀光-文字檢測-DBNet行檢測模型-中英-通用領域,版本問題

關于使用 讀光-文字檢測-DBNet行檢測模型-中英-通用領域,版本問題 pip install modelscopeSuccessfully installed certifi-2025.4.26 charset-normalizer-3.4.1 colorama-0.4.6 idna-3.10 modelscope-1.25.0 requests-2.32.3 tqdm-4.67.1 urllib3-2.4.0 pip insta…

刷刷刷刷刷RCE

云曦歷年考核 25年春開學考 RCCCE 開啟題目進行代碼審計 GET傳參傳入一個參數cmd&#xff0c;但對參數內容給了黑名單進行過濾 $blacklist /bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|"|\>|\<|\%|\$/i; ls、cat等都…

2024江西ICPC部分題解

題目列表 A - Maliang Learning PaintingC - LiarG - Multiples of 5H - ConvolutionJ - Magic MahjongK - Magic Tree A - Maliang Learning Painting 題目來源&#xff1a;A - Maliang Learning Painting 思路分析 這是個簽到題&#xff0c;直接輸出abc即可 #include<b…

Pytorch圖像數據轉為Tensor張量

PyTorch的所有模型&#xff08;nn.Module&#xff09;都只接受Tensor格式的輸入&#xff0c;所以我們在使用圖像數據集時&#xff0c;必須將圖像轉換為Tensor格式。PyTorch提供了torchvision.transforms模塊來處理圖像數據集。torchvision.transforms模塊提供了一些常用的圖像預…

為什么vllm能夠加快大模型推理速度?

vLLM加速大模型推理的核心技術原理可分解為以下關鍵創新點&#xff1a; 一、?內存管理革命&#xff1a;PagedAttention? KV Cache分頁機制? 將傳統連續存儲的KV Cache拆分為非連續內存頁&#xff0c;類似操作系統內存分頁管理&#xff0c;消除內存碎片并實現動態分配。13B…

第十一章 多態

多態是面向對象開發過程中一個非常重要的概念。 11.1 多態概述 11.1.1 什么是多態 多態&#xff08;polymorphism&#xff09;&#xff0c;從字面理解是“多種形態&#xff0c;多種形式”&#xff0c;是一種將不同的特殊行為泛化為當個特殊記號的機制。 多態從實現的角度可劃…

RNN——循環神經網絡

一.基本結構 1.目標&#xff1a;處理序列數據&#xff08;時間序列&#xff0c;文本&#xff0c;語音等&#xff09;&#xff0c;捕捉時間維度上的依賴關系 核心機制&#xff1a;通過隱藏狀態&#xff08;hidden State&#xff09;傳遞歷史信息&#xff0c;每個時間步的輸入包…

性能提升手段--池化技術

看到hadoop代碼里有ByteBufferPool,使用池子來避免頻繁創建、銷毀ByteBuffer,減輕GC壓力,提高性能。 順便總結一下池化技術 一、什么是池化技術??? ??池化(Pooling)?? 是一種資源管理策略,通過??預先創建并復用資源??(如數據庫連接、線程、內存對象等)來提…

數據安全和合規性市場分析

一、什么是數據安全和合規性 在數據安全和合規性方面&#xff0c;存在著一系列重要的法律、法規和行業標準&#xff0c;這些規定了組織如何收集、存儲、處理和保護個人數據及其他敏感信息。企業之所以要遵守這些規定&#xff0c;是出于多方面的考量&#xff0c;既有法律責任&a…

【每日八股】復習計算機網絡 Day4:TCP 協議的其他相關問題

文章目錄 昨日內容復習已經建立了 TCP 連接&#xff0c;客戶端突然出現故障怎么辦&#xff1f;什么時候用長連接&#xff1f;短連接&#xff1f;TCP 的半連接隊列與全連接隊列&#xff1f;什么是 SYN 攻擊&#xff1f;如何避免&#xff1f;TIME_WAIT 的作用&#xff1f;過多如何…

React:<></>的存在是為了什么

1. <></> 是什么&#xff1f; <></> 是 React 的Fragment&#xff08;片段&#xff09;語法糖&#xff0c;等價于 <React.Fragment></React.Fragment>。 2. 它的作用 主要作用&#xff1a; 允許你在組件里返回多個元素&#xff0c;而不需…

cron定時任務

cron定時任務 一、Cron表達式的定義 基礎結構 Cron表達式是由空格分隔的6或7個字段組成的字符串&#xff0c;格式為&#xff1a; 秒 分 時 日 月 星期 [年]其中&#xff0c;年通常可以被省略 字段說明&#xff1a; 秒&#xff08;0-59&#xff09; 秒字段表示每分鐘的哪一…

分布式之易混淆概念

昨天寫UE寫的破防了&#xff0c;忘了寫文章&#xff0c;今天補一下分布式的一些概念。&#x1f61a; 在軟件架構領域&#xff0c;微服務、領域驅動設計&#xff08;DDD&#xff09;和分布式系統是三個高頻且容易被混淆的概念。許多開發者誤以為它們是“同一件事的不同說法”&a…

量子躍遷:Vue組件安全工程的基因重組與生態免疫(完全體終局篇)

開篇數字免疫系統的范式革命 在2025年某國際金融峰會期間&#xff0c;黑客組織利用量子計算技術對全球37個交易系統發起協同攻擊。傳統安全組件在2.7秒內集體失效&#xff0c;造成每秒超18億美元的交易漏洞。這場數字"切爾諾貝利"事件促使我們重新定義前端安全——組…

Operating System 實驗七 Linux文件系統實驗

實驗目標: 使用dd命令創建磁盤鏡像文件ext2.img并格式化為ext2文件系統,然后通過mount命令掛載到Linux主機文件系統。查看ext2文件系統的超級塊的信息,以及數據塊的數量、數據塊的大小、inode個數、空閑數據塊的數量等信息 在文件系統中創建文件xxxxx.txt(其中xxxxx為你的學…

模型識別能力錘煉及清單

大腦將注意力分配給需要消耗腦力的活動&#xff0c;通過學習技能&#xff0c;大腦也能更輕松的工作。這個時候&#xff0c;大腦負責管理注意力控制和努力控制的區域活動會大幅減少。沉浸式學習是學習一門新的語言的最佳方式&#xff0c;也是深入洞察錯綜復雜商業環境的絕佳途徑…

Android 混合開發實戰:統一 View 與 Compose 的淺色/深色主題方案

整個應用&#xff08;包括 View 和 Compose 部分&#xff09;的淺色/深色模式保持一致。以下是完整的解決方案&#xff1a; 全局配置方案 1. 基礎主題設置 在 res/values/themes.xml 和 res/values-night/themes.xml 中定義統一的主題&#xff1a; <!-- values/themes.x…

QT開發技術【QT實現桌面右下角消息】

一、效果 ![ 二、彈窗主體部分 noticewidget /* ** File name: NoticeWidget.h ** Author: ** Date: 2025-04-25 ** Brief: 通知欄控件 ** Copyright (C) 1392019713qq.com All rights reserved. */#include "../Include/NoticeWidget.h"…