請求url的底層資料通訊過程
對url載入過程中底層通訊過程的分析。訪問某網址時,即使通過本地快取即可完成域名解析,但與對應IP地址建立TCP連線的前提是:本機可與伺服器進行資料報的互動,因此對該過程進行一定的瞭解。
0. TCP/IP五層模型
TCP/IP層 | 主要協議及功能 |
---|---|
應用層 | HTTP, SMTP |
傳輸層 | 提供端對端的介面TCP/UDP |
網路層 | 為資料包選擇路由IP/OSPF |
資料鏈路層 | 幀傳輸PPP/ARP |
物理層 | 二進位制形式在物理媒介傳輸資料IEEE802 |
本地完成底層通訊過程,至少包含以下階段:
* 本機連線入網
* 目標url域名解析
* 請求資料封裝
* 請求傳輸
* 建立連線
* 傳輸資料
1 本機連線入網
本機與外網地址可互動的前提
1) 獲取IP
2) 內網與外網可互動:NAT技術內外網地址對映
1.1 獲取IP
- 本機所分配的地址是私有IP(私有 IP 地址是指內部網路或主機的IP 地址,公有IP 地址是指在因特網上全球唯一的IP 地址)
- 動態IP配置的場景DHCP,DHCP伺服器正常配置
a. 客戶機通過UDP埠傳送DHCPDISCOVER廣播包,請求租用IP地址;廣播包中的源IP地址為0.0.0.0,目標IP地址為255.255.255.255;包中還包含客戶機的MAC地址和計算機名
b. DHCP伺服器通過UDP埠68給客戶機迴應一個DHCPOFFER廣播包,提供一個IP地址
c. 客戶機發送DHCPREQUEST訊息包,表明接受提供的ip地址
d. DHCP伺服器DHCPACK訊息包,確認並將該租用訊息廣播
e. 客戶機配置自己的TCP/IP
1.2 內網與外網互動
- 源埠和目標埠。一個程序希望與另一個程序建立TCP連線時,首先把自己繫結到一個本機尚未被佔用的TCP埠上,即源埠;並指明資料包到達遠端主機後送至哪一個埠,即目標埠
NAT維護key(NAT分配的埠號)與value(內網客戶機地址轉化)的對映記錄
NAT技術違背了IP唯一標識的設計,且使網路變得脆弱,期待IPv6
實現PC至伺服器的連線要用的協議
2 目標url域名解析
a. 查詢瀏覽器快取
b. 作業系統域名解析(可以修改配置檔案,為域名指定IP)
c. DNS域名伺服器(網路配置中設定)
d. local DNS仍未命中時,會查詢root DNS; root DNS會返回所查詢域的主域名伺服器(以.com, .cn區分)
e. local DNS請求 主域名伺服器 ;獲得此域名對應的DNS(域名申請時所在的提供商的DNS)
f. local DNS請求 此域名對應的DNS,獲得對應IP及TTL
g. local DNS 及 本地 快取該域名和IP的對映關係
3 請求資料封裝
當請求外網某地址時,本機首先建立與目標IP的連線,TCP/UDP(此處以TCP為例),在此過程中傳送連線請求;請求建立後,與目標IP互動的GET/POST請求等;上述請求雖然所處階段不同,對對應的header, data不同,但是底層通訊過程中的資料封裝過程是基本一致的:物理層(bit)- 資料鏈路層(frame)- 網路層(packet)- 傳輸層(segment)。接下來對資料在網路請求中的經歷進行簡要概述(具體過程瞭解得不是很多):
- 應用層:將需傳送的資料內容放到緩衝區,形成應用層的報文data
- 傳輸層:傳輸層打包,報文加上包頭(包含埠號等),組成tcp資料傳輸單位segment
- 網路層:封裝網路層包頭(含源IP地址,目標IP地址),組成packet;網路層需要通過路由定址協議和arp協議,找到下一跳的ip地址和mac地址
- 鏈路層:將mac地址及鏈路層控制資訊加到資料包,形成frame(該層可控制傳輸速度,確保資料完整)
- 物理層:將資料以bit為單位從主機傳輸到下一個目的地
4 請求傳輸
網路通訊,在服務端自身效能影響之外,也都會受到網路延遲和頻寬的影響
4.1 主幹網之間的速度延時和頻寬延時
- 速度延時:光纖的傳輸速度存在上限,距離較遠時,定址和排隊等的延遲之外,傳輸自身也存在延遲(距離較遠時,在幾十ms)
- 頻寬延時:主幹網的頻寬有上限,傳輸資料均匯入主幹網時,存在擁堵
- 解決方案:1)通過CDN使傳輸距離變短;2)減少序列的來回請求;
4.2 CDN content distribute network
實時地根據網路流量和各節點的連線、負載狀況以及到使用者的距離和響應時間等綜合資訊將使用者的請求重新導向離使用者最近的服務節點上。
- CDN回源:當有使用者訪問某一個URL的時候,如果被解析到的那個CDN節點沒有快取響應的內容,或者是快取已經到期,就會回源站去獲取。如果沒有人訪問,那麼CDN節點不會主動去源站拿的。
- 回源域名:一般直接用ip回源,為了避免更改配置,會採用回源方式進行回源
5 建立連線
TCP連線(三次握手),控制資料包傳送序列的產生,實現流控和資料完整
* client第一次傳送時的seq值如何儲存,並與server返回的ack值校驗 ?
傳送一個數據段後,會開啟一個計數器,只有當收到確認後才會傳送下一個,如果超過計數時間仍未收到確認則進行重發;在接收端如果收到錯誤資料,則將其丟棄,這將導致傳送端超時重發
6 傳輸資料
開啟美好的上網之旅,另一篇期待後續