網路是如何連線的--第六章筆記

徹恩發表於2018-02-22

第六章 請求到Web伺服器響應返回瀏覽器

本章概要

本章主要介紹了web伺服器接收資料和返回響應的內容主要是四個方面:1)伺服器是什麼? 2)伺服器如何進行接收操作? 3) 伺服器裡的解釋程式是如何執行的? 4)返回到客戶端是如何顯示在瀏覽器裡的

6.1 伺服器的概覽

Ⅰ 客戶端與伺服器的區別

一方面作業系統和硬體與客戶端不相同,另一方面網路相關的部分比如網路卡,協議棧,Socket庫是相同的;在連線的時候,客戶端是請求連線,伺服器是等待連線。

Ⅱ 伺服器程式的結構

正常情況下,服務端由兩個模組組成,一個是等待連線的模組,一個是與客戶端通訊的模組。

服務端系統在初始化後執行等待模組程式並且進入等待狀態,當有客戶端連線的時候,由等待狀態變為執行狀態並且生成一個新的客戶端通訊模組,讓新連線的客戶端能夠一對一連線到服務端的套接字上。

Ⅲ 服務端的套接字與埠號

因為從資料的收發操作是無法區分是服務端還是客戶端的,所以是通過連線時候等待連線與請求連線來區分的。

在連線的過程中:
服務端先建立套接字: 1) 建立套接字;2)將套接字設定位等待連線的狀態;3)接受連線; 4) 收發階段;5)斷開管道並刪除套接字
客戶端請求連線的狀態:1)建立套接字;2)使用管道向服務端發起請求連線;3) 收發資料;4) 斷開管道並刪除套接字

埠是用來識別套接字的,進行連線物件的判斷:客戶端IP/埠號 + 服務端IP/埠號

使用描述符的原因:在等待連線的時候不知道客戶端的IP地址和埠號;使用描述符這個資訊比較簡單

6.2 伺服器的接收操作

Ⅰ 網路卡將收到的訊號轉換成數字資訊

先將接收到的訊號轉化成數字資訊並根據FCS來校驗錯誤,接著檢查MAC頭部中接收方的MAC地址,最後將資料放在網路卡的緩衝區內,向作業系統發起中斷請求。

這裡有兩步:第一步,網路卡中的MAC模組將網路包從訊號還原成數字資訊,校驗資料包的完整性並放入快取中;第二步,網路卡驅動模組根據MAC頭部來判斷協議型別後交給對應的協議棧(TCP,UDP,IP等)

Ⅱ IP模組的接收操作

資料從網路卡快取中出來之後進入記憶體中,先先查IP頭部格式是否規範,然後檢查目的IP地址(在這裡,如果服務端啟用了包轉發的規則對於不是自己的包可以進行轉發;客戶端對於不是自己的包直接丟棄),接下來確定是否有分片以便進行重組,最後根據協議交給對應的模組(TCP/UDP)

Ⅲ TCP 模組如何處理連線包

所謂連線包是客戶端第一次向服務端發起請求的包。
此時SYN = 1,在服務端收到包後,先檢查接收方的埠號。確定該埠號存在並且是等待連線模組的埠號。
如果存在,則為這個套接字複製一個副本,並將IP地址,埠號,視窗大小,序列號初始值等資訊寫入套接字中,分配儲存空間。
最後打包生成ACK號,序列初始值,剩餘視窗大小到TCP頭部委託IP模組傳送給客戶端。

Ⅳ TCP模組如何處理資料包

首先看套接字,套接字唯一性: 傳送方IP地址/埠號 + 接收方IP地址/埠號;
接著檢視TCP的頭部資訊(套接字中儲存著一個序號數和資料的長度計算下一個序列號,並檢查與收到的TCP頭部資訊是否一致);
最後將資料放在緩衝區中還原成包之前的狀態

當TCP模組完成操作的同時,應用程式會直接呼叫read來等待應答

Ⅴ 斷開操作

HTTP1.0 是伺服器先發起斷開操作;HTTP1.1 是客戶端呼叫Socket的close 先發起斷開操作,設定TCP模組的FIN欄位全位1;客戶端收到之後,返回ACK號並呼叫close,服務端返回給客戶端ACK號;幾分鐘後套接字就刪除了。

6.3 web 伺服器程式解釋請求並做出響應

這裡主要是偏軟的所寫的核心服務程式

Ⅰ 將請求的URL轉換成實際的檔名

對於web伺服器收到請求的HTTP訊息進行處理:比如GET,URL是一個檔名,將檔案讀取返回給客戶端就好了

此時對於客戶端看到的目錄對於服務端其實是一個虛擬的路徑並非真實的目錄

Ⅱ 執行 CGI 程式

當發起請求的時候,服務端會執行對應的CGI程式並把結果返回給客戶端

過程: 瀏覽器訪問web伺服器時,通過GET/POST 的方法將請求訊息體中新增資料;服務端收到訊息後先看檔名是不是程式名;接著將訊息體的資料作為輸入,委託作業系統執行程式最後將處理的結果返回給web伺服器(這個地方沒懂)(比如直接嵌入到HTML返回給客戶端)。

Ⅲ web伺服器的訪問控制

訪問控制,確定是否允許訪問,常見三種機制:1)檢查客戶端的IP地址;2)檢查客戶端的域名;3)檢查使用者名稱和密碼

對於IP地址,設定規則就可以

對於客戶端的域名,客戶端向web伺服器發起請求;web伺服器根據源IP地址,向Web DNS伺服器查詢,Web DNS伺服器來訪問客戶端的DNS伺服器查詢;然後依次返回給web伺服器,伺服器根據返回的域名響應客戶端的HTTP請求。

對於使用者名稱/密碼 驗證,返回請求認證的資料包,HTTP頭部是 401 Authorization Required,最後根據資料庫等返回響應請求。

Ⅳ 返回響應訊息

在完成請求請求後會有響應訊息傳送給客戶端;web伺服器將會呼叫 write 將訊息傳送給協議棧並通過對應描述符告訴協議棧關於客戶端的資訊,最終打包/分包,新增頭部資訊通過路由傳送到客戶端。

6.4 瀏覽器接收響應訊息並顯示內容

Ⅰ 通過響應的資料型別判斷內容

返回的資料最終是一個HTTP訊息,一個二進位制的字串。所以先要判斷是什麼樣的型別,比如文字,影像,音訊,視訊等。

一般常用的方式是檢視訊息頭的 Content-Type 欄位,常見的格式: text/html | image/png | image/jpeg | audio/mpeg | application/pdf | multipart/mixed

第二種方式是通過檔案的副檔名來確定資料的型別

最後一戰,瀏覽器顯示網頁的內容,訪問完成

此時返回的HTTP請求訊息已經到了瀏覽器中,有些內容是瀏覽器自身負責(比如解釋HTML中的標籤,以及如何渲染CSS等等),有些是其他的應用程式負責(比如幻燈片,文書處理等)。

顯示完成之後,就等待著下一個操作了。此時從客戶端的請求到返回服務端響應訊息到客戶端這個過程結束了。

相關文章