- 瀏覽器做的第一步工作是解析 URL,分清協議是http還是https,主機名,路徑名,然后生成http消息,之后委托操作系統將消息發送給 Web 服務器。
- 在發送之前,還需要先去查詢dns,首先是查詢緩存瀏覽器緩存、電腦緩存、路由器緩存、運營商緩存、請求dns服務器的緩存;然后udp協議查詢本地dns服務器,本地dns服務器沒有再去迭代查詢頂級-次級等一系列服務器,最終返回給電腦,并緩存。
- 知道了地址,下一步就是把 HTTP 的傳輸工作交給操作系統中的協議棧,協議棧的內部分為幾個部分,分別承擔不同的工作。上下關系是有一定的規則的,上面的部分會向下面的部分委托工作,下面的部分收到委托的工作并執行。
- 接下來 數據包去找tcp協議棧打包成tcp數據包 源端口一般是瀏覽器監聽的端口(通常是隨機生成的),而目的端口如果http一般80 https一般443
- 然后 tcp先通過三次握手的方式 經由ip協議、數據鏈路等建立連接
- 之后數據包下一步 打包成ip格式報文 添加ip報文頭
- 由網卡發出,通過路由表,確定下一跳的位置(一般是路由器)
- 然后通過arp協議,由ip地址找到路由器的mac地址,添加mac頭部等,轉化為電信號發送給路由器的交換機模塊
- 交換機接收到數據包后,根據mac表,確定發到哪個端口,由于我們是向外,所以是發到路由器模塊
- 經歷路由器等等一系列路由器 經過網線傳輸,可能還要經歷NAT流程,最終達到目標地址和端口
- 對方洋蔥皮解碼,然后服務器做出響應,將對于的html文本發回給瀏覽器
- 釋放tcp連接(不一定)
- 瀏覽器將該 html 文本并顯示內容;
https版本需要增加
用戶在瀏覽器里輸入一個https網址,然后連接到server的443端口。
服務器必須要有一套數字證書,可以自己制作,也可以向組織申請,區別就是自己頒發的證書需要客戶端驗證通過。這套證書其實就是一對公鑰和私鑰。
服務器將自己的數字證書(含有公鑰)發送給客戶端。
客戶端收到服務器端的數字證書之后,會對其進行檢查,如果不通過,則彈出警告框。如果證書沒問題,則生成一個密鑰(對稱加密),用證書的公鑰對它加密。
客戶端會發起HTTPS中的第二個HTTP請求,將加密之后的客戶端密鑰發送給服務器。
服務器接收到客戶端發來的密文之后,會用自己的私鑰對其進行非對稱解密,解密之后得到客戶端密鑰,然后用客戶端密鑰對返回數據進行對稱加密,這樣數據就變成了密文。
服務器將加密后的密文返回給客戶端。
客戶端收到服務器發返回的密文,用自己的密鑰(客戶端密鑰)對其進行對稱解密,得到服務器返回的數據。