目录
[1. 网络应用的体系结构](#1. 网络应用的体系结构)
[2. 客户-服务器(C/S)体系结构](#2. 客户-服务器(C/S)体系结构)
[3. 对等体(P2P)体系结构](#3. 对等体(P2P)体系结构)
[4. C/S 和 P2P 体系结构的混合体](#4. C/S 和 P2P 体系结构的混合体)
[5. 进程通信](#5. 进程通信)
[6. 分布式进程通信需要解决的问题](#6. 分布式进程通信需要解决的问题)
[7. 问题1:对进程进行编址(addressing)](#7. 问题1:对进程进行编址(addressing))
[8. 问题2:传输层提供的服务](#8. 问题2:传输层提供的服务)
[9. TCP 套接字(Socket)详解](#9. TCP 套接字(Socket)详解)
[10. TCP socket](#10. TCP socket)
[11. 问题2:传输层提供的服务-层间信息代码](#11. 问题2:传输层提供的服务-层间信息代码)
[UDP Socket](#UDP Socket)
[12. UDP之上的套接字(Socket)](#12. UDP之上的套接字(Socket))
[13. UDP socket](#13. UDP socket)
[14. 套接字(Socket)](#14. 套接字(Socket))
[15. 问题 3:如何使用传输层提供的服务实现应用](#15. 问题 3:如何使用传输层提供的服务实现应用)
[16. 应用层协议](#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