一些网络应用的例子:
E-mail Internaet电话
Web 电子支付
文本信息 搜索
P2P文件共享 流媒体
即时通讯 实时电视会议
.... ....
创建一个网络应用:
1.编程
2.在不同的端系统上运行。
网络应用的体系架构
可能的应用架构
1.客户-服务器模式(C/S:client/server)
2.对等模式(P2P:Peer To Peer)
2.混合体:客户-服务器模式+对等体系结构
C/S模式
服务器
1.一直在运行
2.固定的IP和周知的端口号
3.扩展性:服务器场
数据中心进行扩展
扩展性差
客户端
1.主动与服务器通讯
2.与互联网有间歇性连接
3.可能是动态的IP地址
4.不直接与其他客户端通信
注意:C/S模式随着用户数量的增加,性能断崖式下降!!!!(原因:以服务器为核心,服务器压力变大)
P2P模式
1.(几乎)没有一直运行的服务器
2.任意系统之间可以进行通信
3.每一个节点既是客户端,又是服务器
自扩展性-新peer节点带来新的服务能力,当然也带来新的服务需求
4.参与的主机间接性连接且可以改变IP地址
难以管理
混合体
进程通信
进程:在主机上运行的应用程序
1.在同一个主机内,使用进程间通信机制通信
2.不同主机,通过交换报文(Message)来通讯
使用OS提供的通信服务
按照应用同协议交换报文
借助传输层提供的服务
注意:P2P架构的应用也有客户端进程和服务器进程之分
客户端进程**:发起通讯的进程**
服务器进程**:等待连接的进程**
分布式进程的通讯需要解决的问题
1.进程的标示和寻址问题(服务用户)
2.传输层-应用层提供服务是如何(服务)
位置:层间界面的SAP(TCP/IP:socket)
形式:应用程序接口API(TCP/IP:socket API)
注:SDU(service data unit)服务数据单元。
3.如何使用传输层提供的服务,实现应用进程之间的报文交换,实现应用(用户使用服务)
定义应用层协议:报文格式,解释,时序等
编制程序,使用OS提供的API。调用网络基础设施提供通信服务传报文,实现应用时序等。
TCP之上的套字编程
对于使用面向连接服务(TCP)的应用而言,套接字是4元组的一个具有本地意义的标识。
4元组:(源IP,源port,目标IP,目标port)
唯一的指定了一个会话(2个进程之间的会话关系)
应用使用这个标示,与远程的应用进程通信
就像使用操作系统打开一个文件,OS返回一个文件句柄一样,以后使用这个文件句柄,而不是使用这个文件的目录名,文件名
简单,便于管理
UDP之上的套字编程
UDP服务,两个进程之间的通讯之前无需建立连接
每一个报文都是独立传输的
前后报文可能给不同的分布式进程
因此,只能用一个整数表示本应用实体的表示
因为这个报文可能传给另外一个分布式进程
穿过层间接口的信息大小最小
UDP socket:本IP,本端口
但是传输报文时:必须呀提供对方IP,port
接收报文时:传输层需要上传对方的IP,port
对于使用无连接服务(UDP)的应用而言,套接字是二元组的一个具有本地意义的标示
2元组:IP,port(源端指定)
UDP套接字制定了应用所在的一个端节点(end point)
在发送数据报时,采用创建好的本地套接字(标示ID),就不必在发送每个报文中指明自己的ip和port
但是在发送报文时,必须要指定对方的ip和udp port(另外一个端节点)
Internet传输层提供的服务
TCP服务
可靠的通信服务
流量控制:发送放不会淹没接收方
拥塞控制:当网络出现拥塞时,能够抑制发送方
不能提供的服务:时间保证,最小吞吐量和安全
面向连接:要求客户端进程和服务器之间建立连接
UDP服务
不可靠数据传输
不提供的服务:可靠,流量控制,拥塞控制,时间,带宽保证,建立连接
UDP存在的理由
UDP通过增加端口号,实现进程到进程之间的连接