計網-1(協議層次&HTTP概述)


1-5 協議層次及其模型

1.5.1 因特網協議棧

  • 因特網協議棧由五層組成:應用層、傳輸層、網絡層、鏈路層、物理層

  • OSI(開放系統互連參考模型)參考模型的七層組成:應用層、表示層、會話層、運輸層、網絡層、鏈路層、物理層。

  • 表示層與會話層留給應用程序開發者處理。

1.應用層

  • 應用層是網絡應用程序以及它們的應用層協議存留的地方。

    • 應用層協議:HTTP(提供Web文檔的請求和傳送),SMTP(提供電子郵件報文的傳輸),FTP(提供兩個端系統之間的文件傳送)
  • 應用層協議分布在多個端系統上,一個端系統中的應用程序使用協議與另一個端系統中的應用程序交換信息分組

  • 應用層的信息分組:報文 message

(2) 表示層

  • 使通信的應用程序能解釋交換數據的含義(數據壓縮、數據加密、數據描述)

(3) 會話層

  • 提供數據交換的界定和同步功能,不同機器上的用戶建立和管理會話(建立檢查點、回復方案)

2.傳輸層

  • 在應用程序端點之間傳送應用層報文。

    1. TCP傳輸協議:向其應用程序提供面向連接的服務(確保傳遞、流量控制、擁塞控制)
    2. UDP傳輸協議:向其應用程序提供無連接服務(無可靠性、流量控制、擁塞控制)
  • 運輸層分組:報文段 segment

3.網絡層

  • 網絡層負責將稱為數據報的網絡層分組從一台主機移動到另一台主機。

  • 控制子網的運行:邏輯編址、分組傳輸、路由選擇,比如 IP、IPV6、SLIP 等等。

  • 網絡層分組:數據報 datagram

4.鏈路層

  • 網絡層依靠鏈路層服務將分組從一個節點(主機、路由器)移動到路徑上的下一個節點。
    即:在每個節點,網絡層將數據報下傳給鏈路層,鏈路層沿着路徑將數據報傳遞給下一個節點,在下一個節點鏈路層將數據報上傳給網絡層。

  • 網絡層將受到來自每個不同鏈路層協議不同的服務(鏈路層協議)。

  • 鏈路層分組稱為幀 frame

5.物理層

  • 將鏈路層的幀中的一個個比特從一個節點移動到下一個節點(仍是鏈路相關協議),且與實際傳輸媒介有關(銅線、光纖)

1.5.2 封裝

  • 在每一層,一個分組具有兩種類型字段:首部字段和有效載荷字段(來自上一層的分組)。
  1. 發送主機端,應用層報文被傳送給運輸層,運輸層收取報文並附附加信息(運輸層首部信息)被接收端運輸層使用
    • 首部信息包含:允許接收端運輸層向上向適當應用程序交付保溫信息;差錯檢測位信息(判斷報文比特途中是否改變)
    • 應用層報文+運輸層首部信息 -> 報文段
  2. 運輸層向網絡層傳遞該報文段,網絡層增加了源、目的端系統地址等網絡層首部信息,生成網絡層數據報
    • 報文段+網絡層首部信息 -> 數據報
  3. 鏈路層增加其自身鏈路層首部信息生成鏈路層幀
    • 數據報+鏈路層首部信息 -> 幀

2-1 應用層協議原理

2.1.1 網絡應用程序體系結構

  • 應用程序體系結構由應用程序研發者設計,規定了如何在端系統上組織該應用程序

1 客戶-服務器體系結構(client-server cs)

服務器:一台總是打開的主機,服務於來自許多其他稱為客戶的主機的請求。
數據中心:配備大量主機的強大虛擬服務器

  1. 客戶之間不直接通信
  2. 服務器具有固定的周知的地址(IP地址)

2 P2P體系結構(P2P)

  • 對位於數據中心的專用服務器有最小(或無)依賴,應用程序在間斷鏈接的主機之間使用通信(對等方)

2.1.2 進程通信

  • 兩個不同端系統上的進程,通過跨越計算機網絡交換報文進行通信。
    • 發送進程:生成並向網絡中發送報文
    • 接受進程:接受這些報文並可能通過回送報文進行相應。

