計算機網絡複習(二) 應用層

1、Application

(1)網絡應用的常見架構

網絡應用一般採用兩種架構模式,一種是 CS (Client/Server) 架構,一種是 P2P (Peer-To-Peer) 架構

對於 CS 架構 而言,網絡中的每個節點是不對稱的,具體而言可以分爲服務端和客戶端兩類

簡單來說,服務端擁有資源,可以爲客戶端提供服務,而客戶端需要資源,需要向服務端申請服務

對於 P2P 架構 而言,網絡中的每個節點都是對稱的,也可以說每個節點都是服務端和客戶端

因爲每個節點都擁有資源,每個節點都可以提供服務,同時每個節點也都需要資源,每個節點也都需要申請服務

(2)網絡應用的通信方式

不同應用之間的通信,其實就是不同進程之間的通信,如果兩個進程在同一主機上,那麼通信過程由操作系統定義

假如兩個進程不在同一主機上,那麼它們之間的通信需要通過網絡,這時通信過程由一系列層次化的網絡協議定義

而站在 應用層 這一層次上,我們只需要定義好消息的內容,以及指定好把消息發給誰(目標進程)即可

一個進程可以通過套接字將消息交給底層,然後通過底層提供的服務,另一個進程可以通過套接字從底層得到消息

至於底層是如何把消息 (message) 從一個套接字傳到另一個套接字,不是應用層需要關心的內容

在這裏插入圖片描述

(3)如何定位進程

一個運行在網絡上的進程怎麼定位呢?我們可以通過 IP 地址定位網絡中的主機,然後通過端口定位主機上的進程

一些常見的應用層協議會帶有 默認的 端口號:

協議 端口 用途
HTTP 80 網頁傳輸
FTP 21 文件傳輸
SMTP 25 郵件發送
POP3 110 郵件接收
IMAP 143 郵件接收
Telnet 23 遠程登陸

2、Web and HTTP

(1)通信過程

對於網頁 (Web) 應用,通常使用 HTTP (Hypertext Transfer Protocol) 控制通信規則,其依賴於 TCP 提供的服務

根據標準的不同,HTTP 協議可以分爲 HTTP/1.0 和 HTTP/1.1,其中 HTTP/1.1 由 HTTP/1.0 改進而來

在 HTTP/1.0 中,使用的是 非持續性連接 (Non-persistent Connection),對於 CS 架構通信過程如下:

  • 客戶端請求與服務端建立 TCP 連接
  • 服務端同意後,正式建立 TCP 連接
  • 客戶端發送請求,在請求信息中指定需要獲取的資源
  • 服務端返回響應,在響應信息中包含資源實體,之後關閉 TCP 連接
  • 客戶端收到響應,解析拿到資源實體
  • 如果發現資源實體還要引用其它資源,那麼重複以上步驟

在這裏插入圖片描述

而在 HTTP/1.1 中,使用的是 持續性連接 (Persistent Connection),對於 CS 架構通信過程如下:

  • 客戶端請求與服務端建立 TCP 連接
  • 服務端同意後,正式建立 TCP 連接
  • 客戶端發送請求,在請求信息中指定需要獲取的資源
  • 服務端返回響應,在響應信息中包含資源實體,但是不會關閉 TCP 連接
  • 客戶端收到響應,解析拿到資源實體
  • 如果發現資源實體還要引用其它資源,那麼重複步驟 3~ 5

假設我們需要傳輸一個 HTML 文件,在文件中引用十個 JEPG 圖片,計算傳輸時間?

  • 若使用非持續性連接:T = (2RTT + Ttransfer) + (2RTT + Ttransfer) * 10
  • 如果使用持續性連接:T = (2RTT + Ttransfer) + (RTT + Ttransfer) * 10

(2)消息格式

HTTP 採用 請求/響應 格式,客戶端提交請求 (Request),服務端返回響應 (Response)

請求消息的格式請看下面的圖片,其中常見的 請求方法 如下:

  • GET:請求指定資源,返回資源實體
  • POST:向指定資源提交數據,可能導致新資源的建立或舊資源的修改
  • HEAD:類似 GET 請求,只是返回的響應沒有具體的內容,常常用於獲取報頭
  • DELETE:刪除指定的資源
  • PUT:使用提交的數據取代指定的資源
  • TRACE:返回服務端收到的請求,常常用於測試
  • OPTIONS:返回服務端針對特定資源所支持的請求方法,也能用於查看服務端的性能

在這裏插入圖片描述

