how networks work sixth note
摘要:
請求到達Web伺服器,響應返回瀏覽器
思維導圖
question
伺服器向客戶端返回的響應訊息不一定和客戶端向伺服器傳送的請求訊息通過相同的路由傳輸
客戶端計算機也可以當作伺服器來使用
一臺伺服器可以同時用作Web伺服器和郵件伺服器
看點
伺服器概覽...
請求到達Web伺服器,響應返回瀏覽器
思維導圖
question
伺服器向客戶端返回的響應訊息不一定和客戶端向伺服器傳送的請求訊息通過相同的路由傳輸 客戶端計算機也可以當作伺服器來使用 一臺伺服器可以同時用作Web伺服器和郵件伺服器
看點
- 伺服器概覽
- 伺服器的接收操作
- Web伺服器程式器解釋請求訊息並作出響應
- 瀏覽器接收響應訊息並顯示內容
伺服器概覽
- 客戶端與伺服器的區別
其硬體和作業系統不同 應用程式呼叫的Socket庫的程式元件不同 伺服器的程式可以同時和多臺客戶端計算機進行通訊
- 伺服器程式的結構
伺服器作業系統具有多工、多執行緒功能,可以同時執行多個程式 每一個客戶端連線進來,就啟動一個新的伺服器程式 模組:等待連線模組 通訊模組
- 伺服器端的套接字和埠號
區別(資料收發的角度):發起連線的一方是客戶端,等待連線的一方是伺服器 客戶端資料收發需要經過的4個階段 (1)建立套接字(建立套接字階段) (2)用管道連線伺服器端的套接字(連線階段) (3)收發資料(收發階段) (4)斷開管道刪除套接字(斷開階段) 伺服器是將階段(2)改成了等待連線 (1)建立套接字(建立套接字階段) (2-1)將套接字設定為等待連線狀態(等待連線階段) (2-2)接受連線(接受連線階段) (3)收發資料(收發階段) (4)斷開管道並刪除套接字(斷開階段) 伺服器建立過程: 協議棧呼叫socket建立套接字 呼叫bind將埠號寫入套接字中 協議棧會呼叫listen向套接字寫入等待連線狀態控制資訊 協議棧會呼叫accept來接受連線 一旦客戶端的包到達,就會返回響應包並開始接受連線操作 協議棧會給等待連線的套接字複製一個副本,然後將連線物件等控制資訊寫入新的套接字中 當accept結束之後,等待連線的過程也就結束了,這時候等待連線模組會啟動客戶端通訊模組 套接字的識別: 客戶端IP地址 客戶端埠號 伺服器IP地址 伺服器埠號 使用描述符來指代套接字的原因(應用程式和協議棧之間是使用描述符來指代套接字的) (1)等待連線的套接字中沒有客戶端IP地址和埠號 (2)使用描述符這一種資訊比較簡單
伺服器的接收操作
- 網絡卡將接收到的訊號轉化成數字資訊
接收操作: 網絡卡接收到訊號,將其還原成數字資訊 (報頭部分提取出時鐘訊號,並在每個時鐘週期位置檢測訊號的變化方向) 需要根據包末尾的幀校驗序列(FCS)來校驗錯誤 檢查MAC頭部中的接收方MAC 網絡卡需要通過中斷將網路包到達的事件通知給CPU (網絡卡驅動會根據MAC頭部判斷協議型別,並將包交給相應的協議棧)
- IP模組的接收操作
檢查IP頭部格式,檢查接收方IP地址 檢查包有沒有被分片 檢查IP頭部的協議號欄位,並將包轉發給相應的模組(TCP模組 UDP模組)
- TCP模組如何處理連線包
TCP頭部中的控制位SYN為1時(發起連線的包),檢查包的接收埠號並進行與進行等待連線的套接字進行對比 為套接字複製一個新的副本,並將傳送方IP地址、埠號、序號初始值、視窗大小等引數寫入套接字中,同時分配用於 傳送緩衝區和接收緩衝區的記憶體空間。 然後生成代表接收確認的ACK號,用於從伺服器向客戶端傳送資料的序號初始值,表示接收緩衝區剩餘容量的視窗號大小,並用 這些資訊生成TCP頭部,委託IP模組傳送給客戶端 客戶端會返回表示接收確認的ACK埠號,當這個ACK號返回伺服器後,連線操作就完成了 伺服器端的程式進入呼叫accept的暫停狀態,當將新套接字的描述符轉交給伺服器程式之後,伺服器程式就會恢復執行
- TCP模組如何處理資料包
根據四種資訊匹配套接字 TCP模組會對比該套接字中儲存的資料收發狀態和收到的包的TCP頭部中的資訊是否匹配 從包中提取資料,存放到接收到緩衝區中,與上次收到的資料快連線起來 TCP模組會生成確認應答TCP頭部,並根據接收包的序號和資料長度計算出ACK號,然後委託IP模組傳送給客戶端 應用程式會呼叫Socket庫的read來獲取收到的資料 控制流程會轉移到伺服器程式,對收到的資料進行處理(檢查HTTP請求訊息的內容),並根據請求的內容向瀏覽器返回相應的 資料
- TCP模組的斷開操作
HTTP1.0中,伺服器先發起斷開操作 伺服器程式會呼叫呼叫Socket庫的close,TCP模組會生成一個控制位FIN為1的TCP,並委託IP模組傳送給客戶端 當客戶端收到這個包後,會返回一個ACK號。 客戶端呼叫close,生成一個FIN為1的TCP頭部發給伺服器,伺服器再返回ACK,這時斷開操作就完成了
Web伺服器程式解釋請求訊息並作出響應
- 將請求的URI轉換為實際的檔名
虛擬目錄與實際目錄進行轉化
- 執行CGI程式
GET方法 輸入的資料作為引數新增在URI後面傳送給伺服器 POST方法 將資料放在HTTP請求訊息的訊息體中傳送給伺服器
- Web程式的訪問控制
Web伺服器的訪問規則 (1)客戶端IP地址 (2)客戶端域名 (2)使用者名稱和密碼(Web伺服器提供的密碼認證功能Web伺服器執行的CGI認證程式來驗證密碼) 根據客戶端域名設計規則 (使用DNS伺服器,通過IP查域名)
- 返回響應訊息
Web伺服器呼叫Socket庫的write,將響應訊息交給協議棧
瀏覽器接收響應訊息並顯示內容
- 通過響應的資料型別判斷其中的內容
網絡卡將訊號還原成數字資訊,協議棧將拆分的網路包組裝起來並取出響應訊息,然後將訊息轉交給瀏覽器 根據響應訊息開頭的Content-Type頭部欄位的值來進行判斷 charset附加表示文字編碼方式 Content-Encoding(壓縮或編碼技術轉化方式)
- 瀏覽器顯示網頁內容!訪問完成!
實際的顯示操作是由作業系統來完成的,瀏覽器負責對作業系統發出指令