1-客戶和服務器進程

  1. 客戶:發起通信的進程(瀏覽器)
  2. 服務器:等待聯系的進程(Web服務器)

2-進程與計算機網絡間的接口

  • 進程通過套接字(socket)的軟件接口向網絡發送報文和從網絡接受報文
    • 套接字相當於一台主機內應用層與傳輸層之間的接口
    • 套接字為建立網絡應用程序的可編程接口-應用程序編程接口(API)

3-進程尋址

  • 發送進程向接受進程發送分組需接受進程的地址,標識接受進程需定義
    1. 主機地址 - IP地址
    2. 在目的主機中制定接受進程的標識符 - 目的地端口號

2.1.3 可供應用程序使用的運輸服務

  1. 可靠數據傳輸:確保應用程序一段發送正確數據且完全交付給應用程序另一端
  2. 吞吐量
    1. 帶寬敏感的應用:具有吞吐量要求的應用
    2. 彈性應用:能根據可用帶寬利用可供使用吞吐量。
  3. 定時
  4. 安全性

2.1.4 因特網提供的運輸服務

1. TCP服務:面向連接服務和可靠數據傳輸服務

  1. 面向連接服務:應用層數據報開始流動之前,TCP讓客戶和服務器互相交換運輸層控制信息
    • 為握手過程-為大量分組到來做好准備。 握手后一個TCP連接就在兩進程套接字間建立。
  2. 可靠數據傳送服務:通信進程依靠TCP,無差錯、按適當順序交付所有發送的數據。
  3. 擁塞控制機制:抑制發送進程(客戶/服務器),試圖限制每個TCP連接使其公平共享網絡帶寬

2. UDP服務:提供不必要服務的輕量級運輸協議(不可靠數據傳送服務)

2.1.5 應用層協議

  • 定義不同端系統上應用程序進程如何相互傳遞報文
    1. 交換的報文類型(請求/相應報文)
    2. 各種報文類型的語法(報文各個字段及如何描述)
    3. 字段語義
    4. 確定進程何時如何發送報文,相應報文的規則

2-2 Web和HTTP

2.1.1 HTTP概況

  • 超文本傳輸協議(HTTP):Web的應用層協議,Web的核心
  • 實現方式:客戶程序和服務器程序實現
    • 客戶程序和服務器程序運行在不同的端系統,通過交換HTTP報文進行會話。
    • HTTP定義了這些報文的結構以及客戶和服務器進行報文交換的方式。
  • HTTP定義了Web客戶向Web服務器請求Web頁面的方式,以及服務器向客戶傳送Web頁面的方式。
  • HTTP使用TCP作為其支撐運輸協議(客戶發起一個與服務器的TCP連接,連接建立后瀏覽器和服務器進程可通過套接字接口訪問TCP)
  1. Web頁面由對象組成,多數Web頁面含有一個HTML基本文件和幾個對象引用(1個HTML和5個JPEG)
  2. HTML基本文件通過對象的URL地址引用頁面的其他對象,每個URL地址由兩部分組成
    • 存放對象的服務器主機名和對象的路徑名
  3. Web瀏覽器實現了HTTP的客戶端
  4. Web服務器實現了HTTP的服務器端,用於存儲Web對象,每個對象由URL尋址

2.2.2 非持續連接和持續連接

  • 非持續連接:每個請求相應對經過一個單獨的TCP連接發送
  • 持續連接:所有請求和相應經相同的TCP連接發送
  • HTTP默認情況下使用持續連接

連接步驟:

  1. HTTP客戶進程在端口號80發起一個到服務器的TCP連接(客戶和服務器上分別有一個套接字與該連接相關)
    • 第一次握手(發送小報文段)
  2. HTTP客戶經其套接字想服務器發送一個HTTP請求報文(包含路徑名)
  3. HTTP服務器進程經其套接字接受該請求報文,從其存儲器檢索出對象,在一HTTP相應報文中封裝對象並通過套接字想客戶發送響應報文
    • 第二次握手(服務器用小TCP報文段做出確認和相應)
  4. HTTP服務器進程通知TCP斷開連接(直到TCP確認客戶完整接受響應報文才實際斷開)
    • 第三次握手:客戶向服務器返回確認
  5. HTTP客戶接受相應報文,TCP連接關閉
  • 非持續連接:先接受HTML文件得到對象引用再重復前序步驟獲得所有對象(使用不同TCP連接)
  • 持續連接:發送相應后保持TCP連接打開,后續請求和相應通過相同連接傳送。

