应用层协议原理
网络应用的体系结构
客户-服务器体系结构
服务器
- 7*24小时提供服务
- 永久性访问地址/域名
- 利用大量服务器实现可扩展性
客户机
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址
- 不会与其他客户机直接通信
P2P点对点体系结构
- 没有永远在线的服务器
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 优点:高度可伸缩
- 缺点:难于管理
混合结构
例子:
进程通信
客户与服务器进程
同一主机上运行的进程之间如何通信?通过进程间通信机制,由操作系统提供。
不同主机上运行的进程间如何通信?通过消息交换。
客户机进程: 发起通信的进程
服务器进程: 等待通信请求的进程
进程与网络的接口
进程间通信利用socket套接字发送/接收消息实现。
过程类似于寄信:进程可类比于一座房子,而它的套接字可以类比于它的门。
- 发送方将消息送到门外邮箱
- 发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的 门外
- 接收方从门外获取消息
应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的运输层端几乎没有控制权。应用程序开发者对于运输层的控制仅限于:
- 传输协议的选择
- 参数的设置
进程寻址
如果在不同主机上的进程间通信,那么每个进程必须拥有标识符。
在因特网中,主机由其IP地址标识。除了知道报文送往目的地的主机地址外,发送进程还必须指定运行在接收主机上的接收进程(更具体地说,接收套接字)。
因为一般而言一台主机能够运行许多网络应用,一个主机可以同时有很多进程需要通信。所以还要为主机上每个需要通信的进程分配一个端口号
常见端口号:HTTP Server: 80、Mail Server:25。
所以进程的标识符就是:IP地址+端口号。
传输服务
套接字是应用程序进程和运输层协议之间的接口。在发送端的应用程序将报文推进该套接字。在该套接字的另一侧,运输层协议负责使该报文进入接收进程的套接字。
网络应用对传输服务的需求:
-
数据丢失(data loss)/可靠性(reliability)
某些网络应用能够容忍一定的数据丢失:网络电话