從瀏覽器輸入一個網址開始討論網絡傳輸的工做原理

確實,從瀏覽器輸入一個地址以後,當你按下Enter鍵以後,一系列奇怪的魔法就在發生,這是一個老生長談的問題了,但能真的仔細知道所有倒是一個艱難的事情。html

網絡架構之五層架構

在開始以前,仍是必須知道網絡的架構基礎的。目前網絡架構分爲兩種,七層架構和五層架構,本人更喜歡五層架構(主要是容易記,😄)。這個分層如圖:瀏覽器

左側對應的七層架構圖,中間的是五層架構圖,右側對應的是每一個層上具備的協議。緩存

705728-20160424234827195-1493107425.png

咱們使用的應用大多都是構建於應用層之上,必然,瀏覽器也不例外。服務器

如今開始,地址欄鍵入地址,按下Enter鍵,就從這裏開始吧(這裏我就以鍵入百度https://www.baidu.com做爲事例網絡

先簡單的認爲數據傳遞是從發送方ip到接收方(百度)ip的一個行爲,那雙方ip是如何產生的。架構

發送方ip的產生 --- DHCP協議

關於本本機的ip從何而來,主要有兩種方式,1. 手動配置 2. 自動配置框架

而自動配置,簡單一些進行介紹,這個要從DHCP協議提及,先看如下兩張圖google

image.png

手動配置方式:經過手動配置ip地址,子網掩碼。可是這種方式並不適用普通用戶,普通用戶不可能知道當前網絡的網絡號,主機號,以及子網掩碼應該是多少。並且這種配置方式很是的不靈活,在同一個子網下的ip被固定,其餘人沒法使用。另外一點則是這臺設備跟換了一個網絡環境,就沒有辦法上網了。spa

image.png

動態配置:動態配置依託於DHCP協議,在每一個子網下,會有一臺DHCP服務器,存放着改子網的全部可配置ip,當咱們打開電腦後,電腦會自動發發出一個請求ip的地址的廣播到DHCP服務器,服務器會檢查是否還存有可分配的ip,若有則響應給請求的電腦,並標記該ip已經被使用。(至於這些ip之後如何被釋放,從新稱爲可分配的ip則是另外一個話題)。htm

來看一下請求的ip的報文,經過5層網絡框架的結構後是如何的?

image.png

接收方(百度)ip的產生 --- DNS解析

在瀏覽器地址欄中輸入的是一個網址(百度),這個網址易於人的記憶,可是對於電腦而已就是頭痛的事情。全部這個時候就須要DNS了,將它解析成一個電腦可以理解的ip地址。

它是如何工做的:

每一個子網下都會有一臺DNS服務器,在這臺服務器中存放着域名和ip地址的映射表,從這裏能夠獲取到百度的ip地址。這裏只是說了這個DNS資源服務器的存在。那我是經過何種途徑獲取到DNS服務器中的ip地址呢?

這裏就要說到以太網的信息傳遞方式——廣播,首先在互聯網發送任何一個消息,都會通過網絡五層架構的封裝,造成一條能夠被廣播的信息。以下圖這種方式:

protocol.png

DNS解析的請求報文最終被封裝以下:其中的Http報文部分,則包括了發送端的網址域名等信息。DNS服務器會獲取到域名,到服務器中的域名ip映射表比較,若是有則響應報文,回到發送方,發送發送方也就知道了目標地址的ip信息。若是沒有則會對消息轉發到公共DNS服務器,好比google的DNS服務器,獲取以後也會在本子網的DNS服務進行緩存,以便如下次請求。這即是DNS解析的過程

image.png

到這裏你已經這道了雙方通訊的基礎ip的產生了,那開始下一步的研究吧

是否在同一個子網下

在知道發送方和接收方的ip以後,第一件是則是判斷雙方是否在一個子網絡下,若是在同一個子網下則不須要跨過網關,直接在子網內進行數據傳輸。

如何判斷是否在一個子網下,其實很簡單,只須要用你的子網掩碼和雙方的ip按位與,獲得的結果若是是同樣的,則在同一個網絡內,不同則再也不同一個網絡中。這裏的區別是,不在同一個子網下,發送的報文數據包中的以太網首部中的MAC地址是接收方網卡的MAC地址,不是接收方主機的地址。

路由表

判斷出發送方和接收方再也不同一個子網下,就必然須要來到穿越茫茫負責的網絡,來到對方的身邊,那是根據什麼才能到接收方的身邊?—— 路由器

image.png

上圖是一張基本的網絡架構圖,每一個雲表明這一個子網,箭頭表明着數據的流向。從中能夠看出數據是由路由進行轉發的。其實每一個路由中會維護一個路由表,會存放着這子網的ip,以及經過一些列複雜的路由探測,找到一條通往接收方網絡的路徑,從而發送給目標子網。

子網下獲取接收方的MAC地址 —— ARP協議

通過路由等操做,報文信息已經來到了接收方的子網中了,那如何知道具體那一臺主機呢。其實經過ip地址的主機號已經能夠肯定是那一臺主機了,那此時是否就能夠進行通訊了呢?—— 不能

之前我一樣有這樣的疑問,都找到你了,爲何不能通訊呢。用一個比方,千里迢迢到美國找到一個叫作「特朗普」的總統,他是惟一的,根據他的ip(美國(至關於網絡號)-特朗普(至關於主機號))。雖然找到了他,可是語言通,沒法溝通😢。此時就須要一個雙方都可以接受的東西進行交流,這個就是MAC地址的做用。

根據ip地址找到MAC地址的協議,稱爲ARP協議(地址解析協議)

在每一個子網下,會有一臺服務器保存這子網下全部ip和MAC地址的映射。這個時候須要獲取MAC地址,就會向子網內發送一個廣播,獲取ip對應主機MAC地址,基本結構以下

image.png

此時,跨過千山萬水,發送方已經到接收方面前,能竊竊私語了。

數據響應

數據進行交互邏輯處理後,則會將數據返回給接收方,這個過程稱爲響應。咱們來看下瀏覽器的inpect下response header中的信息。其中每一個字段都表明了某種信息。

如:
Expires:表示緩存的過時時間
Remote Address: 則是DNS解析後的遠程地址

image.png
image.png

當拿到了響應的信息後,剩下的事情則是瀏覽器要作的。加載資源,解析html,構建抽象語法樹,渲染頁面,以及解析JS等。

總結

本文旨在熟悉消息在網絡中的傳輸過程當中會經歷什麼樣的過程。對其中每一種協議並無進行深刻的研究,若是展開,每一種協議都值得用一篇文章來介紹。固然也能夠根據提到的再去深刻挖掘,必然讓你更加熟悉網絡的每個環節。

相信,事物的發展都是有其規律的。知道爲何會更得心應手。

相關文章
相關標籤/搜索