学习目标:
客户端/服务器模式
peer to peer 模式(对等模式)
前言
在第一章的内容中,我们学习了计算机网络的大体轮廓,因为在计算机网络中,我们需要记住非常多的专有名词,所以在第一章中,我们需要进行非常多的记忆。第一章还是非常重要的。
一、一些网络应用的例子
比如,我们所使用的E-mail,Web服务器,文本信息,远程登陆,P2P文件共享(基于P2P模式下),即时通信,多用户网络游戏,流媒体的应用(YouTobe,Hulu,Netfix),Internet电话,实时电视通信,社交网络,搜索功能等一些例子。
二、如何部署网络应用
2.1 编程
- 在不同的端系统中应用;
- 通过网络基础设施进行服务,应用进程之间彼此通信;
- 比如说是:Web,我们需要进行客户端与服务器之间的通信,Web软件与服务器软件进行通信。
2.2 网络核心中没有应用层软件
- 网络核心中没有应用层功能
- 网络应用只在端系统中存在,快速网络开发和应用。
三、网络应用模型
3.1 客户端/服务器模式
在客户端/服务器模式下,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求。
3.1.1 客户端/服务器模式的功能流程:
- 服务器处于接受请求的状态;
- 客户端发出服务请求,并等待处理结果;
- 服务器在收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机。
3.1.2 客户端与服务器的地位对等吗
答案是不对等的,因为在进行对话中,客户端程序必须知道服务器程序的地址,客户机上一般不需要特殊的硬件和复杂的操作系统。而在服务器中运行的软件则是专门进行提供某种服务的程序,可同时处理多个进程或本地客户的要求,被动地等待并接收各地客户的请求。因此,服务器程序不需要知道客户程序的地址。
3.1.3 客户/服务器模型的主要特点
- 网络中各个计算机的地位是不平等的,整个网络的管理系统由少数服务器担当,因此网络中的管理非常集中和方便;
- 客户机相互之间不能直接通信;
- 可扩展性不高。
- 固定的IP地址(也可能是不固定的)和众所周知的端口号(约定)
3.2 P2P模式
3.2.1 为什么会有P2P模式?
不难看出,在C/S模式中,服务器的性能好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。P2P模式的思想是整个网络中的传输内容不再被保存在中心服务器上,每一个节点都同时具有下载、上传的功能,其权利和义务都是大体对等的。
3.2.2 P2P模式的优点
- 减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个节点上,大大提高了系统效率和资源利用率。
- 多个客户机之间可以直接共享文档。
- 可扩展性好,传统服务器有响应和带宽的限制,因此只接受一定数量的请求。
- 网络健壮性强,单个节点失效不会影响其他部分的节点。
3.2.3 P2P模型的缺点
在获取服务的同时,还要给其他节点提供服务,因此会占用较多的内存,影响整机的速度。
3.3 易错知识点
在未建立前,服务器在某一个端口上监听。客户端是连接的请求方,客户端必须事先知道服务器的地址才能发出连接请求,而服务器则从客户端发来的数据包中获取客户端的地址。一旦连接建立,服务器就能响应客户端请求的内容,服务器也能主动发送数据给客户端,用于消息的通知,比如一些错误的消息。
客户机的作用是根据用户需求向服务器发出服务请求,并将服务器返回的结果呈现给客户,因此客户机是面向用户的,服务器是面向任务的。
3.4 C/S和P2P体系结构的混合体
我们来举一些例子:
即时通信
在线检测:集中C/S模式
- 当用户上线时,向中心服务器注册其IP地址,用户与中心服务器联系,以找到其在线好友的位置。
两个用户之间聊天:P2P模式
Napster
文件搜索:集中
- 主机在中心服务器上注册其资源
- 主机向中心服务器查询资源位置
文件传输:P2P
- 任意peer结点之间
3.5 进程通信
进程:在主机上运行的应用程序
客户端进程:发起通信的进程
服务器进程:等待连接的进程
进程中通信可以分为两种:在同一主机内通信;在不同主机内通信
- 在同一主机内,使用进程间通信机制通信(操作系统定义)
- 不同主机,通过交换报文来通信:使用OS提供的通信服务;按照应用协议交换报文,借助传输层提供的服务。
注意:不管是C/S模式,还是P2P模式,其架构的应用都有客户端进程和服务器进程之分。
3.6 分布式进程通信应该解决的问题
3.6.1 进程标识和寻址问题
进程为了接收报文,必须要有一个标识,即:SAP(发送也需要标识)
- 主机:唯一的32位IP地址,但是仅有一个IP地址无法唯一地标识一个进程,在一台端系统上有很多应用进程在进行。
- 所采用的传输层协议:TCP 和 UDP
- 端口号
一些知名的端口号有:HTTP:tcp80,FTP:tcp21,SMTP:tcp25,POP:tcp110
之前说,一个进程无法只通过一个IP地址进行标识,所以要通过IP+port(端口)来进行标识。
本质上,一对主机之间的通信要有两个端结点构成。
3.6.2 传输层提供的服务-需要穿过层间的信息
层间接口需要携带的信息:
- 要传输的报文(对于本层来说:SDU)
- 谁传的:对方的应用进程的标示:IP+TCP(UDP) 端口
- 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号
传输层实体根据这些信息进行数据报的封装,但是在封装过程中,会不会觉得很麻烦呢?是的,比较麻烦。
3.6.3 如何使用传输层提供的服务实现应用
- 定义应用层协议:报文格式,解释,时序等;
- 编写程序,通过API调用网络应用设施提供通信服务传报文,解析报文,实现应用时序等。
3.7 Socket
为了解决上述的问题,并且每一次传输,都携带如此多的信息,太繁琐易错,不便于管理,所以我们可以采用一个编号来表示通信的双方或者单方。
3.7.1 TCP的Socket
TCP的Socket是一个四元组,包括:源IP,源port,目标IP,目标port
3.7.2 UDP的Socket
UDP的Socket是一个二元组,包括:本IP,本port