從瀏覽器到服務器:TCP 段的網絡傳輸之旅

本文以簡化的網絡架構為例,詳細介紹了當你在瀏覽器中輸入網址(例如www.google.com)并按下回車鍵后,TCP段的完整傳輸過程。我們將探討DNS解析、ARP、TCP/IP封裝、PAT和路由如何協同工作,將數據從個人電腦通過局域網和廣域網發送到谷歌的服務器。需要注意的是,本文為了便于學習,展示的是一個基礎案例,而實際應用中的網絡實現往往更為復雜。

在這里插入圖片描述

1. DNS解析:將域名轉換為IP地址

當你輸入www.google.com這樣的域名時,瀏覽器首先需要將其解析為IP地址才能發起通信,步驟如下:

  1. 系統會檢查本地DNS緩存,包括/etc/hosts文件或操作系統緩存。
  2. 如果在本地緩存中未找到對應記錄,就會向電腦中配置的DNS服務器(通常由互聯網服務提供商或路由器提供)發送DNS查詢請求。
  3. DNS服務器會返回對應的IP地址(例如142.250.190.132)。
  4. 此時,瀏覽器已準備好與目標IP地址建立TCP連接。

2. 準備建立TCP連接

在發送數據包之前,系統需要做一些準備工作:

  1. 源IP地址:網卡的IP地址。
  2. 目的IP地址:從DNS服務器獲取到的IP地址。
  3. 源MAC地址:網卡的MAC地址。
  4. 目的MAC地址:
    • 如果目標設備與本機在同一子網,可通過ARP協議獲取其MAC地址。
    • 如果目標設備在不同子網(通常情況如此),數據包必須經過默認網關轉發,因此需要獲取網關的MAC地址。

系統如何獲取網關的MAC地址:通過ARP(地址解析協議)

  1. 利用子網掩碼判斷目標設備是否在子網外。
  2. 如果是,發送ARP廣播:“誰擁有192.168.1.1這個IP地址?”
  3. 網關會回復其MAC地址。
  4. 個人電腦會將該MAC地址緩存起來,以便后續進行幀封裝。

3. 數據封裝:四層協議棧

  1. 應用層(HTTP消息):
    • 例如,GET / HTTP/1.1請求。
  2. 傳輸層(TCP段):
    • 添加源端口和目的端口(例如,40000 → 443,443是HTTPS的默認端口),源端口是操作系統分配的動態端口(1024-65535,例如40000)。
    • 必要時對數據進行分段。
  3. 網絡層(IP數據包):
    • 添加源IP地址和目的IP地址。
    • 其他字段:TTL(生存時間)、校驗和等。
  4. 數據鏈路層(以太網幀):
    • 添加源MAC地址和目的MAC地址。
    • 包含一個帶有FCS(幀校驗序列)的尾部,用于錯誤檢查。

最后,完整的以太網幀會被發送到局域網交換機。

4. 通過交換機發送到網關(第二層)

交換機維護著一張MAC地址表。例如:00:1A:2B:3C:4D:5E → Gi0/1, VLAN 10,表示擁有該MAC地址的設備連接在Gi0/1端口。

  1. 當交換機從某個端口接收到幀時,會檢查源MAC地址與該端口的映射關系是否存在于表中。如果不存在,就將該映射添加到表中。
  2. 交換機檢查網關的目的MAC地址是否存在于表中。
  3. 如果不存在,交換機就會將幀從除源端口之外的所有端口發送出去。網關收到廣播幀后,會回復其MAC地址(例如00:1A:2B:3C:4D:5E)。交換機隨后會將這個MAC地址與端口的映射記錄到表中,這樣后續發往網關的幀就可以直接轉發(不再需要廣播)。

5. 網關執行PAT(端口地址轉換)

如果個人電腦使用私有IP地址,邊緣路由器(PAT設備)必須進行地址轉換:

  • 源IP地址:從私有IP地址(例如192.168.1.100)轉換為路由器的公網IP地址(例如203.0.113.10)。
  • 源端口:替換為臨時的公網端口(例如50000)。
  • PAT表條目:192.168.1.100:8080 → 203.0.113.10:50000。

之后,路由器會將修改后的IP數據包轉發到廣域網。

6. 廣域網中的路由器:尋找最短路徑

路由表的構建方式有兩種:手動配置(靜態路由)或通過動態路由協議自動生成(例如,用于內部網絡的OSPF協議、用于互聯網服務提供商之間通信的BGP協議)。這些協議通過交換路徑信息來找到最佳路由。每臺廣域網路由器都維護著一個路由表數據庫,該數據庫將目的IP網絡映射到:

  • “下一跳”路由器(路徑中的下一臺路由器)。
  • 出接口(用于發送數據包的物理端口)。
  • 度量值(例如跳數、帶寬、延遲),用于確定“最佳”路徑。

