一、网络应用程序体系结构
1.客户-服务器体系结构(client-server architecture)
1.有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。 2.客户相互之间不直接通信;例如,在Web应用中两个浏览器并不直接通信。 3.客户-服务器体系结构的另一个特征是该服务器具有固定的、周知的地址,该地址称为IP地址 4.具有客户-服务器体系结构的非常著名的应用程序包括Web、FTP、Telnet和电子邮件。
2.P2P 体系结构(P2P architecture)
1.许多目前流行的、流量密集型应用都是P2P 体系结构的。这些应用包括文件共享(例如BitTorrent) x对等方协助下载加速器(例如迅雷)、因特网电话和视频会议(例如Skype)。 2.P2P体系结构的最引人入胜的特性之一是它们的自扩展性(self-scalability) 例如, 在一个P2P文件共享应用中,尽管每个对等方都由于请求文件产生工作负载,但每个对等 方通过向其他对等方分发文件也为系统增加服务能力。
二、进程通信
1.客户和服务进程
1.用操作系统的术语来说,进行通信的实际上是==进程(process)==而不是程序
2.我们通常将这两个进程之一标识为客户(client),而另一个进程标识为服务器(serve) 对于Web而言,浏览器是一个客户进程,Web服务器是一台服务器进程。对于P2P文件 共享,下载文件的对等方标识为客户,上载文件的对等方标识为服务器。
2.进程与计算机网络之间的接口
1.进程通过一个称为==套接字(socket)==的软件接口向网络发送报文和从网络接收报文
2.套接字是同一台主机内应用层与运输层之间的接口。 由于该套接字是建立网络应用程序的可编程接口,因此套接字也 称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API)
3.进程寻址
1.为了标识该接收进程,需要定义两种信息:①主机的地址;②在目的主机中指定接收进程的标识符。 2.主机由其IP地址(IP address)标识。 3.发送进程还必须指定运行在接收主机上的接收进程(更具体地说,接收套接字) 目的地端口号(port number)用于这个目的
三、可供应用程序使用的运输服务
当开发一个应用时,必须选 择一种可用的运输层协议。如何做出这种选择呢?最可能的方式是,通过研究这些可用的 运输层协议所提供的服务,选择一个最能为你的应用需求提供恰当服务的协议。
当开发一个应用时,必须选 择一种可用的运输层协议。如何做出这种选择呢?最可能的方式是,通过研究这些可用的 运输层协议所提供的服务,选择一个最能为你的应用需求提供恰当服务的协议。
1.可靠数据传输
以确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端。 如果一个协议提供了这样的确保数据交付服务,就认为提供了可靠数据传输(reliable血ta transfer) 。
2.吞吐量
具有吞吐量要求的应用程序 被称为带宽敏感的应用(bandwidth-sensitive application) o许多当前的多媒体应用是带宽敏感的,尽管某些多媒体应用程序可能采用自适应编码技术对数字语音或视频以与当前可用带宽相匹配的速率进行编码。
3. 定时
在多方游戏和虚拟互动环境中,在做出动作并看到来自环境(如来自位于 端到端连接中另一端点的玩家)的响应之间,较长的时延使得它失去真实感。对于非实时 的应用,较低的时延总比较高的时延好,但对端到端的时延没有严格的约束。
4. 安全性
运输协议能够加密由发送进程传输的所有数据,这种服务将在发送和接收进程之间提供机密性,以防该数据以某种方式在这两个进程之间被观察到
四、因特网提供的运输服务
1.TCP服务
?面向连接的服务: 在应用层数据报文开始流动之前,TCP让客户和服务器互相交 换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组 的到来做好准备。在握手阶段后,一个TCP连接(TCP connection)就在两个进 程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接 上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接。
?可靠的数据传送服务: 通信进程能够依靠TCP,无差错、按适当顺序交付所有发 送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的 字节流交付给接收方的套接字,而没有字节的丢失和冗余。
?TCP安全 TCP还是UDP都没有提供任何加密机制 所以因特网界已经研制了 TCP的加强版本,称为安全套接字层(SSL)
2. UDP服务
1.UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供一种不可靠数据传送服务
2.UDP没有包括拥塞控制机制,所以UDP的发送端可以用它选定的任何速率向其下层 (网络层)注入数据。
|