目錄
1. 網絡應用的體系結構
2. 客戶-服務器(C/S)體系結構
3. 對等體(P2P)體系結構
4. C/S 和 P2P 體系結構的混合體
Napster
即時通信
5. 進程通信
6. 分布式進程通信需要解決的問題
7. 問題1:對進程進行編址(addressing)
8. 問題2:傳輸層提供的服務
需穿過層間的信息(層間接口)
層面信息代表(Socket)
9. TCP 套接字(Socket)詳解
10. TCP socket
11. 問題2:傳輸層提供的服務-層間信息代碼
UDP Socket
12. UDP之上的套接字(Socket)
13. UDP socket
14. 套接字(Socket)
15. 問題 3:如何使用傳輸層提供的服務實現應用
16. 應用層協議
1. 網絡應用的體系結構
可能的應用架構:
- 客戶-服務器模式(C/S: Client/Server)
- 對等模式(P2P: Peer To Peer)
- 混合體:客戶-服務器和對等體系結構
2. 客戶-服務器(C/S)體系結構
服務器:
- 一直運行
- 固定的 IP 地址和周知的端口號(約定)
- 擴展性:服務器場
- 數據中心進行擴展
- 擴展性差
客戶端:
- 主動與服務器通信
- 與互聯網有間歇性的連接
- 可能是動態 IP 地址
- 不直接與其它客戶端通信
3. 對等體(P2P)體系結構
- (幾乎)沒有一直運行的服務器
- 任意端系統之間可以進行通信
- 每一個節點既是客戶端又是服務器
- 自擴展性:新 peer 節點帶來新的服務能力,也帶來新的服務請求
- 參與的主機間歇性連接且可以改變 IP 地址
- 難以管理
- 例子:Gnutella, 迅雷
4. C/S 和 P2P 體系結構的混合體
Napster
- 文件搜索:集中
- 主機在中心服務器上注冊其資源
- 主機向中心服務器查詢資源位置
- 文件傳輸:P2P
- 任意 Peer 節點之間傳輸文件
即時通信
- 在線檢測:集中
- 用戶上線時向中心服務器注冊 IP 地址
- 用戶聯系中心服務器查找在線好友位置
- 用戶間聊天:P2P
- 兩個用戶直接通信
5. 進程通信
進程:在主機上運行的應用程序
- 在同一個主機內:使用進程間通信機制通信(操作系統定義)
- 不同主機:通過交換報文(Message)來通信
- 使用 OS 提供的通信服務
- 按照應用協議交換報文
- 借助傳輸層提供的服務
客戶端進程:發起通信的進程
服務器進程:等待連接的進程
注意:P2P 架構的應用也有客戶端進程和服務器進程之分
6. 分布式進程通信需要解決的問題
- 進程標示和尋址問題(服務用戶)
- 傳輸層-應用層提供服務方式(服務)
- 位置:層間界面的 SAP(TCP/IP:socket)
- 形式:應用程序接口 API(TCP/IP:socket API)
- 如何使用傳輸層服務實現應用(用戶使用服務)
- 定義應用層協議:報文格式、解釋、時序等
- 編制程序,使用 OS API 調用網絡設施傳報文
7. 問題1:對進程進行編址(addressing)
- 進程接收報文必須標識 SAP(發送同理)
- 主機:唯一 32 位 IP 地址(但不足以唯一標識進程)
- 需額外標識:
- 傳輸層協議:TCP/UDP
- 端口號(Port Numbers)
- 知名端口號示例:
- HTTP: TCP 80
- Mail: TCP 25
- FTP: TCP 21(注:原圖標注為 TCP 2,實際應為 21)
- 進程唯一標識:
IP地址 + 端口號
(端節點) - 本質:主機間通信由?2 個端節點構成
8. 問題2:傳輸層提供的服務
需穿過層間的信息(層間接口)
- 要傳輸的報文(本層 SDU)
- 對方應用進程標識:
- 目標 IP + TCP/UDP 端口號
- 傳輸層實體(TCP/UDP)據此封裝:
- TCP 段/UDP 數據報(含源/目標端口號)
- 將 IP 地址交 IP 實體封裝數據報(源/目標 IP)
層面信息代表(Socket)
- Socket 作用:
- 避免每次攜帶完整 4 元組信息(繁瑣易錯)
- 用戶通過代號(socket)標識通信方
- 類似 OS 文件句柄:操作句柄=操作文件
- TCP Socket 特性:
- 需預先建立連接(會話關系穩定)
- 用整數本地標示通信關系
- 層間接口攜帶信息量最小
- 本質代表 4 元組:
(源IP, 源端口, 目標IP, 目標端口)
9. TCP 套接字(Socket)詳解
- 定義:面向連接服務(TCP)的本地意義標示
- 4 元組:
(源IP, 源端口, 目標IP, 目標端口)
- 核心特性:
- 唯一指定一個會話(兩進程間)
- 應用通過此標示與遠程程序通信
- 無需每次發送報文指定完整 4 元組
- 優勢:
- 類似 OS 文件句柄(替代目錄名/文件名)
- 簡單高效,便于管理
10. TCP socket
11. 問題2:傳輸層提供的服務-層間信息代碼
UDP Socket
- UDP服務特性:
- 無需預先建立連接
- 每個報文獨立傳輸
- 前后報文可能發送至不同分布式進程
- 本地標識:
- 僅需一個整數表示本應用實體
- 原因:報文可能傳輸至不同進程(無固定通信關系)
- 層間接口信息:
- 最小化信息量
- UDP Socket內容:本機IP + 本機端口
- 傳輸要求:
- 發送報文時必須提供目標IP及端口
- 接收報文時,傳輸層需上傳發送方的IP及端口
12. UDP之上的套接字(Socket)
- 無連接服務(UDP)的Socket定義:
- 本地意義的2元組標識:
(本機IP, 本機端口)
- 指定應用所在的端節點(end point)
- 本地意義的2元組標識:
- 發送數據時的優勢:
- 使用預創建的本地Socket(標識ID),避免每次發送都重復指明本機IP和端口
- 關鍵限制:
- 發送報文時必須顯式指定目標IP和UDP端口(另一端點)
13. UDP socket
14. 套接字(Socket)
- 進程向套接字發送報文或從套接字接收報文
- 套接字 <-> 門戶
- 發送進程將報文推出門戶,發送進程依賴于傳輸層設施在另外一側的門將報文交付給接受進程
- 接收進程從另外一端的門戶收到報文(依賴于傳輸層設施)
15. 問題 3:如何使用傳輸層提供的服務實現應用
- 定義應用層協議:報文格式,解釋,時序等
- 編制程序,通過 API 調用網絡基礎設施提供通信服務傳報文,解析報文,實現應用時序等
16. 應用層協議
- 定義了:運行在不同端系統上的應用進程如何相互交換報文
- 交換的報文類型:請求和應答報文
- 各種報文類型的語法:報文中的各個字段及其描述
- 字段的語義:即字段取值的含義
- 進程何時、如何發送報文及對報文進行響應的規則
- 應用協議僅僅是應用的一個組成部分
- Web 應用:HTTP 協議,web 客戶端,web 服務器,HTML
公開協議:
- 由 RFC 文檔定義
- 允許互操作
- 如 HTTP, SMTP
專用(私有)協議:
- 協議不公開
- 如:Skype