路由決策過程:

  1. 檢查IP頭部:TTL、校驗和等。
  2. 最長前綴匹配:將目的IP地址與最具體的網絡進行匹配。
  3. 選擇最佳路徑:基于成本最低的度量值。
  4. 更新頭部:
    • 遞減TTL值。
    • 將目的MAC地址替換為下一跳路由器的MAC地址。
  5. 轉發到下一跳路由器。

這個過程會逐跳重復,直到數據包到達目標所在的本地互聯網服務提供商。

7. 最終交付與解封裝

最后一臺路由器確定該數據包屬于某個直接連接的局域網段:

  1. 它將幀轉發到交換機或直接轉發到服務器。
  2. 服務器接收到幀后開始解封裝:
    • 數據鏈路層 → 網絡層 → TCP段 → HTTP消息。
  3. 該消息最終由應用程序(例如Nginx或Apache等Web服務器)處理。

8. 服務器如何響應

服務器的響應遵循與請求相同的封裝過程,但源IP地址、目的IP地址以及源端口、目的端口是反向的(例如,源IP地址:谷歌服務器的IP地址;目的IP地址:經過PAT轉換后的個人電腦私有IP地址)。

  • 服務器生成響應并發送回去。
  • 在第一臺路由器(PAT網關)處,利用PAT表進行映射:203.0.113.10:50000 → 192.168.1.100:8080。
  • 路由器相應地重寫IP地址和端口字段,并將數據包轉發回個人電腦。

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

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

相關文章

HCIE - 云計算拿下后的職業選擇如何規劃?

Hello!大家好,小編是一名專注 IT 領域的資深探索家。我們聊聊HCIE - 云計算,這個認證作為華為認證體系中云計算領域的專家級認證,標志著持有者具備企業級云架構設計、復雜云平臺運維及跨場景技術落地能力。但認證本身只是職業進階…

1-創建Vue3項目

創建Vue3項目前提 已安裝 18.3 或更高版本的 Node.js vue 官網 https://vuejs.org/ 創建一個 Vue 應用 ① 新建項目目錄,使用 VSCode 打開 VSCode 可安裝 Vue-Official 插件協助開發 ② 執行 create vue 指令創建 vue 應用 npm create vuelatest這一指令將…

Codex,Copilot 是什么

Codex是什么 Codex 是 OpenAI 研發的一款專注于代碼生成的大型語言模型,它可以根據自然語言描述自動編寫程序代碼,在軟件開發、自動化測試等領域展現出了強大的應用潛力。下面為你詳細介紹: 1. 核心功能 代碼生成:Codex 能夠依據自然語言指令生成代碼,像函數、類或者完整…

Typecho插件開發:自定義表單驗證規則addRule實戰指南

文章目錄 Typecho表單驗證進階:為插件和主題添加自定義addRule驗證規則 引言 一、Typecho表單驗證基礎 1.1 Typecho表單系統概述 1.2 addRule方法解析 二、自定義驗證規則實現 2.1 創建自定義驗證類 2.2 注冊自定義驗證規則 2.3 使用自定義驗證規則 三、高級驗證場景實現 3.1 …

數據分布是如何影響目標檢測精度的

文章目錄一、研究背景與目標模型效果提升數據集優化二、研究問題明細各方向的關聯性與核心邏輯1. 高質量數據集的高效篩選與主動學習應用2. 基于推理結果的數據補充與增強方向優化3. 多類別場景下目標尺度與模型精度的關聯性4. 損失函數與數據增強對精度的量化影響5. 目標類型專…

Python 網絡爬蟲 —— 代理服務器

