請求到達Web伺服器,響應傳回浏覽器
思維導圖
how networks work sixth note 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頭部的協定号字段,并将包轉發給相應的子產品(TCP子產品 UDP子產品)
TCP頭部中的控制位SYN為1時(發起連接配接的包),檢查包的接收端口号并進行與進行等待連接配接的套接字進行對比
為套接字複制一個新的副本,并将發送方IP位址、端口号、序号初始值、視窗大小等參數寫入套接字中,同時配置設定用于
發送緩沖區和接收緩沖區的記憶體空間。
然後生成代表接收确認的ACK号,用于從伺服器向用戶端發送資料的序号初始值,表示接收緩沖區剩餘容量的視窗号大小,并用
這些資訊生成TCP頭部,委托IP子產品發送給用戶端
用戶端會傳回表示接收确認的ACK端口号,當這個ACK号傳回伺服器後,連接配接操作就完成了
伺服器端的程式進入調用accept的暫停狀态,當将新套接字的描述符轉交給伺服器程式之後,伺服器程式就會恢複運作
根據四種資訊比對套接字
TCP子產品會對比該套接字中儲存的資料收發狀态和收到的包的TCP頭部中的資訊是否比對
從包中提取資料,存放到接收到緩沖區中,與上次收到的資料快連接配接起來
TCP子產品會生成确認應答TCP頭部,并根據接收包的序号和資料長度計算出ACK号,然後委托IP子產品發送給用戶端
應用程式會調用Socket庫的read來擷取收到的資料
控制流程會轉移到伺服器程式,對收到的資料進行處理(檢查HTTP請求消息的内容),并根據請求的内容向浏覽器傳回相應的
資料
HTTP1.0中,伺服器先發起斷開操作
伺服器程式會調用調用Socket庫的close,TCP子產品會生成一個控制位FIN為1的TCP,并委托IP子產品發送給用戶端
當用戶端收到這個包後,會傳回一個ACK号。
用戶端調用close,生成一個FIN為1的TCP頭部發給伺服器,伺服器再傳回ACK,這時斷開操作就完成了
Web伺服器程式解釋請求消息并作出響應
虛拟目錄與實際目錄進行轉化
GET方法 輸入的資料作為參數添加在URI後面發送給伺服器
POST方法 将資料放在HTTP請求消息的消息體中發送給伺服器
Web伺服器的通路規則
(1)用戶端IP位址
(2)用戶端域名
(2)使用者名和密碼(Web伺服器提供的密碼認證功能 Web伺服器運作的CGI認證程式來驗證密碼)
根據用戶端域名設計規則
(使用DNS伺服器,通過IP查域名)
Web伺服器調用Socket庫的write,将響應消息交給協定棧
浏覽器接收響應消息并顯示内容
網卡将信号還原成數字資訊,協定棧将拆分的網絡包組裝起來并取出響應消息,然後将消息轉交給浏覽器
根據響應消息開頭的Content-Type頭部字段的值來進行判斷 charset附加表示文本編碼方式
Content-Encoding(壓縮或編碼技術轉化方式)
實際的顯示操作是由作業系統來完成的,浏覽器負責對作業系統發出指令