五分鐘瞭解網路連線

Dwyane_Coding發表於2018-07-31

前言:

筆者最近閱讀大量網路原理相關書籍,因此總結出此文,讀完本文,讀者們應該要了解下面名詞:

瀏覽器、Web伺服器、網址(URL)、HTTP、HTML、協議、URI、請求訊息、解析器、Socket庫、DNS伺服器、域名

網路原理系列文章:

一、五分鐘瞭解網路連線(已完成)

二、收發資料的原理(上)(已完成)

三、收發資料的原理(下)(已完成)

四、收發資料的番外篇(未完成)

  • 生成HTTP請求訊息
  • 向DNS伺服器查詢Web伺服器的IP地址
  • DNS伺服器的互相配合(如何找出IP地址)
  • 委託協議棧傳送訊息

生成HTTP請求訊息

1、從網址開始

我們看NBA,要在瀏覽器輸入某個nba網址吧,沒錯。就是那串http://開頭的那串玩意兒, sports.qq.com/,如下圖,只不過瀏覽器把前面的http://隱藏而已,複製可以見到完整網址。

騰訊體育
這串玩意兒叫網址,更準確的叫URL(統一資源定位符)

我們一般訪問的是Web伺服器,但實際上瀏覽器還有很多功能,FTP(檔案傳輸協議)伺服器上下載和上傳檔案,同時也具備電子郵件客戶端的功能。所以有各種不同的URL。訪問Web伺服器用“http”,而訪問FTP伺服器用“ftp”.下面圖一列舉了網際網路常見的幾種URL,不喜歡看請忽略。 在此,請對域名,有個淺顯瞭解。往後會詳細介紹。

域名:像www.baidu.com這樣以句點(.)分隔的名稱。

圖一

URL開頭的文字,即 “http:” “file:” “mailto:” 這部分文字都表示文字都表示瀏覽器應當使用的訪問方法。比如訪問Web伺服器時應該使用HTTP協議,而訪問FTP伺服器則應該使用FTP協議。因為,我們可以把這部分理解為訪問時使用的協議型別

HTTP協議:超文字協議

2、HTTP的思路

HTTP的基本思路
HTTP協議定義了客戶端和服務端之間互動的訊息內容和步驟。

首先,客戶端向伺服器傳送請求訊息,請求訊息包含兩部分(“對什麼”和“進行怎樣的操作”)。“對什麼”是指訪問目標(URI),“進行怎樣的操作”則是指方法,也稱HTTP謂詞。收到請求訊息後,Web 伺服器會對其中的內容進行解析,通過接收的URI和方法完成自己的工作,然後將結果存放在響應訊息中,返回給客戶端。

筆者認為,URI強調的是給資源標記命名,URL強調的是給資源定位,URL顯然比URI包含資訊更多,舉個例子,我是小肥仔,我是來自廣東深圳市光明區某路某小區201號房的小肥仔彭友。如果URI為前者,則URL為後者。

3、生成HTTP請求訊息

使用GET方法的情況下,僅憑方法和URI,Web 伺服器就能判斷需要進行怎樣的操作,因此訊息體中不需要填寫任何資料。而POST則需要訊息體。

4、返回響應訊息

我們把請求訊息傳送出去之後,Web伺服器會返回響應訊息。其中會有狀態碼和響應短語。

狀態碼概要

1條請求訊息中只可以寫1個uRI,所以每次只能獲取1個檔案。比如1個頁面中包含3張圖片,那麼獲取網頁加上獲取圖片,一共需要向Web伺服器傳送4條請求。

向DNS伺服器查詢Web伺服器的IP地址

1、IP地址的基本知識

生成HTTP訊息之後,我們需要委託作業系統將訊息傳送給Web伺服器。

因為瀏覽器只能解析網址並生成HTTP訊息,但它本身不具將訊息傳送到網路中的功能,只能委託作業系統。作業系統傳送訊息,必須提供IP地址,而不是通訊物件的域名(前面說過,類似www.baidu.com的一串玩意)。所以生成HTTP訊息的下一個步驟就是根據根據域名查詢IP地址。

IP地址科普:

