網路是怎樣連接的-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 伺服器

  1. 來自客戶端的查詢消息包括 域名,Class(代表互聯網的IN)及記錄類型
  2. 記錄類型:A(address)(查詢IP地址時) MX(mail exchange) (查詢郵件伺服器時)
  3. DNS 伺服器會從域名與 IP 地址的對照表中查找對應的記錄,並返回 IP 地址
  4. 這種具有層級結構的域名信息會註冊到DNS伺服器中,每個域都是作為一個整體來處理的
  5. 將負責管理下層域的DNS伺服器的IP地址註冊到上層域的DNS伺服器中,如 www.google.com 需要註冊到 google.com,google.com需要註冊到com。
  6. com、cn、jp類似域上面還有一級域,稱為根域。
  7. 客戶端只要找到任意一台DNS伺服器就可以通過它順藤摸瓜找到根域DNS伺服器,再一路找到目標DNS伺服器,根域DNS伺服器的IP地址全世界僅有13個。

6. 委託協議棧發送消息

  1. 知道IP地址後,就可以委託操作系統內部的協議棧向目標IP地址發送HTTP消息了
  2. 向操作系統內部的協議棧發出委託時,需要按照指定的順序來調用socket庫中的程序組件
  3. 收發數據有以下階段,由操作系統的協議棧來執行:

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:讀 <精通比特幣>
冰河

TAG:計算機網路 | 讀書筆記 |