网络应用原理
网络应用架构
目前有两种主流的网络应用架构:
-
客户-服务器架构(Client-server)
- 服务器(server):
- 有一台总是在线的主机,上面运行着服务器程序(server)
- 服务器主机(server machine)具有永久的、众所周知的地址
- 客户(client)
- 用户终端上运行一个客户程序(client),需要时与服务器程序通信,请求服务
- 客户机(client machine)使用动态地址,通常不会总是在线
客户只与服务器通信,客户之间不通信
- 服务器(server):
-
对等架构(Peer-to-peer ,P2P)
- 没有总是在线的服务器主机
- 任意一对端系统(对等方)可以直接通信
- 对等方多为用户自己的计算机,使用动态地址
- 每个对等方既可请求服务,也可提供服务
- 典型的P2P应用:
- BT、迅雷
- Skype
- PPLive
两种架构的比较
客户-服务器架构 | P2P架构 |
---|---|
资源集中:资源(服务)只在某些固定的终端上提供 | 任何终端都可以提供资源(服务) |
资源发现简单 | 易于扩展、均衡网络流量 |
集中式计算带来的问题:服务端扩容压力、网络流量不均衡、响应延迟长 | 资源发现困难、社会问题(版权、安全性等) |
不同终端上的进程通信
不管采用哪种网络应用架构,都需要解决不同终端上应用程序之间的通信问题。按照操作系统的术语,在端系统上运行的程序称为进程。因此,不同终端上的网络应用程序通信,就是不同终端上的进程进行通信。
- 进程:主机上运行的程序
- 在分布式应用中,不同终端上的进程需要通信
- 进程通信的方法:
- 同一个主机内:进程间通信机制(OS提供)
- 在不同主机上:通过交换报文进行通信
- 一次确定的通信会话中,总能标示一方为客户进程,另一方为服务器进程
- 客户进程:主动发起请求的进程
- 服务器进程:接收请求的进程
进程与网络的接口:套接字(socket)
设想在应用程序和网络之间存在一扇门(套接字):
- 发送报文:发送进程将报文推到门外
- 门外的运输设施(因特网)将报文送到接收进程的门口
- 接收报文:接收进程打开门,艮即可收到报文
套接字是应用层和传输层的接口,也是应用程序和网络之间的API
进程编址
每个进程都需要一个标识,以便其它进程能够找到它。
在因特网中,主机是使用IP地址标识的,使用IP地址能够标识进程吗?
不能,因为一台主机上通常运行着许多进程。
端口号:用于区分同一个主机上的不同进程。
进程标识包括:
- 主机地址
- 与该进程关联的端口号
端口范围:端口号是一个16位的整数,范围是0-65535。
端口号的例子:HTTP server使用端口80,Mail server使用端口25
端口号与IP地址结合:在网络通信中,IP地址 + 端口号 共同组成了一个完整的标识符,这就是所谓的套接字(Socket)地址。例如,192.168.1.1:80
表示IP地址为192.168.1.1
的设备上,HTTP服务的端口号为80。
传输服务
在创建一个应用程序时,开发者需要选定一种传输服务
数据完整性 (Data Integrity)
- 要求:确保传输的数据在传输过程中不被损坏或篡改。
- 适用应用:许多应用需要完全可靠的数据传输,尤其是涉及重要文件或信息的传输,如文件传输、邮件传输等。
吞吐量 (Throughput)
- 要求:应用程序需要根据网络带宽的需求来选择适当的吞吐量。某些应用(如文件传输、视频流)可能需要较高的吞吐量。
- 适用应用:高吞吐量需求的应用包括文件传输、大规模数据传输等。
延迟 (Timing)
- 要求:一些应用对传输的延迟非常敏感,需要尽可能减少延迟,确保数据能迅速到达。
- 适用应用:延迟敏感的应用包括网络电话、实时视频会议、交互式网络游戏等。
安全性 (Security)
- 要求:某些应用对数据的加密性和完整性有很高的要求,防止数据在传输过程中被窃听或篡改。
- 适用应用:涉及敏感信息的应用,如银行交易、在线购物、电子邮件等,需要提供安全保障。
因特网能够提供的传输服务
因特网提供2种传输服务,分别用TCP和UDP协议实现
TCPservice:
- 面向连接:保证传输顺序
- 可靠传输:不出错
- 流量控制:发送进程不会“压垮”接收进程
- 拥塞控制:网络超载时抑制发送进程
不提供:及时性,最低带宽保证,安全性
UDP service:通过因特网接收和发送报文
不提供:顺序保证,可靠传输,流量控制,拥塞控制,及时性,最低带宽保证,安全性
应用层协议
应用层协议定义了不同应用进程之间交换的报文格式、字段及其语义,同时也规定了发送和接收报文时应遵循的规则。它是应用程序和网络之间的“语言”,通过这种协议,应用进程可以在不同计算机或设备间进行有效的通信。
应用层协议通常包括以下几个组成部分:
- 报文类型:规定了应用程序中不同类型的消息(请求、响应等)。
- 报文语法:定义了消息中各字段的格式和组织方式。例如,在HTTP协议中,报文由请求行、头部、体部分组成。
- 报文语义:每个字段或部分的具体含义。例如,HTTP的
User-Agent
字段表示客户端使用的浏览器或操作系统信息。 - 交换规则:定义了如何正确地交换报文,包括哪些报文可以顺序发送,哪些应该等待响应等。
协议分类
- 公共域协议:公共域协议通常是由标准组织(如IETF)定义,并且公开可用的协议。这些协议通常具有明确的报文格式和定义,且支持跨平台和跨应用程序的互操作性。
- 专用协议:除了公共域协议,某些应用程序或服务使用专用的协议,这些协议通常为特定应用或服务设计,并且可能不公开或为内部使用。专用协议通常用于公司或组织内部的特殊应用,
小结
为创建一个新的网络应用,需要:
- 选择一种网络应用架构:客户-服务器 or P2P
- 选择一种网络服务:TCP or UDP
- 确定一个端口号
- 定义应用层协议
- 编写客户程序和服务器程序(调用套接字接口)
网络应用和应用层协议:
- 应用层协议只是网络应用的一部分
- 网络应用还包括客户程序、服务器程序等