響應消息的格式請看下面的圖片,其中常見的 狀態代碼和狀態信息 如下:

  • 1**:信息,服務端收到請求,要求客戶端繼續執行操作
  • 2**:成功
    • 200:OK,服務器已成功處理請求,並返回請求的資源
  • 3**:重定向
    • 301:Moved Permanently,永久重定向,請求的資源永久移動到新位置
    • 302: Found,臨時重定向,請求的資源暫時移動到新位置
  • 4**:客戶端錯誤
    • 400:Bad Request,請求報文存在語法錯誤
    • 403:Forbidden,對請求資源的訪問被服務器拒絕
    • 404:Not Found,在服務器上沒有找到請求的資源
  • 5**:服務端錯誤
    • 500:Internal Server Error,服務器在執行請求時發生錯誤
    • 502:Bad Gateway,作爲網關的服務器在執行請求時,從遠程服務器收到一個無效的響應
    • 503:Service Unavailable,由於服務端超載或停機維護,服務器暫時無法處理客戶端的請求

在這裏插入圖片描述

(3)Cookies

由於 HTTP 協議是 無狀態的,因此服務器想要跟蹤用戶狀態,可以使用 Cookies 技術

Cookie 其實就是一個特殊的值,它由服務端創建和維護,併發送給客戶端

之後,客戶端在每次請求時帶上 Cookie,服務端通過 Cookie 就能判斷用戶狀態

在這裏插入圖片描述

(4)Caches

Caches 技術可以降低客戶端獲取響應的時間,也能減少服務端處理請求的壓力,可以說是一舉兩得

使用 Caches 其實就是建立一個或多個 代理服務器 (proxy server),由代理服務器幫助響應客戶端的請求

客戶端直接發送請求到代理服務器,如果請求的資源在代理服務器上,那麼直接返回給客戶端

如果不在,那麼代理服務器先向服務器請求資源,得到資源後保存在本地,之後再返回給客戶端

在這裏插入圖片描述

簡單描述一下 HTTP 協議的發展過程?

HTTP/0.9【1991 年】

  • 最簡單的版本,只能訪問 HTML 格式資源,沒有頭部,請求方法只有 GET

HTTP/1.0【1996 年】

  • 增加 HTTP 版本號
  • 增加狀態代碼和狀態信息
  • 增加請求方法,包括 POST 和 HEAD
  • 增加頭部,無論是請求或者是響應都要有頭部
  • 在頭部中通過設置 Content-Type 支持傳輸其它類型的文件

HTTP/1.1【1997 年】

  • 增加持久性連接,能讓 HTTP 請求複用 TCP 連接
  • 支持流水線傳輸,允許在一個 TCP 連接中同時發送多個請求
  • 增加請求方式,包括 DELETE、PUT、OPTIONS 等等

HTTP/2.0【2015 年】

  • 二進制分幀:將傳輸的數據劃分爲更小的幀,並對它們採用二進制編碼
  • 服務端推送:允許在客戶端沒有請求的情況下,主動給客戶端發送資源
  • 壓縮頭部:多次請求的很多頭部其實是重複的,有必要對頭部進行處理
    一是使用壓縮工具對頭部進行壓縮後再發送,二是對於重複的字段可以使用索引號來代替

3、File and FTP

(1)通信過程

對於文件 (File) 傳輸,通常使用 FTP (File Transfer Protocol) 控制通信規則,其依賴於 TCP 提供的服務

FTP 協議在通信時會建立兩個連接,分別爲 控制連接 (Control Connection) 和 數據連接 (Data Connection)

  • 控制連接:用於傳輸命令,進行授權認證
  • 數據連接:用於傳輸文件

對於 CS 架構通信過程如下:

  • 客戶端與服務端建立控制連接
  • 客戶端通過控制連接進行授權,發送命令
  • 服務端收到文件傳輸命令之後,建立數據連接
  • 服務端通過數據連接傳輸文件,當一個文件傳輸完成後,服務端關閉數據連接
  • 如果還有其它文件傳輸,需要重新建立數據連接

在這裏插入圖片描述

(2)消息格式

FTP 採用 命令/響應 格式,客戶端發送的命令以及服務端返回的響應通過控制連接傳輸,它們都是 7 比特的 ASCII

客戶端發送 命令 (Command) 進行授權和請求資源,常用的命令如下:

  • USER username:向服務端發送賬號
  • PASS password:向服務端發送密碼
  • LIST:返回當前目錄的文件列表
  • RETR filename:從服務端下載文件
  • STOR filename:將文件上傳到服務端

服務端接收到命令後,發送 響應 (Response) 返回結果,一個響應包括狀態代碼和狀態信息,常見的響應如下:

  • 311:賬號正確,要求輸入密碼
  • 125:已經建立數據連接,開始傳輸文件
  • 425:不能建立數據連接

