应用层协议原理
应用架构 - application architecture
现代网络应用程序有两种主流的架构:
- 客户端-服务端架构(Client-Server Architecture),例如浏览器-Web服务器
- 对等架构(P2P),例如文件共享,对等方协助下载加速器(迅雷等),视频会议(Skype等)
客户端-服务端架构的特征
- 有一个(一堆)总是开启的主机,称为服务器,用于接收来自其他主机(客户端)的请求
- 这些服务器有着规定的IP地址
对等架构的特征
- 自扩展性,例如P2P文件共享应用中,每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件也为系统增加服务能力
进程通信
通信的是进程不是程序,一个程序被运行起来了,就是进程,如果多个进程运行在一个端系统(如一台PC)
,则它们使用进程间通信机制来进行通信,但如果是跨多个端系统之间的进程间通信,则需要依靠网络
在不同端系统中的进程间通过计算机网络交换报文来相互通信,发送进程生成并向网络中发送报文,接收进程接收这些报文并可能回送报文进行响应
客户进程和服务器进程
网络应用程序由成对的进程组成,这些进程通过网络互相收发报文
在CS架构的应用程序中,C即客户端进程,S即服务端进程,比如对于Web应用程序来说,C为浏览器,S为Web服务器;在P2P架构的应用程序中,每一个进程都可以是客户端,都可以是服务端
客户端:发起通信的一方
服务端:等待被通信的一方
进程如何向网络发送报文
进程通过名为socket
的软件接口向网络发送报文和从网络中接收报文,socket是主机中应用层与传输层之间的接口,socket是可编程的接口(API),开发者可以完全控制socket在应用层的行为,但无法控制socket在传输层的绝大部分行为,除了选择传输层协议
及设置一些传输层参数
外
进程将报文发送给谁
为了标识接收进程,需要定义两种信息
- 主机的地址
- 在目的主机中指定接收进程的标识符
对应的就是主机的IP地址以及socket所在端口
进程间通信时如何选择一个合适的传输协议
应用程序需要什么样的传输协议?主要是考虑协议的几个方面:
- 可靠传输协议:保证数据不会丢失的协议就是可靠传输协议
- 吞吐量:即发送进程能够向接收进程交付比特的速率,对于吞吐量有要求的应用程序被称为
带宽敏感应用
,能够根据当前可用带宽多少利用可供使用的吞吐量的应用程序被称为弹性应用
- 定时:保证发送方注入到socket中的每个比特到达接收方的socket的时间在一定范围内,即延迟时间
- 安全性:传输协议为应用程序提供一种或多种安全服务,例如对数据进行加密和解密
因特网提供的传输服务
- TCP
- UDP
TCP
- 面向连接
- 可靠数据传输
- 拥塞控制
UDP
- 无连接
- 不可靠的数据传输