課程內容#
概述#
網絡應用程序的體系結構主要分為CS 結構和P2P 結構。
- 前者是客戶端(Client)/ 服務端(Server)結構,如微信、QQ、遊戲。
- 後者是端(Peer)到端結構,又叫對等體系結構,如迅雷、百度網盤。
- 進程通信時,沒有明確的 C/S,發起者即為客戶端,提供服務者即為服務端。
應用程序服務要求包括可靠數據傳輸、吞吐量、定時(時效)和安全性。不同的應用對網絡服務有不同的要求,如數據可否丟失、帶寬需求、時間敏感性等,所以產生了不同的應用層協議和運輸層協議:
- 應用層協議定義了交換報文類型、報文語法、字段語義以及發送、響應規則,類似網絡協議的三要素(語法、語義、同步)。
- 運輸層協議
- TCP:面向連接的服務,提供可靠的數據傳輸。
- UDP:不提供必要服務的輕量級運輸服務,不提供可靠的數據傳輸。
- PS
- socket 是應用程序與網絡之間的接口,對於運輸層的控制僅限於選擇運輸層協議、設定參數。
- UDP 可以自己實現可靠的數據傳輸。
WEB 與 HTTP 協議#
WEB 術語:對象、超文本標記語言 HTML、統一資源定位符 URL、WEB 頁面、WEB 瀏覽器、WEB 服務器(httpd、apache、tomcat)
HTTP:超文本傳輸協議
- HTTP 行為:請求報文、響應報文
- HTTP 特點
- 不用擔心數據丟失
- 無狀態協議,服務器不存儲客戶相關狀態信息
- HTTP 服務器總是處於打開狀態,有一個固定的 IP
- 使用 CS 結構
- 非持續連接和持續連接,又名,短連接和長連接
- HTTP 屬於短連接,服務器響應了請求後會通知 TCP 斷開連接,所以對於多個對象會重複地連接和斷開。
- HTTP 請求過程包含 TCP 三次握手,一般在第 3 次握手包含請求,直到接受對應文件。
- 請求報文
- 請求方法:
- GET-- 獲取
- POST-- 提交表單
- HEAD-- 測試,看通不通,不需要獲取所有數據
- PUT-- 傳數據到遠端(PUT 是幂等的,但 POST 不是)
- DELETE-- 刪除遠端數據
- 首部字段名包含瀏覽器類型等等。
- 響應報文
- 短語一般是狀態碼的描述。
- 常見狀態碼及短語:
- 200 OK
- 301 Moved Permanently
- 400 Bad Request
- 404 Not Found
- 505 HTTP Version Not Supported
- 用戶與服務器的交互 ——COOKIE
- 請求和相應報文中都添加了 COOKIE 首部行
- 在用戶端由瀏覽器管理相應 COOKIE 文件
- 在服務端維護一個數據庫
- 一個從來沒有請求過 jd 服務器的客戶主機,在發起請求後,服務器會創建其 COOKIE,並返回給客戶;
- 等下次下下次再請求 jd 服務器的時候,服務器會根據 COOKIE 返回特定數據。
- PS:
- 服務器根據客戶行為會生成一個人物畫像,可以和 COOKIE 綁定。
- 公司之間可能共享數據庫。
- WEB 緩存器🌟
- 又名代理服務器,如 CDN。
- 情景:海量用戶訪問某一個服務器的數據,流量過大肯定會導致服務器崩潰。
- 優化過程:瀏覽器先訪問 WEB 緩存器,如果裡面沒有想要的數據,則再往上游找數據,最後返回數據,並將數據存放在 WEB 緩存器裡。
- 優點:減少對客戶請求的響應時間,減少了數據中心的通信量,改善應用性能。
- PS:WEB 緩存器會定時向上游服務器請求更新數據。
HTTPS 協議#
HTTPS:具有安全性的 SSL 加密傳輸協議
HTTPS 在 HHTP 通信的中間過程添加 SSL/TLS(加密 / 解密)過程。
HTTPS 特點:
- 它需要到 CA 申請證書,需要交費;
- 它是具有安全性的 SSL 加密傳輸協議,而 HTTP 超文本傳輸協議,信息是明文傳輸;
- 它與 HTTP 使用的是完全不同的連接方式,端口也不一樣,前者是 443,後者是 80。
HTTP/2 協議#
新特性:連接復用。沒有同步的限制,一次可以傳輸多條消息,而不用一來一回。
FTP 協議#
FTP:文件傳輸協議
用戶連接遠程服務器,給用戶展示一個遠程桌面文件夾,用戶可以對其進行操作。
雙連接——FTP 的 TCP 連接:
- 控制連接:21 端口,長連接;
- 數據連接:20 端口,短連接。
- 特點:適用於並發量不高的場景,可以簡化業務實現。
PS:個人用戶用的少,一般服務於局域網。
SMTP、POP3、IMAP 協議#
郵件相關,最早期的互聯網業務
先從用戶 A 的代理,通過 SMTP 連接自己的郵箱服務器,再連線用戶 B 的郵件服務器,最後到達用戶 B 的代理。
- 郵箱服務器會檢查郵件內容是否合規;
- SMTP 協議只負責推,最後一步是用戶 B 基於其它協議主動請求拉取
PS:
- 不是直接與用戶主機通信
- 底層是基於 TCP
DNS 協議#
將主機名 / 域名轉換為 IP 地址;提供負載均衡服務
- 解析域名
- 負載均衡:同一個域名根據流量轉換到不同的合適的 IP 地址,主要是用來分流。
集中式 DNS 存在的問題:
- 單點故障:一個小問題會影響到全局(現在流行微服務,減少各種服務之間的耦合度)
- 通信容量大
- 距離遠會導致時延高
- 維護不易(目前銀行也有這個問題,系統版本低,想遷移卻難以遷移)
DNS 域名系統
- 根 DNS 服務器,因特網上有 13 個,都不在中國
- 頂級域 DNS 服務器,簡稱 TLD,如 com、cn
- 權威 DNS 服務器,如騰訊等 DNS 服務提供商
- 本地 DNS 服務器,可能有多個,如局域網、學校
DNS 解析過程:
主機到本地 DNS 屬於遞歸式,主機只發一次請求,只有本地 DNS 得到結果,才會返回。
本地 DNS 發起請求屬於迭代式,返回失敗就再次請求,可看圖感受。
DNS 記錄
- Name:名稱 / 主機 / 別名
- Value:IP 地址 / 應答地址 / 目標地址
- Type:記錄的類型
- TTL:域名 - IP 關係的有效時間,即本地緩存的時間
常見的類型有:
可以嘗試去自己的 DNS 服務平台裡添加 DNS 記錄~
PS:規範主機名的可讀性稍弱,可參考DNS records——CloudFlare
附加知識點#
- 網絡協議的三要素:語法、語義、同步(有跡可循)