应用程序体系结构

应用程序体系结构是应用程序研发者设计的,规定了如何在各种端系统上组织该应用程序。

目前主流的有两种:CS结构(客户——服务器体系结构)、P2P结构(对等体系结构)

C/S结构

C/S结构可以认为是主从结构,有一个核心。C/S结构中,有一台首先启动,永不停歇的主机成为服务器,服务其他客户的请求。

在C/S结构中,客户与客户之间是不直接通信的。任何通信都需要经过服务器。

优点

  • 接口和操作可以非常丰富
  • 具有较强的事务处理能力。(资源都放一块了,必须快啊)
  • 安全性能可以很容易保证,实现多层认证也不难。(统一管理,还是比较安全的)

缺点

  • 严重依赖服务器,一旦服务器发生宕机,整个体系直接崩溃。
  • C/S结构的效率会随着访问量到达一个阈值后发生断崖式下跌
  • 拓展性低。当访问量增大时,服务器需要扩展,当扩展点一定程序的时候,会十分困难。

P2P结构

P2P结构中,对位于数据中心的专用服务器有最小的 (或者没有)依赖

它是主机之间直接通信,每个主机都承担一定的服务器的功能。

这些主机都被称为对等体(我感觉对等体这个名字的意思大概是为了展现与CS结构的主从结构不同)。

看过《第一序列》的应该能感觉到,P2P结构很像人工智能零最后的形态。

优点

  • 自拓展性(每增加一台主机,虽然多了一点负担,但是相应的增了一点服务能力)

缺点

  • 高度非集中式结构
  • 安全性不好(我感觉有一种可能就是,假如我电脑安全防护不到位,有人可以通过我的电脑进去P2P的系统,然后攻击一大片)
  • 性能不好(本来在服务器处理的东西,P2P需要发送到不同的地方处理)
  • 可靠性也有待解决(主要还是分散了,会不会丢失)

进程通信

客户与服务器

网络应用程序由成对的进程组成,这些进程通过网络相互发送报文。

对于这两个进程,一个被称为服务器,一个被称为客户。对于C/S结构不必多说。对于P2P结构来说,发送请求的被称为客户,响应请求的被称为服务器。(此时客户与服务器是相对而言的概念。再不同的会话中,同一台主机可能同时是客户和服务器)

进程与计算机网络之间的接口

多数应用程序是由通信进程对组成,每对中的两个进程互相发送报文。进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。

对于应用层与运输层之间的,又被称为应用程序编程接口简称API)。

应用程序开发者对运输层控制权限仅限于:

1. 采用什么运输层协议
            2. 设定几个参数

寻址

为了通信的进行,发送分组,目前明确两个信息:

  1. 目标主机地址(ip地址)
  2. 接受进程在目标主机的标识 (端口号)

因为每次通信都需要传输本地ip,本进程端口号,目标ip,目标进程端口号,所以后来有人干脆封装成了socket使用了。(下边运输层的协议选择还会叙述)

应用程序服务要求

  1. 可靠数据传输
    主要有四个要求:
  • 不丢失
  • 不重复
  • 不失序
  • 不出错

上传下载文件,上传个全家福,传上去就剩一个人了肯定不行。

  1. 吞吐量
    打电话,因为我这边接受速度太慢,对方说一句话,我只能听见不到半句,啥用没有。
  2. 时延
    打游戏最膈应的就是这个。
  3. 安全性

因特网提供的运输服务

总共就两个TCP,UDP。

TCP

TCP服务模型包括面向连接服务和可靠数据传输服务。

  • 面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交 换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组的到来做好准备。
  • 可靠的数据传送服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发 送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的 字节流交付给接收方的套接字,而没有字节的丢失和冗余

TCP还有一个拥塞控制机制与流量控制机制,当目标进程接受速率慢或者传说过程中出现拥塞,TCP协议会抑制发送过程

对于TCP在握手时,就形成了TCP socket,TCP socket中,包括了自己的ip、端口,对方ip、端口。所以此处的接口只用给运输层socket与报文就可以。

UDP

UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。

对与UDP socket,只有自己的ip、端口,没有对方的。对于此时的接口,需要给运输层传入socket、目标ip与端口、报文。

TCP与UDP一点类比

  • TCP想当于你去别人家送东西,去之前打个电话通知一声,然后慢慢的将东西送过去。保证东西送到别人手里。
  • UDP就比较鲁莽了,不打招呼带着东西就去了,如果别人暂时没办法接受,或者接受较慢,直接就把东西扔了。

应用层协议

应用层协议定义了运行在不同 端系统上的应用程序进程如何相互传递报文。

特别是:

  • 交换的报文类型,例如请求报文和响应报文。
  • 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
  • 字段的语义,即这些字段中的信息的含义。
  • 确定一个进程何时以及如何发送报文,对报文进行响应的规则。

主要就是一些规范,目的也是为了做到通信的方便。

辨析网络应用与应用层协议

应用层协议只是网络应用的一部分。

比如:Web是一种客户-服务器应用,它允许客户按照需求从Web服务器获得文档。该Web应用有很多组成部分, 包括文档格式的标准(即HTML)Web浏览器Web服务器(如Apache、Microsoft服务器程序),以及一个应用层协议

相当于网络应用就是一个城市里的交通,包括了运输工具、道路等,而应用层协议相当于交通法规,有它交通会比较流程且减少交通事故,但是它也仅仅是交通的一部分。




以上均是我自学的一些笔记和心得,如有错误,还望批评指正。