一、會話(Session)(一)核心邏輯HTTP 本身無記憶,每次請求獨立。會話(Session) 就是為解決這問題,讓客戶端(瀏覽器)和服務器 “記住” 交互狀態(比…

Vue在線預覽Excel和Docx格式文件

前提:本次示例基于Vue2.x,所用插件為Vue-Office。 一、Vue-Office 插件簡介 Vue-Office 是一個一站式解決方案,支持多種 Office 文件格式的在線預覽,包括: Word(.docx)Excel(.xlsx、…

提升(Boosting)及 Python 示例

咱們結合這張圖,把 “提升” 想象成 “做錯題本 請老師補課” 的過程:第一波數據(最上面的圓圈):“第一次作業”假設你第一次做 100 道數學題(圖中圓圈里的綠點白點代表不同的題),做…

【生產實踐】Linux中NAS掛載丟失后提示“過舊的文件句柄”錯誤解決

太長不看版: 問題:nas掛載在系統里掉了,使用df或ls訪問目錄提示過舊的文件句柄解決過程: 和機房聯系,發現NAS服務器重啟了重新執行mount發現掛不上先umount掉當前掛載,再重新執行mount命令問題解決 umount …

JUnit4

JUnit4 介紹JUnit 是 Java 編程語言的單元測試框架,用于編寫和運行可重復的自動化測試。JUnit 特點:JUnit 是一個開放的資源框架,用于編寫和運行測試。提供注解來識別測試方法。提供斷言來測試預期結果。JUnit 測試允許你編寫代碼更快&#x…

Python-TCP編程-UDP編程-SocketServer-IO各種概念及多路復用-asyncio-學習筆記

序 欠4前年的一份筆記 ,獻給今后的自己。 網絡編程 Socket介紹 Socket套接字 Python中提供socket.py標準庫,非常底層的接口庫。 Socket是一種通用的網絡編程接口,和網絡層次沒有一一對應的關系。 協議族 AF表示Address Family,用于…

Mybatis-開發一個類似mybatisplus的mybatis擴展,該怎么入手?

開發一個類似mybatisplus的mybatis擴展,該怎么入手? 要開發一個類似于 MyBatis-Plus 的 MyBatis 擴展框架,你需要從以下幾個核心方面入手,逐步構建出一個功能完整、易用性強、兼容性好的增強型 MyBatis 框架。🧱 一、整…

深入了解linux系統—— 信號的捕捉

前言 信號從產生到處理,可以分為信號產生、信號保存、信號捕捉三個階段;了解了信號產生和保存,現在來深入了解信號捕捉。 信號捕捉 對于1-31號普通信號,進程可以立即處理,也可以不立即處理而是在合適的時候處理&#x…

twikitFKS: 基于 twikit 2.3.1 的改進版本

twikitFKS: 基于 twikit 2.3.1 的改進版本 項目概述 關于 twikit twikit 是一個優秀的 Twitter API 爬蟲庫,它的核心優勢在于無需 API Key即可訪問 Twitter 功能。通過網頁爬蟲技術,twikit 實現了: 發布推文和媒體內容搜索推文和用戶獲取…

C Primer Plus 第6版 編程練習——第9章(下)

7.編寫一個函數,從標準輸入中讀取字符,直到遇到文件結尾。程序要報告每個字符是否是字母。如果是,還要報告該字母在字母表中的數值位置。例如,c和C在字母表中的位置都是3。合并一個函數,以一個字符作為參數&#xff0c…

如何用文思助手改好一篇爛材料

在日常工作中,我們常常會遇到這樣的問題:因為工作要使用到之前寫的文章再看發現內容雜亂無章、或者收到的一些返稿內容質量差,不修改無法使用。但其實它們可能只是缺少了系統性的梳理與打磨。今天我們就來聊一聊,如何對一些不滿意…

VSCODE常規設置

摘要:用于新下載的vscode設置一些個人化的操作在 "Files: Auto Save" 下拉菜單中,選擇你想要的自動保存模式。常見的選項包括:"off":禁用自動保存。 "afterDelay":在你停止編輯一段時間…

2025秋招突圍戰:AI智能監考如何重構遠程筆試公平防線?

2025秋招季即將來臨,企業校招規模預計突破百萬量級,遠程筆試成為主流篩選方式。然而,傳統監考模式暴露出作弊行為難追溯、人力成本過高、數據維度單一等痛點,讓HR陷入“效率與公平”的兩難困境。牛客AI智能監考系統,通…

Python 基礎語法與數據類型(十三) - 實例方法、類方法、靜態方法

文章目錄1. 實例方法 (Instance Methods)1.1 特點與語法1.2 實例方法示例2. 類方法 (Class Methods)2.1 特點與語法2.2 類方法示例3. 靜態方法 (Static Methods)3.1 特點與語法3.2 靜態方法示例4. 三種方法的對比總結總結練習題練習題答案創作不易,請各位看官順手點…

Wireshark的安裝和基本使用

文章目錄一、Wireshark介紹二、Wireshark安裝三、Wireshark講解1.界面介紹(1)分組列表(2)分組詳情(3)分組字節流一、Wireshark介紹 Wireshark 是一款開源的網絡協議分析工具,能夠捕獲、過濾和分…