鍵入網址到網頁顯示發生了什么?
查找主機 IP
過程如下:
- 瀏覽器查找緩存
- 操作系統查找緩存
- 遞歸 DNS 解析
瀏覽器查找緩存
瀏覽器根據 URL找到足夠新鮮的緩存并進行轉碼。若是無緩存或者緩存不夠新鮮,則進行IP 查找。
新鮮度
HTTP1.0提供 Expires
,值為?個絕對時間表示緩存新鮮?期
HTTP1.1增加了Cache-Control: max-age=time
,值為以秒為單位的最?新鮮時間
操作系統查找緩存
本機緩存
操作系統會對域名解析進行緩存,并設置 TTL(TimeToLive)存活時間。
操作系統的 DNS 緩存在計算機內存中,計算機自動管理
通常我們只會使用刷新或清除 DNS 緩存的指令
Windows使用**ipconfig /flushdns**
、**ipconfig /displaydns**
MacOS和Linux使用**sudo service networking restart**
、**sudo systemctl restart NetworkManager**
HOSTS 文件
從本地 HOST 文件中查找到域名對應的 IP
遞歸 DNS 解析
將域名通過 DNS 服務器解析為 IP 地址
IP 是什么?為什么要有 IP?
IP Address,互聯網協議地址。IP 地址是 IP 協議提供的一種統一的地址格式,為互聯網上的每一個網絡和主機分配了一個邏輯地址,依次來屏蔽 MAC 物理地址的差異。
IP 地址的本質是一個 32 位的二進制數。
IP 存在是為了:統一規范,便于查詢使用和管理
域名是什么?為什么要有域名?
Domain Name,域名。域名是用來標識指定 IP,從而達到訪問指定網站和資源的目的。
域名通常需要根據 DNS 協議進行解析來查找到 IP 地址。(DNS 協議也可從 IP 地址反向查詢到域名)解析即在 DNS 服務器上查到域名對應的信息記錄。
域名自頂向下組成為:頂級域名,二級域名,子域名
域名存在是為了:便于人記憶,能夠使得服務器更加靈活地被訪問
DNS 是什么?為什么要有 DNS?
Domain Name System,域名系統。DNS服務器是這個系統中的一個單位。DNS 的本質是互聯網基礎建設。
DNS 的功能:域名解析(主要)、IP 分發、緩存、負載均衡
DNS 的存在是為了:解析域名為 IP,并提供其他高可用的功能。
查詢過程
本地 DNS 服務器沒有該域名對應的 IP 地址,執行 DNS 遞歸解析,最壞的情況查找請求經過根域名服務器、頂級域名服務器、授權域名服務器,找到后再自頂向下返回IP 到本地 DNS 服務器中并最終交由瀏覽器。
TCP 連接
Transmission Control Protocol,傳輸控制協議。TCP 協議位于傳輸層中,提供了可靠的、面相連接的數據傳輸,確保數據在兩端之間以有序可靠的方式傳輸。
TCP 三次揮手建立連接。瀏覽器使用獲得的IP地址建立TCP連接到主機的Web服務器的80端口(如果是HTTP)或443端口(如果是HTTPS)。
打開一個 SOCKET 與目標 IP 地址指定端口建立 TCP 連接,三次握手:
- 客戶端發送SYN:當客戶端決定要與服務器建立連接時,它首先發送一個帶有SYN(同步)標志的TCP數據包給服務器,表示它希望建立連接。此數據包還包括一個初始序列號(ISN,Initial Sequence Number),用于序列化數據包。
- 服務器回應SYN-ACK:服務器收到客戶端的SYN后,會回復一個帶有SYN和ACK(確認)標志的TCP數據包給客戶端,表示它已收到了連接請求,并同意建立連接。服務器還將分配自己的ISN,并在確認數據包中包括客戶端的ISN加一,以用于序列化數據包。
- 客戶端回應ACK:客戶端接收到服務器的SYN-ACK后,回復一個帶有ACK標志的TCP數據包給服務器,以確認它已收到了服務器的確認,連接建立完成。在這個ACK數據包中,客戶端還確認了服務器的ISN,并將服務器的ISN加一,以用于序列化數據包。
發送 HTTP 請求
Hypertext Transfer Protocol,超文本傳輸協議
瀏覽器構建HTTP請求頭,該頭包含了關于請求的各種信息,例如請求方法(GET、POST、PUT、DELETE等)、要訪問的資源的路徑(URL)、HTTP協議版本、請求頭部(例如User-Agent、Host、Accept等),以及可能的請求主體(對于POST請求)
服務器處理請求并返回 HTTP 報文
服務器會構建HTTP響應,包括狀態碼(例如200 OK、404 Not Found等)、響應頭部(例如Content-Type、Content-Length等),以及響應主體(包含所請求資源的內容)
瀏覽器解析渲染頁面
構建 DOM 樹、構建 CSSOM 樹、構建渲染樹、執行 JS 腳本等等。
TCP 斷開連接
TCP 四次揮手斷開連接,四次揮手:
- 客戶端發送FIN:當客戶端決定要斷開連接時,它首先發送一個帶有FIN(結束)標志的TCP數據包給服務器,表示它已經完成數據傳輸,并不再有數據要發送。
- 服務器回應ACK:服務器收到客戶端的FIN后,回復一個帶有ACK(確認)標志的TCP數據包給客戶端,以確認它已收到了客戶端的終止請求。
- 服務器發送FIN:一旦服務器也準備好斷開連接,它會發送一個帶有FIN標志的TCP數據包給客戶端,表示服務器也不再有數據要發送。
- 客戶端回應ACK:客戶端接收到服務器的FIN后,回復一個帶有ACK標志的TCP數據包給服務器,以確認它已收到了服務器的終止請求。