文章目錄
- 1. URL 決議
- 2. DNS 決議
- 3. TCP 連接
- 4. 發送HTTPS請求
- 5. IP 首部和 MAC 首部
- 6. 網卡
- 7. 交換機
- 8. 路由器
- 9. 目標服務器
1. URL 決議
首先瀏覽器做的第一步操作就是對URL進行決議,
以 https://blog.csdn.net/weixin_48922154 為例:
- 先通過該URL檢查是否是合法的URL,通過URL檢測使用的協議,請求的服務器以及請求的檔案,
- 再檢查快取,如果有該內容的瀏覽器快取,那么就不需要請求服務器而直接顯示頁面,
- 否則,就通過決議這些資訊之后,使用這些資訊生成HTTP請求訊息,包括:
- 請求行:請求的方法,請求URL和HTTP版本號,
- 首部:
- 請求首部:例如 ① Accept:用戶代理可處理的媒體型別;② User-Agent:客戶端程式資訊等,
- 通用首部:例如 ① Cache-Control:控制快取的行為;Date:創建報文的日期時間等,
- 物體首部:例如 ① Content-Encoding:物體主體適用的編碼方式;② Content-Length:物體主體的大小((單位:位元組),
- 之后是一個空行,再之后就是請求的具體請求體資料,
2. DNS 決議
通過瀏覽器決議URL并生成HTTP報文之后,需要通過委托作業系統將訊息發送給相應Web服務器,
DNS決議就是將服務器的域名轉化為IP地址的程序,因為所有節點都通過IP進行唯一標識,而IP記憶困難所以使用域名進行轉化,
DNS在應用層中已經詳細闡述了,具體內容在:
DNS決議程序
為什么DNS使用UDP?:
- 因為TCP握手揮手耗費大量性能,例如查詢冷門的網站,則從查詢根域名系統到頂級域名系統,再到權威域名系統,每次都要進行一次握手和揮手操作,
- 但是當DNS查詢資料包很大的時候,會使用TCP傳輸,
3. TCP 連接
- 在傳輸層中,如果HTTP訊息也就是TCP的資料欄位大于MSS報文最大長度,則會將資料切分成MSS長度的若干段,再給每一段封裝上TCP首部,形成一個傳輸層報文段,

- 通過三次握手和目標行程建立連接之后,將報文段交給網路層進行傳輸,詳細步驟在另一篇博客,
TCP 協議具體內容
4. 發送HTTPS請求
如果選擇的協議型別是HTTPS而不是HTTP,那么在建立連接之后會自動跳轉到HTTPS網站,
HTTPS是將HTTP和TCP層中間加上了一層TLS安全傳輸層,每次HTTP報文的發送和接受,會經過安全傳輸層的加密和解密,以此來達到安全的目的,
因為HTTP和HTTPS的埠不同,所以服務端和客戶端之間會建立新的TCP連接,連接建立好之后進行安全傳輸的TLS四次握手,握手成功之后就可以進行安全的傳輸,詳細內容在下面這兩篇博客,
HTTPS
網路安全
5. IP 首部和 MAC 首部
首先需要將傳輸層傳遞來的報文段再封裝為資料報,加上IP首部欄位,
- 如IP版本,首部長度,協議型別是TCP;
- TCP協議已經將報文段切分成MSS大小,所以不需要進行IP分片,所以不需要填入識別符號、標志欄位和片偏移欄位;
- 之后添加上源IP地址和目標IP地址,
- 如果本機有多個網卡,那應該選用哪個?
這時候可以使用路由表來查詢:使用route -n命令得到路由表

通過目的地址(Destination) 和子網掩碼(Genmask) 進行與操作得到地址和目標地址匹配,如果能匹配的上,則使用該IP,如果不能匹配則使用0.0.0.0的默認路由,
- 如此操作就生成了IP資料報并傳遞給鏈路層,
鏈路層將IP資料報封裝為鏈路層幀,加上MAC首部:
- MAC首部主要包括發送方MAC地址,以及接收方MAC地址和協議欄位,
- 在TCP/IP通信中,協議型別只有:
- IP協議:0800
- ARP協議:0806
- 發送方MAC地址是網卡生產的時候寫入到ROM里面的,直接讀出填入MAC源地址欄位即可,
- 對于接收方MAC地址則是通過以下方式獲取:
- 先向高速快取中查詢是否有目標IP地址對應的MAC地址,如果沒有,
- 向同一鏈路廣播一個ARP請求包,內容包括本機的IP地址以及目標主機的IP地址,
- 如果某個路由器有去往該IP的路由規則,或者某臺主機IP地址就是目標IP地址,就會發回一個ARP回應包,內容是需要發送的MAC地址,
- 源主機收到回應包會將MAC地址寫入接受方MAC地址欄位,并將該MAC地址存入高速快取,

由次MAC首部也添加完畢,形成一個鏈路層幀,可以通過物理層設備進行發送,
6. 網卡
真正執行發送任務的還是通過硬體網卡,而操作網卡的是網卡控制器,操作網卡控制器的又是網卡驅動程式(IO設備層次),
網卡驅動獲取到鏈路層幀之后,將其復制到網卡內的緩沖區,并在開頭加上報文頭和起始幀分隔符,尾部加上FCS幀校驗序列,
都完成之后,再將資料包轉換成電信號,通過網線傳輸出去,
7. 交換機
電信號到達網線介面,由交換機進行接收,并且把其中的電信號轉換成數字信號,再通過校驗檢測是否出錯,如果沒錯,則放入緩沖區,
另外由于交換機自學習的特性,它會將傳送來的介面以及MAC地址做一個記錄在MAC地址表中,
再通過查詢MAC地址表,將收到的分組傳遞到應該去的介面上,
詳細可以看
交換機詳細內容
8. 路由器
網路包經過交換機到達路由器,并在此被轉發到下一個路由器或者目標設備,路由器是基于IP進行轉發器的,是第三層網路交換設備,
路由器檢查校驗和以及接受方MAC地址和自己是否相同,匹配之后,會將MAC首部去除,從IP首部中提取目標IP地址,通過路由表查詢下一條輸出鏈路埠,并把網路包從該埠轉發,通過RIP,OSPF以及BGP協議,資料報被路由器一步步轉發到目標地址,
9. 目標服務器
當資料報達到目標=服務器之后,服務器就會對資料包進行一層一層的扒皮:
- 檢查MAC首部中目的MAC地址和自己的MAC地址是否匹配,然后去除MAC首部,
- 檢查IP地址是否匹配然后去除IP首部,
- 檢查TCP首部序號是否對應等,再通過TCP首部的埠號,分發到對應行程,
- HTTP行程收到請求之后,將需要回傳的資料封裝在回應報文中,并回傳,回傳的程序就是上述程序的逆向,一層一層封裝首部,從網卡發出,交到交換機手上并發給路由器,由路由器轉發對目標地址對應的交換機,再由交換機轉發到客戶端,
- 客戶端收到回應報文后,瀏覽器渲染頁面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293069.html
標籤:其他
上一篇:vmware虛擬軟體的網路模式
