how networks work first note(2)
摘要:
思維導圖
整體內容
向DNS伺服器查詢Web伺服器的IP地址
IP的基本知識
由一些小的子網,通過路由器連線起來組成一個大的網路。
這裡的子網可以理解為用集線器連線起來的幾臺計算機
tips:一些家用路由器已經內建了集...
思維導圖

整體內容
向DNS伺服器查詢Web伺服器的IP地址
- IP的基本知識
由一些小的子網,通過路由器連線起來組成一個大的網路。 這裡的子網可以理解為用集線器連線起來的幾臺計算機 tips:一些家用路由器已經內建了集線器功能,因此大家可以理解為這種路由器內部同時包含路由器和集線器兩種裝置
- IP地址的表示
a:IP地址主體的表示方法 10.11.12.13 b:採用與IP地址主體相同的格式表示子網掩碼的方法 10.11.12.13/255.255.255.0 c:採用網路號位元數來表示子網掩碼的方法 10.11.12.13/24 d:表示子網的地址 10.11.12.0/24 主機號部分的位元全部為0,這個地址表示的不是單獨一臺計算機,而是代表整個子網 e:表示子網內廣播的地址 10.11.12.255/24
- Socket庫提供查詢IP地址的功能
向DNS(Domain Name System)伺服器發出查詢,也就是向DNS伺服器傳送查詢訊息,並接收伺服器返回的響應訊息 相當於DNS客戶端的部分稱為DNS解析器,包含在作業系統的Socket庫中 Soket庫是用於呼叫網路功能的程式元件集合
- 通過解析器向DNS伺服器發出查詢
在編寫瀏覽器等應用程式的時候,只要寫上解析器的程式名稱"gethostbyname"以及Web伺服器的 域名"www.lab.glasscom.com" <記憶體地址>=gethostbyname("www.lab.glasscom.com"); 呼叫解析器後,解析器會向DNS伺服器傳送查詢訊息,然後DNS伺服器會返回響應訊息 響應訊息中包含查詢到的IP地址,解析器會取出IP地址,並將其寫入瀏覽器指定的記憶體地址中 瀏覽器在向Web伺服器傳送訊息時,只要從該記憶體地址取出IP地址,並將它與HTTP請求訊息 一起交給作業系統就可以了 根據域名查詢IP地址時,瀏覽器會使用Socket庫中的解析器
- 解析器的內部原理
http訊息是用文字編寫的,但DNS訊息是使用二進位制資料編寫的 傳送訊息(請告訴我該網址的IP地址)這個操作並不是由解析器自身來執行,而是 要委託給作業系統內部協議棧來執行(圖中畫的是UDP 不確定),這是因為解析器本身不具備使用網路 收發資料的功能 Web伺服器已經在DNS伺服器上註冊---->IP地址會被寫入響應訊息並返回給客戶端 --->經過協議棧被傳遞給解析器--->解析器讀取出訊息取出IP地址--->IP地址給應用程式 向DNS伺服器傳送訊息時,我們當然也需要知道DNS伺服器的IP地址。只不過這個IP地址是作為TCP/IP 的一個設定專案事先設定好,不需要再去查詢了
全世界DNS伺服器的大接力
- DNS伺服器的基本工作
來自客戶端的查詢訊息包含3種資訊 (a)域名 伺服器、郵件伺服器(郵件地址中@後面的部分)的名稱 (b)Class IN,已經沒啥用了 (c)記錄型別 表示域名對應何種型別的記錄。 當型別為A時,表示域名對應的是IP地址 當型別為MX時,表示域名對應的是郵件伺服器 DNS伺服器會從域名與IP地址的對照表中查詢相應的記錄,並返回IP地址
- 域名的層次機構
- 尋找相應的DNS伺服器並獲取IP地址
客戶端首先會訪問最近的一臺DNS伺服器--->將來自客戶端的查詢訊息轉發給根域DNS伺服器的資訊 --->根據域名結構返回所管理的com域中的DNS伺服器的IP地址--->返回下一級域名 --->查詢到DNS並返回給客戶端
- 通過快取加快DNS伺服器的響應
在真實的網際網路中,一臺DNS伺服器可以管理多個域的資訊,上級域和下級域可能共享同一臺DNS 伺服器 其實並不需要從最上級的根域開始查詢,因為DNS伺服器有一個快取功能 查詢可以從快取的位置開始向下進行 tips:資訊被快取後,原本的註冊資訊可能會發生改變,這時快取中的資訊就有可能是不正確的 DNS伺服器中儲存的資訊都設定有一個有效期,超過有效期後,資料會從快取中刪除
委託協議棧傳送訊息
- 資料收發操作概要
向作業系統內部的協議棧發出委託時,需要按照指定的順序來呼叫Socket庫中的程式元件 收發資料操作需要建立管道,管道出入口即套接字 收發資料4個階段: (1)建立套接字(建立套接字階段) (2)將管道連線到伺服器端的套接字上(連線階段) (3)收發資料(通訊階段) (4)斷開管道並刪除套接字(斷開階段)
- 建立套接字階段
客戶端建立套接字的操作非常簡單,只要呼叫Socket庫中的socket程式元件就可以了 應用程式是通過"描述符"來識別套接字的
- 連線階段:把管道接上去
委託協議棧將客戶端建立的套接字與伺服器那邊的套接字連線起來 通過呼叫Socket庫中的名為connect的程式元件來完成這一操作,需要指定三個引數(描述符 伺服器IP地址 埠號) tips: 描述符:應用程式用來識別套接字的機制 IP地址和埠號:客戶端和伺服器之間用來識別對方套接字的機制
- 通訊階段:傳遞訊息
應用程式在記憶體中準備好要傳送的資料--->根據網址生成的HTTP請求訊息就是要傳送的資料 --->呼叫Socket庫中的write元件(需指定描述符和傳送資料)--->協議棧將資料傳送到伺服器上 接收訊息:通過Socket庫中的read程式元件委託協議棧完成的(指定存放訊息的記憶體地址)
- 斷開階段:收發資料結束
Web使用HTTP協議規定,當Web伺服器傳送完響應訊息後,應該主動執行斷開操作