2.2.3 HTTP報文格式

1- HTTP請求報文

點擊查看實例請求報文
GET /article/ae97a6469d2591fafd461dd4.html HTTP/1.1
Host: jingyan.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://www.baidu.com/link?url=3MYyQnhUNvb0WZ6fx-iURy86qugB6-yMFGI7kouDzC46_O6c7vdGeinYRVYhXE5XVkKL6d7918xZbjfVn30lFrf_kBRYjMltPWmkjntZO4C&wd=&eqid=b33b0e350007696100000002614d2269
Connection: keep-alive
Cookie: BAIDUID=84AC2E3F08910E0A86009C5123A582A8:FG=1; BIDUPSID=E52CF02E8A85497FDCD7843CABB6C220; PSTM=1591362239; Hm_lvt_46c8852ae89f7d9526f0082fafa15edd=1631953943,1632104317,1632398957,1632445042; bdshare_firstime=1591625320291; EXP_NAV_AUTH_NEW=1; __yjs_duid=1_bdea06de88ea2bcdd4019be614d8909f1619689514623; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDUSS=BSSEt5OWx-Tzh-dGhmNGV2WFpNcmZnOUtDTVctdmxzMUFlTXR5ZVR2ZnpkMjloRUFBQUFBJCQAAAAAAAAAAAEAAAB3koL5yrLDtNLiy7zaq9qrxNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPqR2Hz6kdhRz; H_PS_PSSID=34652_34530_34068_31253_34655_34584_34518_34662_34578_26350_34420_34697_34676; ab_sr=1.0.1_ZWRhMTI1NmM0MDlhODZiMWU2NmVmYTI3YTk5MGRjNDFhN2Y3NjQxYjJmZDlhMzJlOTIzYTEwZWIwOWEyNmVmOWVmMGMyMDk3OWZhOGFjMDFkMWE2YmQ2MzA4YzkwNzJmNGRjZTc1MTY2ZjZhOTI1M2NhZDY0YzdiNGQ4OTY0MTQ3NGFhYmI5NjI0MjFhYWQzNzk5NDhkZWI1NWRiOTMxMQ==; BDSFRCVID=oZ_OJeCmHx4cYXoHEerHuaF0k2KK0gOTHllnbRLIKOBhh4IVJeC6EG0Ptf8g0KubuTkzogKK0gOTH6KF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tbCeoK0-tDt3DC_l-tvfq44yKgc22Dre2I6X0bnq26rHDbTw5tTjKICShUFs2hTdB2Q-5b6dMIbjofnvyMoqKxk0-tDja5jiWbRM2MbdanR_HxosyfRcL4kJj-rpBtQmJeTxoUJ25DnJhhvG-RoxMnIebPRiJPb9Qg-qahQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0HPonHjLBD63W3j; BA_HECTOR=0k21240l8h040k0kje1gkqdha0q; Hm_lpvt_46c8852ae89f7d9526f0082fafa15edd=1632445042; delPer=0; PSINO=2
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-site
Cache-Control: max-age=0
  1. 請求行:HTTP請求報文的第一行,包含方法字段、URL字段和HTTP版本字段
    • egGET /article/ae97a6469d2591fafd461dd4.html HTTP/1.1
    1. 方法字段:GET/POST/HEAD/PUT/DELETE,當瀏覽器請求一個對象時使用GET方法
    2. URL字段:帶有請求對象的標識
    3. HTTP版本字段:HTTP/1.1
  2. 首部行:請求行后繼的額行
    1. Host:指明對象所在主機
    2. User-Agent: 首部行用來指明用戶代理,即向服務器發送請求的瀏覽器類型。(Mozilla-Firefox)
    3. Accept-Language:首部行標識用戶想得到該對象的語言版本
    4. ...

2-HTTP響應報文

