網路是怎樣連接的-Web瀏覽器
網路是怎樣連接的
1. 在瀏覽器中輸入網址
2. 瀏覽器對url進行解析
- web 伺服器名稱
- 文件路徑
3. 瀏覽器使用HTTP協議來訪問Web伺服器
1. 客戶端發送請求目標,方法及請求參數
GET, POST, PUT, DELETE, OPTIONS, HEAD, TRACE, CONNECTPUT 方法,替換URI指定的伺服器上的文件HEAD 方法,只返回 HTTP 頭,用於檢查文件更新時間TRACE 方法,將收到的請求行和header直接返回,使用代理的情況下檢查改寫請求的情況
2. 服務端返回狀態碼及請求文件
4. 生成HTTP請求後,向DNS伺服器查詢Web伺服器的IP的地址
- 發出的消息首先經過子網的集線器,轉發至距離發送者最近的路由器上,接下來路由器會根據消息目的地判斷下一個路由器的位置,再發送至下一個路由器。不斷重複,消息就會被發送到目的地。
- 子網掩碼: IP地址中,網路號和主機號連起來總共是32比特,但兩部分的具體結構不固定,需要子網掩碼來表示IP地址的內部結構。子網掩碼錶示網路號和主機號的邊界。
- IP地址的主機號 1. 全0表示整個子網 2. 全1表示向子網所有設備發送包,廣播
- 域名和IP並用: IP不好記,域名位元組和長度不固定,傳遞效率相對於固定的4位數字低
- Socket庫提供查詢IP地址的能力
- 負責執行 resolution 這一操作的就是 resolver
- resolver 是一段程序,包含在操作系統的 Socket 庫里
- Socket 庫包含的程序組件可以讓其他的應用程序調用操作系統的網路功能,Socket 庫包含很多用於發送和接收數據的程序組件,是用於調用網路功能的程序組件集合
通過解析器向 DNS 伺服器發出查詢
調用 gethostbyname 方法,就完成了調用 resolver resolver 會向 DNS伺服器 發送查詢消息,DNS伺服器返迴響應消息 resolver調用協議棧後,協議棧會通過網卡將消息發送給DNS伺服器 -> 發送 UDP 請求 如果Web伺服器已註冊,則其IP地址會被寫入響應消息並返回給客戶端 -> 接收 UDP 請求 resolver 會將IP地址寫入內存地址中,應用程序從內存中取出 IP 地址
5. DNS 伺服器
- 來自客戶端的查詢消息包括 域名,Class(代表互聯網的IN)及記錄類型
- 記錄類型:A(address)(查詢IP地址時) MX(mail exchange) (查詢郵件伺服器時)
- DNS 伺服器會從域名與 IP 地址的對照表中查找對應的記錄,並返回 IP 地址
- 這種具有層級結構的域名信息會註冊到DNS伺服器中,每個域都是作為一個整體來處理的
- 將負責管理下層域的DNS伺服器的IP地址註冊到上層域的DNS伺服器中,如 www.google.com 需要註冊到 google.com,google.com需要註冊到com。
- com、cn、jp類似域上面還有一級域,稱為根域。
- 客戶端只要找到任意一台DNS伺服器就可以通過它順藤摸瓜找到根域DNS伺服器,再一路找到目標DNS伺服器,根域DNS伺服器的IP地址全世界僅有13個。
6. 委託協議棧發送消息
- 知道IP地址後,就可以委託操作系統內部的協議棧向目標IP地址發送HTTP消息了
- 向操作系統內部的協議棧發出委託時,需要按照指定的順序來調用socket庫中的程序組件
- 收發數據有以下階段,由操作系統的協議棧來執行:
1. 創建套接字 2. 將管道連接到伺服器端的套接字上 3. 收發數據 4. 斷開管道並刪除套接字
詳解收發數據階段
1. 創建套接字
1. 通過調用Socket庫中的socket組件來創建套接字。
socket(<IPv4>, <流模式>)
2. 套接字:網路通信過程中端點的抽象表示,包含進行網路通信必需的五種信息:連接使用的協議,本地主機的IP地址,本地進程的協議埠,遠地主機的IP地址,遠地進程的協議埠。
3. 應用程序是通過「描述符」(給套接字分配的編號)這一類似號碼牌的東西來識別套接字的。
2. 將管道連接到伺服器端的套接字上
1. 通過調用Socket庫中的connect組件來將客戶端的套接字與服務端的套接字連接起來。
connect(<描述符>, <伺服器的IP地址和埠號>)
2. 描述符:是用來識別套接字的機制
3. IP地址和埠號:是客戶端和服務端之間用來識別對方套接字的機制
3. 收發數據
1. 通過調用Socket庫中的write組件來實現信息傳遞
wirte(<描述符>, <發送數據(客戶端生成的HTTP請求)>, <發送數據長度>) read(<描述符>, <接收緩衝區>)
2. 接收緩衝區是一塊位於應用程序內部的內存空間,消息被存放到接收緩衝區時,相當於已經交給了應用程序
4. 斷開管道並刪除套接字
1. 通過調用 Socket庫中的 close 組件進入斷開狀態
close<描述符>
2. 當所有數據都請求完成後,瀏覽器會主動觸發斷開連接的操作
瀏覽器和Web伺服器之間收發消息,實際上負責收發消息的是協議棧,網卡驅動和網卡。
推薦閱讀:
※《娛樂至死》——現在的網路文化會致命嗎?
※【讀書筆記】窮查理寶典
※見字如面——讀書札記
※初識BTC:讀 <精通比特幣>
※冰河