網際網路和公司內部的區域網都是基於TCP/IP的思路來設計,TCP/IP結構是由一些小的子網,通過路由器連線起來組成一個大網路。這裡的子網暫時可以理解為幾臺計算機。 在網路中,所有的裝置都會被分配一個地址。這個地址就相當於現實中某條路上的“xx號xx室”。其中“號”是分配給整個子網的,而“室”對應的號碼稱為網路號,“室”對應的號碼稱為主機號,這個地址的整體叫做IP地址。 通過IP地址,我們可以判斷出物件伺服器的位置,從而將訊息傳送到伺服器。實際的IP地址是一串32位元的數字,按照8位元(1位元組)為一組分成4組,分別用十進位制表示,然後再用圓點隔開。eg:“10.11.12.13”、“202.96.128.86”

2、域名和IP地址並用的理由

TCP/IP網路是通過IP地址來確定通訊物件,因此不知道IP地址就無法將訊息傳送給對方,這跟我們打電話需要知道對方的電話號碼一樣才可以。

可能有人會問,為什麼不直接用IP地址去訪問網址,確實,我們直接輸入IP地址是可以訪問的。但是IP地址那串數字,難以記住。比如百度的網址,不是“www.baidu.com”,而是“202.96.128.99”,你怎麼記住呢?

然後你可能又會問,幹麼不直接用域名去確定通訊物件呢,其實,這是可以的,但是這會影響執行效率。

IP地址的長度為32位元(4位元組),而域名最短的也要幾十個位元組,最長甚至可以達到255位元組。位元組長而且長短不一,處理起來非常複雜,所以這影響了效率(增加路由器的負擔)。

3、Socket 庫提供查詢IP地址的功能

DNS伺服器可以幫我們查詢到IP地址。

通過DNS伺服器發出查詢的操作成為域名解析。負責解析的這個操作就叫做解析器,解析器它是一段程式,包含在作業系統的Socket庫中(Socket庫包含很多傳送和接受資料的程式元件,是網路開發的一種標準庫)。Socket庫是標準元件,我們從應用程式進行呼叫即可。如果,解析器的程式名稱為“getIPadressWithDN”,以及需要解析的域名為“www.baidu.com”,過程如下:

解析器的呼叫方法

4、解析器的內部原理

解析器生成要給DNS伺服器的查詢訊息,但是解析器本身也不具備使用網路收發資料的功能(之所以用“也”,是因為這一過程跟瀏覽器生成HTTP訊息傳送給Web伺服器類似),所以需要委託協議棧(作業系統內部的網路控制軟體,也叫“協議驅動”、“TCP/IP驅動”)執行操作,再通過網路卡發給DNS伺服器。

網路程式呼叫解析器,程式的控制流程會發生轉移。那麼“控制流程轉移”指的是什麼呢? 一般來說,應用程式編寫的操作內容是從上往下按順序執行的,當到達需要呼叫解析器的部分時,對應的那一行程式就會執行,應用程式本身的工作就會暫停,然後,Socket庫的解析器開始執行,完成應用程式委託的操作。像這樣,由於呼叫其他的程式,原本執行的程式進入暫停狀態,而被呼叫程式的開始執行。這就是“控制流程轉移”。

DNS伺服器的互相配合

1、DNS伺服器的基本工作

DNS的基本工作就是接受來自客戶端查詢訊息,然後根據訊息的內容返回響應。其中,客戶端的訊息包含3中資訊

1、域名: 伺服器、郵件伺服器(郵件地址中@後面的部分)的名稱 2、Class:它的值永遠為“IN” 3、記錄型別: 表示域名對應何種型別的記錄。當型別為A(Address)時,表示域名對應的是IP地址;MX(Mail eXchange)時,則表示域名對應的是郵件服務。

一、查詢“www.baidu.com”IP地址:

域名=www.baidu.com、Class = IN、記錄型別=A

二、查詢“dwyane@qq.com”郵件伺服器:

域名=qq.com”、Class = IN、記錄型別=MX

DNS伺服器的基本工作

2、域名的層次結構

網際網路中不計其數的伺服器,所以儲存他們資訊的只用一臺DNS伺服器是不可能的,需要將資訊分佈在多臺DNS伺服器,然後它們相互接力配合,從而查詢出要查的資訊。DNS伺服器中所有資訊都是按照域名以分層次的結構儲存。類似公司中的事業集團、部門、科室結構。

