計算機網絡(簡稱網絡)是由若干結點和鏈接這些結點的鏈路組成。結點能夠是計算機,集線器,交換機或路由器。html
(這圖些許有些草率了)各個主機之間經過交換機鏈接,而路由器負責鏈接多個不一樣的網絡 web
交換機工做於數據鏈路層。交換機內部的CPU會在每一個端口成功鏈接時,經過將MAC地址和端口對應,造成一張MAC表。在從此的通信中,發往該MAC地址的數據包將僅送往其對應的端口,而不是全部的端口。所以,交換機可用於劃分數據鏈路層廣播,即衝突域;但它不能劃分網絡層廣播,即廣播域。算法
簡略的歸納一下交換機的基本功能:數據庫
1. 像集線器同樣,交換機提供了大量可供線纜鏈接的端口,這樣能夠採用星型拓撲佈線。瀏覽器
2. 像中繼器、集線器和網橋那樣,當它轉發幀時,交換機會從新產生一個不失真的方形電信號。緩存
3. 像網橋那樣,交換機在每一個端口上都使用相同的轉發或過濾邏輯。服務器
4. 像網橋那樣,交換機將局域網分爲多個衝突域,每一個衝突域都是有獨立的寬帶,所以大大提升了局域網的帶寬。微信
5. 除了具備網橋、集線器和中繼器的功能之外,交換機還提供了更先進的功能,如虛擬局域網(VLAN)和更高的性能。markdown
老式的交換機只支持兩層(到MAC數據鏈路層),因此須要路由器去解析IP,而如今不少交換機已經支持了三層(到IP層)網絡
路由器一般位於OSI模型的網絡層,是鏈接兩個或多個網絡的硬件設備,在網絡間起網關的做用。它可以理解不一樣的協議,例如某個局域網使用的以太網協議,因特網使用的TCP/IP協議。能夠分析各類不一樣類型網絡傳來的數據包的目的地址,把非TCP/IP網絡的地址轉換成TCP/IP地址,或者反之;再根據選定的路由算法把各數據包按最佳路線傳送到指定位置。因此路由器能夠把非TCP/ IP網絡鏈接到因特網上。
原理
網絡中的設備相互通訊主要是用它們的IP地址,路由器只能根據具體的IP地址來轉發數據。計算機之間的通訊只能在具備相同網絡地址的IP地址之間進行,若是想要與其餘網段的計算機進行通訊,則必須通過路由器轉發出去。不一樣網絡地址的IP地址是不能直接通訊的,即使它們距離很是近,也不能進行通訊。路由器的多個端口能夠鏈接多個網段,每一個端口的IP地址的網絡地址都必須與所鏈接的網段的網絡地址一致。不一樣的端口它的網絡地址是不一樣的,所對應的網段也是不一樣的,這樣才能使各個網段中的主機經過本身網段的IP地址把數據發送到路由器上。
又稱協議轉換器,在網絡層以上實現網絡互聯
網關實質上是一個網絡通向其餘網絡的IP地址(網關的IP地址是具備路由功能的設備的IP地址)。
在各個設備之間的傳輸是須要MAC地址的。
又稱物理地址,MAC地址,是數據鏈路層和物理層使用的地址。實際上就是適配器地址或適配器標識符EUI-48,當這塊適配器插入某臺計算機後,適配器上的標識符就成爲了這臺機器的MAC地址了。
若是鏈接在局域網上的主機或路由器安裝有多個適配器,那麼這樣的主機或路由器就有多個MAC地址。當路由器經過適配器鏈接到局域網時,適配器的硬件地址就用來標誌路由器的某個接口,路由器若是須要同時鏈接到兩個網絡上,那麼他就須要兩個適配器和兩個硬件地址。
IP地址就是給每一臺主機(或路由器)的每個接口分配一個在全世界範圍內惟一的32位的標識符。IP地址是網絡層及以上各層使用的地址,是一種邏輯地址。
A/B/C類地址都由兩個固定的字段組成,其中第一個字段是網絡號(net-id),它標誌主機(或路由器)所鏈接到的網絡,一個網絡號在整個互聯網範圍內是惟一的。第二個字段是主機號(host-id),標誌該主機(路由器)。一臺主機號在它前面的網絡號所指明的網絡範圍內必須是惟一的。因而可知,一個IP地址在整個互聯網範圍內是惟一的。這三類地址都是單播地址,是最經常使用的。
子網
IP地址 = 網絡號 + 子網號 + 主機號
子網掩碼是一個網絡或一個子網的重要屬性,路由器交換信息時,必須將本身所在網絡的子網掩碼告訴相鄰路由器
A類地址的默認子網掩碼是255.0.0.0
B類地址的默認子網掩碼是255.255.0.0
C類地址的默認子網掩碼是255.255.255.0
常見的IP書寫方式如 192.168.100.1/24,24對應的實際上是子網掩碼
咱們常說的計算機的網絡模型,在各個協議層之間數據傳輸的時候經歷的過程是什麼
支持網絡應用協議和程序的運行,相似於微信/雲服務等
經常使用協議HTTP(超文本傳輸協議)、FTP(文件傳輸協議),SNMP ,SMTP(郵件),DNS,DHCP
DHCP動態主機配置協議,使用UDP協議工做, 給內部網絡自動分配IP地址。DHCP服務器先廣播一次,若無響應廣播四次,無響應則DHCP失敗
HTTP 協議主要由三大部分組成:
起始行(start line)
:描述請求或響應的基本信息;頭部字段(header)
:使用 key-value 形式更詳細地說明報文;消息正文(entity)
:實際傳輸的數據,它不必定是純文本,能夠是圖片、視頻等二進制數據。其中起始行和頭部字段併成爲 請求頭
或者 響應頭
,統稱爲 Header
;消息正文也叫作實體,稱爲 body
。HTTP 協議規定每次發送的報文必需要有 Header,可是能夠沒有 body,也就是說頭信息是必須的,實體信息能夠沒有。並且在 header 和 body 之間必需要有一個空行(CRLF)
相似於
GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Cache-Control: max-age=0
複製代碼
首部分爲請求首部和響應首部,而且部分首部兩種通用
通用字段 | 做用 |
---|---|
Cache-Control | 控制緩存的行爲 |
Connection | 瀏覽器想要優先使用的鏈接類型,好比 keep-alive |
Date | 建立報文時間 |
Pragma | 報文指令 |
Via | 代理服務器相關信息 |
Transfer-Encoding | 傳輸編碼方式 |
Upgrade | 要求客戶端升級協議 |
Warning | 在內容中可能存在錯誤 |
請求首部
請求首部 | 做用 |
---|---|
Accept | 能正確接收的媒體類型 |
Accept-Charset | 能正確接收的字符集 |
Accept-Encoding | 能正確接收的編碼格式列表 |
Accept-Language | 能正確接收的語言列表 |
Expect | 期待服務端的指定行爲 |
From | 請求方郵箱地址 |
Host | 服務器的域名 |
If-Match | 兩端資源標記比較 |
If-Modified-Since | 本地資源未修改返回 304(比較時間) |
If-None-Match | 本地資源未修改返回 304(比較標記) |
User-Agent | 客戶端信息 |
Max-Forwards | 限制可被代理及網關轉發的次數 |
Proxy-Authorization | 向代理服務器發送驗證信息 |
Range | 請求某個內容的一部分 |
Referer | 表示瀏覽器所訪問的前一個頁面 |
TE | 傳輸編碼方式 |
響應首部
響應首部 | 做用 |
---|---|
Accept-Ranges | 是否支持某些種類的範圍 |
Age | 資源在代理緩存中存在的時間 |
ETag | 資源標識 |
Location | 客戶端重定向到某個 URL |
Proxy-Authenticate | 向代理服務器發送驗證信息 |
Server | 服務器名字 |
WWW-Authenticate | 獲取資源須要的驗證信息 |
管理收發雙方數據分包傳輸的協議,對收到的報文進行差錯檢測
網絡層是爲主機之間提供邏輯通訊,而傳輸層爲應用進程之間提供端到端的邏輯通訊
TCP的傳輸單元是報文段,分爲首部和數據兩部分
應用層協議和傳輸層協議的對應關係: 爲了使不一樣操做系統的計算機的應用進程能夠互相通訊,傳輸層使用協議端口號,簡稱爲端口,雖然通訊的終點是應用進程,但只要把報文交到目的主機的目的端口,最後的交付目的進程由TCP或UDP完成。
常見端口
TCP報文首部的前20個字節是固定的,後面有4n字節是根據須要增長的選項。
對網絡數據包進行存儲轉發,路由器經過路由算法算出數據包從哪一個出口出去就是粗略的存儲轉發
網絡層向上只提供簡單靈活的,無鏈接的,盡最大努力交付的數據報服務,網絡層不提供服務質量的承諾,可能會出錯,丟失,重複,失序等問題,若是主機中的通訊須要可靠的,則由傳輸層負責(包括差錯處理,流量控制等)
主要的協議是IP,與IP協議配套使用的還有三個協議:
IP轉發
IP首部記錄的是源IP地址和目的IP地址,不會記錄通過的路由器的IP地址。
因此當路由器接收到一個待轉發的數據報,從路由表得出下一跳路由器的IP地址後,送交數據鏈路層的網絡接口軟件,網絡接口軟件用ARP將下一跳路由器的IP地址轉換成MAC地址,放在鏈路層的MAC幀的首部,而後根據這個硬件地址找到下一跳路由器。
路由表:每一行對應一個網絡,每一條路由記錄(目的網絡地址,子網掩碼,0下一跳地址)
複製代碼
管理數據包點對點(終端,路由器,switch轉換器等兩個物理機器)之間的發出與接收,wifi就是在數據鏈路層
數據鏈路層的協議數據單元——幀
APR協議
根據IP地址解析出MAC地址,能夠劃分在網絡層,也能夠劃分在數據鏈路層。
還有一箇舊的逆地址解析協議RARP,根據硬件地址找IP地址,如今由DHCP替代。
每一臺主機都有一個ARP高速緩存,裏面有本局域網上的各主機和路由器的IP地址到硬件地址的映射表,這個映射表會常常更新(新增或超時刪除:網絡中的主機是變更的,而更換網絡適配器物理地址也是變更的)
管理每個數據的每個比特在物理媒體(電纜,光纖,無線電波等)上是如何傳輸的
新鏈接的筆記本鏈接上網須要一個IP地址,本地路由器地址,DNS服務器地址。解析獲取這些數據使用的是DHCP協議(應用層),而支持DHCP的傳輸層協議是UDP
用戶的IP地址
,本地路由器IP地址
,DNS服務器的名字和IP地址
要將域名轉換成IP是由於計算機只認識數字(IP),而不認識域名。固然若是你輸入的直接是IP地址或者是有了DNS緩存,則不需這一步
DNS緩存指DNS返回了正確的IP以後,系統就會將這個結果(域名與IP的映射)臨時儲存起來。而且它會爲緩存設定一個失效時間
(例如N小時),在這N小時以內,當你再次訪問這個網站時,系統就會直接從你電腦本地的DNS緩存(瀏覽器,操做系統,路由等)中
把結果交還給你,而沒必要再去詢問DNS服務器,變相「加速」了網址的解析。固然,在超過N小時以後,系統會自動再次去詢問DNS服務
器得到新的結果。
因此,當你修改了 DNS 服務器,而且不但願電腦繼續使用以前的DNS緩存時,就須要手動去清除本地的緩存了
複製代碼
DNS查詢信息被建立封裝到UDP網絡段,IP數據報和Ethernet數據幀。爲了使數據幀能夠被髮送到路由器上,須要用ARP查出本地路由器MAC地址。(雖然上步知道了路由器的IP地址,但仍是須要路由器的MAC地址,才能把信息傳輸給路由器,固然若是DNS服務器是同一網段的,也能夠不經過路由器)
IP地址會被封裝在網絡層的IP首部
爲了使不一樣操做系統的計算機的應用進程能夠互相通訊,運輸層使用協議端口號,簡稱爲端口,雖然通訊的終點是應用進程,但只要把報文交到目的主機的目的端口,最後的交付目的進程由TCP或UDP完成。
這種協議棧層間的抽象的協議端口是軟件端口(應用層的各類協議進程與運輸實體進行層間交互的一種地址),和路由器或交換機上的硬件端口(硬件設備交互的接口)是不一樣的概念。而端口會被封裝在TCP的首部
而後從這開始就是老生長談的了,創建TCP鏈接
瀏覽器拿到數據會判斷狀態碼是什麼,若是是 200
那就繼續解析,若是 400
或 500
的話就會報錯,若是 300
的話會進行重定向,這裏會有個重定向計數器,避免過屢次的重定向,超過次數也會報錯。瀏覽器開始解析文件,若是是 gzip
格式的話會先解壓一下,而後經過文件的編碼格式知道該如何去解碼文件。
瀏覽器準備渲染進程,默認狀況下,Chrome
會爲每一個頁面分配一個渲染進程,也就是說,每打開一個新頁面就會配套建立一個新的渲染進程。
文件解碼成功後會正式開始渲染流程,先會根據 HTML
構建 DOM
樹,有CSS
的話會去構建 CSSOM
樹。 CSSOM
樹和 DOM
樹構建完成後會開始生成 Render
樹,Layout計算頁面元素的佈局、樣式等等諸多方面的東西。Painting開始繪圖,而後將頁面展現出來,當前這一塊也涉及迴流重繪方面的優化。