4、Email and SMTP

(1)通信過程

對於郵件 (Mail) 傳輸,通常使用 SMTP (Simple Mail Transfer Protocol) 控制通信規則,其依賴於 TCP 提供的服務

郵件傳輸有兩個重要的組件,分別是 用戶代理 (User Agent) 和 郵件服務器 (Mail Server)

  • 用戶代理:用於編輯、閱讀郵件
  • 郵件服務器:用於發送、接收郵件

對於 CS 架構通信過程如下:

  • 發送方通過自己的用戶代理編輯郵件
  • 發送方的用戶代理髮送郵件到自己的郵件服務器
  • 發送方的郵件服務器接收郵件,將郵件放在消息隊列 (Message Queue),等待發送
  • 發送方的郵件服務器發送郵件到接收方的郵件服務器
  • 接收方的郵件服務器接收郵件,將郵件放在郵件箱子 (Mail Box),等待閱讀
  • 接收方通過自己的用戶代理閱讀郵件

在這裏插入圖片描述

(2)消息格式

最開始的時候,郵件只能傳輸文本,因此只用簡單的 ASCII 定義郵件格式

普通郵件格式 包括兩個部分,分爲頭部 (Header) 和主體 (Body)

在這裏插入圖片描述

後來,郵件還能傳輸多媒體資源,又定義了新的格式 MIME (Multiperpose Internet Mail Extension)

只需要在頭部添加新行,指定使用 MIME 郵件格式 即可

在這裏插入圖片描述

SMTP 同樣採用 命令/響應格式,對於客戶端發送的命令以及服務端返回的響應,它們都是 7 比特的 ASCII

客戶端發送 命令 (Command) 進行授權和請求資源,常用的命令如下:

  • HELO:建立連接
  • AUTH LOGIN:身份認證
  • MAIL FROM address:指定發送郵件的郵箱
  • RCPT TO address:指定接收郵件的郵箱
  • DATA:指定郵件正文
  • QUIT:關閉連接

服務端接受到命令後,發送 響應 (Response) 返回結果,一個響應包括狀態代碼和狀態信息,常見的響應如下:

  • 220:服務就緒
  • 250:要求的操作已完成
  • 354:開始輸入郵件正文,以 . 結束
  • 221: 服務關閉

(3)其它郵件協議

上面介紹過的 SMTP 是 郵件發送協議,下面要介紹的 POP3 和 IMAP 是 郵件接收協議

  • POP3 (Post Office Protocol 3):允許用戶從郵件服務器下載郵件
  • IMAP (Internet Mail Access Protocol):允許用戶直接在郵件服務器上管理郵件,包括移動、分類等等

5、DNS

DNS (Domain Name System) 的作用是 將域名解析爲 IP 地址

DNS 是一個 分佈式、層次化的數據庫,裏面儲存着域名與 IP 地址的映射關係,稱爲 資源記錄 (Resource Record)

資源記錄的格式如下:(name, value, type, ttl),常見的資源記錄如下:

  • A 記錄:type 爲 A,此時 name 表示域名,value 表示 IP 地址
  • NS 記錄:type 爲 NS,此時 name 表示域名,value 表示負責解析 name 的域名服務器的域名
  • SOA 記錄:type 爲 SOA,此時 name 表示域名,value 表示負責解析 name 的主域名服務器的域名
  • CNAME 記錄:type 爲 CNAME,此時 name 表示別名,value 表示標準名稱

數據庫按照層級的不同可分爲四層:

  • 根域名服務器 (Root DNS Server):目前全球一共有 13 臺根域名服務器
  • 頂級域名服務器 (Top-Level Domain DNS Server):提供 com、org、net、edu 等頂級域名的解析服務
  • 權威域名服務器 (Authoritative DNS Server):爲特定的組織提供解析服務
  • 本地域名服務器 (Local DNS Server):嚴格來說不屬於其中一層,每個 ISP 都有一個本地域名服務器

DNS 也是一種 應用層協議,當請求域名解析服務時,通常使用 DNS 控制通信規則,其依賴於 UDP 提供的服務

(1)通信過程

當客戶端向域名服務器請求域名解析服務時,有兩種查詢方式,分別是迭代查詢和遞歸查詢

如果使用 迭代查詢 (Iterated Query),那麼通信過程如下:

在這裏插入圖片描述

如果使用 遞歸查詢 (Recursive Query),那麼通信過程如下:

在這裏插入圖片描述

(2)消息格式

DNS 使用 請求/回覆格式,它們使用相同的報文

在這裏插入圖片描述

【 閱讀更多計算機網絡系列文章,請看 計算機網絡複習

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章