DNS中的域名是用句點來分隔的,域名越靠右的位置表示層級越高。比如:“www.ituring.com.cn”域名,cn 是公司集團,com 是研發部, ituring 是後臺小組,所以可以理解為某公司集團cn 下的com 研發部的 ituring 後臺小組的 www。其中相當一個層級的部分稱為域,即 com 域的下一層級是 ituring 域, 再下一層才是 www 這個名字

cn是國家頂級域名,中國是cn,美國是us,日本是jp,表示工商企業的 .com,表示網路提供商的.net,表示非盈利組織的.org等

有時我們會看到類似這種“sports.qq.com”、“finance.qq.com ”,這兩者有什麼關聯嗎? 這兩者其實就是某訊旗下的體育和金融版本,“qq.com”是他的公司域,因為不可能說一個公司的不同板塊(或者說不同的事業集團),我給你公司多個DNS伺服器,一個域是不可分割的。解決辦法是建立子域。例如某訊就是在公司域“qq.com”的下面建立子域“sports.qq.com”、“finance.qq.com

尋找相應的DNS伺服器並找到IP地址

找到DNS伺服器中存放的資訊,關鍵是找到資訊歸哪臺DNS伺服器管。

HTTP的三次握手、四次揮手 blog.csdn.net/AI_Gentlema…

網際網路有無數臺DNS伺服器,不可能一臺一臺挨個找。所以採取以下方法。首先,將負責管理夏季域的DNS伺服器的IP地址註冊到他們的上級DNS伺服器中,然後上級DNS伺服器的IP地址再註冊到更高一級的DNS伺服器中,以此類推。

在網際網路中,比com和cn更高一級,稱為根域。根域在域名的最後加上一個點,如“www.baidu.com.”最後的那個句點代表根域名,但是那個句點經常被省略,根域的DNS伺服器保管著com、cn等DNS伺服器的資訊。由於上級DNS伺服器保管著所有下級DNS伺服器的資訊,所以我們可從根域開始一路往下順藤摸瓜找到任意一個域的DNS伺服器。

另外,根域的DNS伺服器資訊存在網際網路中所有的DNS伺服器中。分配給根域DNS伺服器的IP地址只有13個。

下面以“www.gov.cn”和“sports.qq.com”舉例說明DNS伺服器查詢流程

DNS伺服器查詢流程

客戶端首先會訪問最近的一臺DNS伺服器(也就是客戶端的TCP/IP設定中填寫的DNS伺服器地址),假設我們要查詢“sports.qq.com”這臺Web伺服器相關資訊,但由於最近的DNS伺服器沒有存放“sports.qq.com”這一域名對應的資訊,所以從該伺服器獲取根域的地址,把查詢訊息轉發給根域,繼續從根域查詢,根域沒有該域名資訊,繼續往下找,去到com域找,com域沒有“sports.qq.com”的資訊,所以返回他下一級的“qq.com”域的DNS伺服器IP地址,繼續往下找...

DNS地址

通過快取加快DNS伺服器的響應

有時候不需要從最上級的根域開始查詢,因為DNS伺服器有一個快取功能,可以記住之前的域名。如果要查詢的域名和相關資訊已經在快取中,那麼可以直接從快取處得到所需資訊,然後從快取位置開始向下查詢。這樣對比與從根域開始,減少了查詢時間。

當查詢的域名不存在時,快取也會儲存起來,下次查詢時,直接快速反應。 如果資訊被快取了,原本的註冊資訊可能會發生改變,那麼快取中的資訊就可能不正確了,因此,DNS伺服器中儲存的資訊設定一個有效期,當快取中的資訊超過有效期後,資料就會從快取中刪除。

委託協議棧傳送訊息

資料收發操作

獲悉ip之後,就可以委託作業系統內部的協議棧傳送訊息到目標IP地址,也就是傳送到Web伺服器,傳送給Web伺服器的HTTP訊息是一種數字訊息。

簡單來說,整體思路就是收發資料的兩臺計算機之間連線了一個資料通道,資料沿著這個通道流動,最終到達目的地,會在目的地的那一端被取出。資料流動是雙向的,可以從任何一個端流入。

實際過程,可把收發資料總結為四步:

  • 1、建立套接字(建立套接字階段)
  • 2、將管道連線到伺服器端的套接字上(連線階段)
  • 3、收發資料(通訊階段)
  • 4、斷開管道並刪除套接字(斷開階段)



參考文獻: 域名知識百科

網路是怎樣連線的

相關文章