面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?
生活随笔
收集整理的這篇文章主要介紹了
面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- @[TOC](文章目錄)
- 1:解析URL網址,從而生成發送給Web服務器的Http請求信息
- 2:真實地址查詢-----(DNS域名解析)
- 3:調用協議棧
- 4:可靠的傳輸 TCP
- 5:遠程定位--IP地址
- 6:兩點傳輸--獲取MAC地址
- 7:網卡--出口
- 8:送別者--交換機
- 9:出境大門--路由器
- 10:相互扒皮--服務端與客戶端
- @[TOC](文章目錄)
- 1:解析URL網址,從而生成發送給Web服務器的Http請求信息
- 2:真實地址查詢-----(DNS域名解析)
- 3:調用協議棧
- 4:可靠的傳輸 TCP
- 5:遠程定位--IP地址
- 6:兩點傳輸--獲取MAC地址
- 7:網卡--出口
- 8:送別者--交換機
- 9:出境大門--路由器
- 10:相互扒皮--服務端與客戶端
1:解析URL網址,從而生成發送給Web服務器的Http請求信息
URL 進行解析之后,瀏覽器確定了 Web 服務器和文件名,接下來就是根據這些信息來生成 HTTP 請求消息了。這里的文件指的就是我們要訪問服務器中某個目標文件。
2:真實地址查詢-----(DNS域名解析)
通過瀏覽器解析 URL 并生成 HTTP 消息后,需要委托操作系統將消息發送給 Web 服務器。但在發送之前,還有一項工作需要完成,那就是查詢服務器域名對于的 IP 地址,因為委托操作系統發送消息時,必須提供通信對象的 IP 地址。
比如我們打電話的時候,必須要知道對方的電話號碼,但由于電話號碼難以記憶,所以通常我們會將對方電話號 + 姓名保存在通訊錄里。
所以,== 有一種服務器就專門保存了 Web 服務器域名與 IP 的對應關系,它就是 DNS 服務器==。
域名解析的過程:
其實就是先訪問== 本地的DNS服務器==,看是否解析過該域名,解析過那就直接取過來;如果沒有的話那就去請求== 根域名服務器==,根域名服務器給一個方向后去== 頂級域名服務器中查找IP;然后頂級域名服務器然你去權威域名服務器==找對應的IP,找到為止。
3:調用協議棧
- 通過 DNS 獲取到 IP 后,就可以把 HTTP 的傳輸工作交給操作系統中的協議棧;
- 應用程序(瀏覽器)通過調用 Socket 庫,來委托協議棧工作。
- 協議棧的上半部分有兩塊,分別是負責收發數據的 TCP 和 UDP 協議,它們兩會接受應用層的委托執行收發數據的操作。-- 協議棧的下面一半是用 IP 協議控制網絡包收發操作,在互聯網上傳數據時,數據劊被切分成一塊塊的網絡包,而將網絡包發送給對方的操作就是由 IP 負責的。
4:可靠的傳輸 TCP
- 在 HTTP 傳輸數據之前,首先需要 TCP 建立連接,TCP 連接的建立,通常稱為三次握手,三次握手目的是保證雙方都有發送和接收的能力。這里需要注意的是我們三次握手的過程的中發送的TCP報文,也是需要經過經過網絡層和鏈路層的封裝的,要不這條TCP報文如何傳輸啊,都不知道路
- 如果Http請求消息過長,這時 TCP 就需要把 HTTP 的數據拆解一塊塊的數據發送,而不是一次性發送所有數據。
- TCP報文的生成: TCP 協議里面會有兩個端口,一個是瀏覽器監聽的端口(通常是隨機生成的),一個是 Web 服務器監聽的端口(HTTP 默認端口號是 80, HTTPS 默認端口號是 443)。
- 在雙方建立了連接后,TCP 報文中的數據部分就是存放 HTTP 頭部 + 數據,組裝好 TCP 報文之后,就需交給下面的網絡層處理。
5:遠程定位–IP地址
- TCP 模塊在執行連接、收發、斷開等各階段操作時,都需要委托 IP 模塊將數據封裝成網絡包發送給通信對象。
- 在 IP 協議里面需要有源地址 IP 和 目標地址 IP:
- 源地址IP,即是客戶端輸出的 IP 地址;
- 目標地址,即通過 DNS 域名解析得到的 Web 服務器 IP。
- HTTP 是經過 TCP 傳輸的,所以在 IP 包頭的協議號,要填寫為 06(十六進制),表示協議為 TCP。
- IP報文的生成:(IP的協議里是TCP協議,TCP協議中的數據部分包含HTTP請求消息)。
6:兩點傳輸–獲取MAC地址
- 每臺設備都有一個MAC地址,我們在交換機中傳輸信息的過程中,需要知道交換機MAC地址。
- 如何獲取發送方的MAC,和接收方的MAC呢?
- 發送方MAC 地址是在網卡生產時寫入到 ROM 里的,只要將這個值讀取出來寫入到 MAC 頭部就可以了。
- 接收方的MAC地址 是先查詢ARP緩存,如果有記錄該IP地址對應的MAC地址那就直接獲取,如果沒有的話,那就喊唄(廣播)
7:網卡–出口
- IP 生成的網絡包只是存放在內存中的一串二進制數字信息,沒有辦法直接發送給對方。因此,我們需要將數字信息轉換為電信號,才能在網線上傳輸,也就是說,這才是真正的數據發送過程。
- 負責執行這一操作的是網卡,要控制網卡還需要靠網卡驅動程序。這樣將數字信號轉換成電信號才能傳輸出去。
8:送別者–交換機
- 交換機的設計是將網絡包原樣轉發到目的地。交換機工作在 MAC 層,也稱為二層網絡設備。
- 交換機根據自身的MAC表,將這個數據包轉發到路由器。
9:出境大門–路由器
- 經過路由器的話,那么我們就可以進入其他網絡了
- 路由器和交換機的區別
網絡包經過交換機之后,現在到達了路由器,并在此被轉發到下一個路由器或目標設備。
這一步轉發的工作原理和交換機類似,也是通過查表判斷包轉發的目標。
不過在具體的操作過程上,路由器和交換機是有區別的。
因為路由器是基于 IP 設計的,俗稱三層網絡設備,== 路由器的各個端口都具有 MAC 地址和 IP 地址==;
而交換機是基于以太網設計的,俗稱二層網絡設備,交換機的端口不具有 MAC 地址。 - 路由器的基本原理:
路由器的端口具有 MAC 地址,因此它就能夠成為以太網的發送方和接收方;同時還具有 IP 地址,從這個意義上來說,它和計算機的網卡是一樣的。
當轉發包時,首先路由器端口會接收發給自己的以太網包,然后路由表查詢轉發目標,再由相應的端口作為發送方將以太網包發送出去。 - 路由器的包接收操作:
檢查 MAC 頭部中的接收方 MAC 地址,看看是不是發給自己的包,如果是就放到接收緩沖區中,否則就丟棄這個包。
總的來說,路由器的端口都具有 MAC 地址,只接收與自身地址匹配的包,遇到不匹配的包則直接丟棄。 - 查詢路由表確定輸出端口
完成包接收操作之后,路由器就會去掉包開頭的 MAC 頭部。
MAC 頭部的作用就是將包送達路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,當包到達路由器 之后,MAC 頭部的任務就完成了,于是 MAC 頭部就會被丟棄。
接下來,路由器會根據 MAC 頭部后方的 IP 頭部中的內容進行包的轉發操作。 - 路由器的發送操作
- 首先,我們需要根據路由表的網關列判斷對方的地址。
- 如果網關是一個 IP 地址,則這個IP 地址就是我們要轉發到的目標地址,還未抵達終點,還需繼續需要路由器轉發。-
- 如果網關為空,則 IP 頭部中的接收方 IP 地址就是要轉發到的目標地址,也是就終于找到 IP 包頭里的目標地址了,說
明已抵達終點。
- 知道對方的 IP 地址之后,接下來需要通過 ARP 協議根據 IP 地址查詢 MAC 地址,并將查詢的結果作為接收方 MAC 地
址。路由器也有 ARP 緩存,因此首先會在 ARP 緩存中查詢,如果找不到則發送 ARP 查詢請求。獲取到MAC地址后
再將MAC地址封裝到數據包上。 - 網絡包完成后,接下來會將其轉換成電信號并通過端口發送出去。這一步的工作過程和計算機也是相同的。
- 發送出去的網絡包會通過交換機到達下一個路由器。由于接收方 MAC 地址就是下一個路由器的地址,所以交換機會根據
這一地址將包傳輸到下一個路由器。接下來,下一個路由器會將包轉發給再下一個路由器,經過層層轉發之后,網絡包
就到達了最終的目的地。 - == 在網絡包傳輸的過程中,源 IP 和目標 IP 始終是不會變的,一直變化的是 MAC 地址,因為需要 MAC 地址在以太網內進行兩個設備之間的包傳輸。==
- 首先,我們需要根據路由表的網關列判斷對方的地址。
10:相互扒皮–服務端與客戶端
- 數據包抵達服務器后,服務器會先扒開數據包的 MAC 頭部,查看是否和服務器自己的 MAC 地址符合,符合就將包收起來。
- 接著繼續扒開數據包的 IP 頭,發現 IP 地址符合,根據 IP 頭中協議項,知道自己上層是 TCP 協議。
- 于是,扒開 TCP 的頭,里面有序列號,需要看一看這個序列包是不是我想要的,如果是就放入緩存中然后返回一個 ACK,如果不是就丟棄。TCP頭部里面還有端口號, HTTP 的服務器正在監聽這個端口號。
- 于是,服務器自然就知道是 HTTP 進程想要這個包,于是就將包發給 HTTP 進程
- 服務器的 HTTP 進程看到,原來這個請求是要訪問一個頁面,于是就把這個網頁封裝在 HTTP 響應報文里。
- HTTP 響應報文也需要穿上 TCP、IP、MAC 頭部,不過這次是源地址是服務器 IP 地址,目的地址是客戶端 IP 地址。
- 穿好頭部衣服后,從網卡出去,交由交換機轉發到出城的路由器,路由器就把響應數據包發到了下一個路由器,就這樣跳啊跳
- 最后跳到了客戶端的城門把手的路由器,路由器扒開 IP 頭部發現是要找城內的人,于是把包發給了城內的交換機,再由交換機轉發到客戶端。
- 客戶端收到了服務器的響應數據包后,同樣也非常的高興,客戶能拆快遞了!
- 于是,客戶端開始扒皮,把收到的數據包的皮扒剩 HTTP 響應報文后,交給瀏覽器去渲染頁面,一份特別的數據包快遞,就這樣顯示出來了
- 最后,客戶端要離開了,向服務器發起了 TCP 四次揮手,至此雙方的連接就斷開了。
總結
以上是生活随笔為你收集整理的面试必问系列之在浏览器中输入URL后到网页显示 其间发生了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中关村科金发布企业知识大模型,推出Age
- 下一篇: AOC 推出新款 Q27G10E 显示器