點擊查看實例響應報文
HTTP/1.1 200 OK
Bdpagetype: 3
Bdqid: 0xf275fc6200001d4c
Cache-Control: private
Ckpacknum: 2
Ckrndstr: 200001d4c
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Fri, 24 Sep 2021 03:07:45 GMT
Server: BWS/1.1
Set-Cookie: delPer=0; path=/; domain=.baidu.com
Set-Cookie: BD_CK_SAM=1;path=/
Set-Cookie: PSINO=2; domain=.baidu.com; path=/
Set-Cookie: BDSVRTM=41; path=/
Set-Cookie: H_PS_PSSID=34652_34530_34068_31253_34655_34584_34518_34662_34578_26350_34420_34697_34676; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1632452865242458036217471147827290709324
Vary: Accept-Encoding
X-Frame-Options: sameorigin
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
  1. 初始狀態行:協議版本字段、狀態嗎字段和狀態信息
  2. 首部行
    1. Date:首部行指示服務器產生並發送該響應報文的日期和時間(服務器檢索到該對象,將該對象插響應報文並發送報文的時間)
    2. Server:首部行指示該報文是一台BWS/1.1服務器產生的(Baidu Web Server)
    3. Content-Length/Type:首部行指示被發送對象的字節數和文本形式
    4. ...
  3. 實體體:報文的主要部分,包含了請求的對象本身

3-常用狀態碼和相關短語

  1. 200 OK:請求成功,Web 服務器成功處理了客戶端的請求,信息在返回的響應報文中
  2. 301 Moved Permanently: 請求的對象被永久轉移,新的URL在相應報文的Location:首部行中。客戶軟件將自動獲取新的URL
  3. 302:臨時重定向,瀏覽器會抓取重定向后網頁的內容而保留舊的網址,因為搜索引擎認為重定向后的網址是暫時的。
  4. 400 Bad Request:通用差錯代碼,指示該請求不被服務器理解,多為參數不合法導致 Web 服務器驗參失敗。
  5. 404 Not Fount: 被請求的文檔不在服務器上,Web 服務器找不到資源。
  6. 500:Web 服務器錯誤,服務器處理客戶端請求的時候發生錯誤。
  7. 503:服務不可用,服務器停機。
  8. 504:網關超時。
  9. 505 HTTP Version Not Supported: 服務器不支持請求報文使用的HTTP協議版本

2.2.4 用戶和服務器的交互:cookie

  • HTTP使用Cookie:Web站點希望能識別用戶以限制用戶訪問或將內容與用戶身份聯系。

組成:

  1. HTTP相應報文中的一個cookie首部行
  2. HTTP請求報文中的一個cookie首部行
  3. 用戶端系統中保留有一個cookie文件,由用戶瀏覽器進行查看
  4. 位於Web站點的一個后端數據庫。

當用戶首次訪問一個站點時可能需要提供一個用戶標識(姓名、年齡...),后繼會話中瀏覽器向服務器傳遞一個cookie首部從而向服務器標識了用戶。
即cookie可在無狀態的HTTP之上建立一個用戶會話層。

2.2.5 Web緩存

  • 能夠代表初始Web服務器來滿足HTTP請求的網絡實體。
    1. 充當服務器:若Web緩存器檢查本地存儲了對象副本,則向客戶瀏覽器用HTTP響應報文返回該對象
    2. 充當客戶:若沒有,則打開一個與該對象的廚師服務器的TCP連接,Web緩存器發送一個對該對象的HTTP請求。當Wen緩存器接受到該對象時在本地存儲空間存儲一份副本,並向客戶瀏覽器用HTTP相應報文發送該副本。

優勢:

  1. 減少客戶請求的響應時間(客戶與Web緩存器的瓶頸帶寬可能很高)
  2. 減少一個機構接入鏈路到因特網的通信量。

2.2.6 條件GET方法

  • HTTP協議提供的機制,允許緩存器證實其對象是最新的而非陳舊的
    1. 請求報文使用GET方法
    2. 請求報文中含有一個If-Modified-Since首部行

工作機理:

  1. 請求報文中首部行If-Modified-Since值等於最近一次服務器發送的相應報文中的Last-Modified:首部行的值
  2. Web服務器向緩存器發送一個相應報文(空的實體體),包含Last-Modified信息
    • 304 Not Modified標識緩存器中的為最新版本


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM