訪問一個網頁過程中發生了什麼

前言

本文以小明在圖書館連接網線,並訪問網頁爲例,剖析TCP/IP協議棧工作原理,讓讀者瞭解這神奇的計算機網絡底層協議的作用。

上網流程圖

獲取本機的IP【DHCP】

當小明連上網線,通過以太網接口連上了學校的交換機,而校園網其實就是一個ISP(Internet Service Provider),提供DNS服務。
1. 小明筆記本連接網絡並沒有自己的IP,而IP是互聯網的唯一標識地址。在圖書館局域網內,小明筆記本創建了DHCP請求消息,並且封裝進UDP中,然後封裝成IP數據報:
Source IP:0.0.0.0 Des IP:255.255.255.255 【廣播專用地址】
Source port:68 Des port:67
2. IP同時也被封裝進入以太幀中,具體如下:
Sou MAC: 本地MAC Des MAC:FF:FF:FF:FF:FF:FF【廣播幀】
3. 交換機接收到廣播幀,立馬向所有輸出鏈路轉發消息
4. 局域網的路由器接收到了該幀,並對其進行解析,
frame→datagram→segment→DHCP請求Message,其中提取UDP信息屬於多路分解
5. 路由器網關爲192.168.0.1/24【192.168.x.x保留作爲局域網地址】,所以通過CIDR的分配原則,路由器決定給用戶分配192.168.0.108IP地址,這時候,DHCP ACK Message被封裝進入UDP中。
Sou:IP 192.168.0.1 Des:IP:255.255.255.255 Ack也是廣播來的噢
另外,DNS服務器的ip,網關ip,被分配的ip都是封裝到
注意,24爲子網掩碼,子網內的IP與其相與,都是得到子網的IP,即192.168.0.x
6. 交換機通過自學習的功能,把之前轉發的MAC映射表存儲起來,這時候,幀直接在交換機中轉發
7. 筆記本獲得DHCP ACK消息,在UDP中的Bootstrap Protocol,獲取了自己的IP地址,同時也知道DNS服務器的IP地址以及局域網網關的IP地址了

這裏寫圖片描述


獲取網關的MAC【ARP】

小明此時想瀏覽www.baidu.com網站查找點信息,小明便在瀏覽器上輸入了url【注意,沒有特別指明都是訪問http的】。鏈路層傳遞幀需要知道目標的mac地址,而現在筆記本只知道網關的IP,所以,此時會先查找得到網關的MAC地址。ARP是有時間限制的,其請求跟http請求並不是因果關係,是獨立開來的。

  1. 筆記本對外發送ARP查詢消息
    Sour MAC: 本地的 DesMac:FF:FF:FF:FF:FF:FF
    Sour IP: 本地 DesIp:網關ip
    【相當於廣播,who has gateway ip?tell local ip~】
  2. 網關路由器回覆ARP消息,並把其mac地址放在源mac中傳輸。當筆記本拿到消息,便自己維護ARP表。

這裏寫圖片描述


獲取目標IP【DNS】

  1. 筆記本通過UDP封裝DNS請求消息,目標port爲 53,併發送給網關路由器。
  2. 網關路由器,直接通過轉發表選擇校園網的路由器,並轉發消息,校園網的所有路由器都會解析IP信息,獲取des Ip結合自治系統內部選路以及自治系統間選路算法,來把IP數據報轉發到DNS服務器。
  3. DNS服務器開始查DNS數據庫中是否有該DNS映射記錄,如果找到,則會立馬通過UDP封裝DNS reply消息,發送回局域網網關路由器。
  4. 局域網網關路由器,通過NAT地址轉換技術,藉助端口,將desIp定位到小明的筆記本。
  5. 筆記本收到DNS回覆消息,此時便獲取到了百度的ip地址。

這裏寫圖片描述
目標ip爲本地DNS服務器

DNS查找路徑:
本地DNS服務器→根DNS服務器→TLD【Top-Level Domain】DNS服務器→權威【authoritative】DNS服務器
遞歸查找:一路查到底
迭代查找:返回給local DNS服務器
實際:遞歸+迭代,自己請求localDNS是遞歸查詢,但本地分別向不同DNS服務器查詢屬於迭代查詢

DNS報文信息
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

自治系統內部選路
RIP(Routing Information):
RIP通告報文被封裝在UDP上,使用端口520
類似DV算法,每經過一個subnet記爲1hop,選擇hop最少的路徑,每隔30s鄰居會互相告知路徑情況,超過180s 則會認爲鄰居死亡,該路徑移除。
每個路由器維繫到達鄰居的跳數信息,最大跳數限制爲15。

OSPF(Open Shortest Path First):
使用端口號89
類似LS算法,自行實現可靠信息傳輸,且實現Link-state廣播
廣播其連接狀態每30min一次,不單單向鄰居廣播

自治系統間選路
BGP(BorderGateway Protocol)
唯一使用TCP作爲傳輸層的路由協議
AS與AS之間的連接叫eBGP,AS內部連接叫iBGP,eBGP交換兩端路由器的信息,並通過iBGP告知AS內的其他路由器的信息。


建立通信【TCP】

  1. 筆記本向百度的ip發送TCP SYN請求報文,此時,數據包信息如下:
    傳輸:本地端口 目的端口:80
    網絡:本地IP 目的IP:百度的ip
    鏈路:本地mac 目的Mac:網關路由器的MAC
    seq=x;
  2. 百度的服務器接收到SYN請求報文,便回覆SYN ACK,其中ack號爲SYN請求報文+1,即x+1,seq=y
  3. 筆記本接收到SYN ACK,便向百度服務器發送ACK,ack=y+1,seq=x+1,握手完成,開始數據傳輸。

這裏寫圖片描述

瀏覽網頁【HTTP】

  1. 筆記本向服務器發送HTTP get的請求報文信息。
  2. 服務器獲取到筆記本的HTTP的請求報文,服務器便向筆記本發送TCP ack確認報文,來告訴筆記本已經收到請求。
  3. 服務器向筆記本發送HTTP response報文信息。
  4. 筆記本接收到response信息,便會向服務器發送ack確認信息。
    1)http
    瀏覽器解析HTTP超文本內容,小明就看到了閃亮亮的網頁啦。
    2)https
    此時小明收到是code=302的重定向http響應報文到https:,於是,筆記本向百度服務器 443 端口請求建立TLS連接,首先經過TCP握手階段,再通過TLS握手階段,協商後再獲取相應的數據。

注:直接輸入https://網址,是會自動進行TLS連接,而不會採用普通的http協議,數據被加密在SSL上,而SSL封裝在TCP內。

TLS握手:
這裏寫圖片描述


總結

網頁的請求訪問,涉及了TCP/IP協議棧的各個方面,在共同的作用下,完成一次完整的會話,核心過程如下:
1. 獲取本機IP【UDP封裝DHCP】
2. 獲取網關MAC【ARP】
3. 獲取域名映射的IP地址【UDP封裝DNS】
4. 建立連接,獲取數據【TCP三次握手,TLS握手,HTTP協議】

各層所用協議:
應用層:DNS,DHCP,HTTP,RIP,OPSF,BGP
傳輸層:TCP,UDP
網絡層:IP
鏈路層:ARP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章