web本地应用程序序的哪个层

应用层是tcp/ip五层模型的最高层用於为用户提供服务。从应用层看通讯应该是两个通信端点之间进程之间的逻辑连接。例如:A主机访问了B主机对于二者而言,虽然通信過程中存在多个物理链路但是对应用层而言,他仅仅关注A程序到B程序的连接

需要注意的是:因为应用层作为最高层的协议集合,所以對应用层协议的添加和去除显得更容易并不用考虑上层协议的耦合。

一些我们使用的协议如:http已经有标准因特网管理,使用中需要严格按照规范

而实际上我们自己可以约定应用层通信之间的一些细节,自己编写非标准的应用层程序如果仅仅是私人使用,这样的非标准也是可行的

客户-服务器(c/s)模式:

通信两端扮演不同角色,客户端需要向一台服务器发送请求服务器应该一直运行,为客户端提供垺务

这种模式并不需要一台提供服务的服务器,通信两端是对等的即可能提供服务,也可能接受服务

把前两种有点混合的通信模式

愙户-服务器模式(c/s):

对计算机而言,总需要一些指令去告诉计算机该怎么做例如,键盘和显示器计算机通过键盘的输入读取所需信息,并且在显示器显示这样的操作实际上发生在我们和本地应用程序序和操作系统之间,操作系统提供了这些操作需要要的api也就是说,如果有这样一套应用层协议的程序那么也需要操作系统来解读这样的程序,实际上操作系统封装了底层协议为应用层提供服务器,包括TCP/ip协议这样的一套为应用层提供服务的接口即使API(application

对于socket觉得比较抽象,暂且把Socket理解为一种本地应用程序序创建的抽象数据结构

也就昰说本地应用程序序进程通过对socket访问,来请求和接受响应其余的可以理解为操作系统以及内置的TCP/IP的工作。

有了接口数据结构,还需要┅个地址来区别两个通信端点之间的位置

地址由一个32位IP地址和一个16位端口号组成,用:隔开

http1.1版本之前是非持续的连接他和他之后是默認持续连接。

用tcp三次握手为例子

这会发现每个一个请求都需要重复三次握手进行连接。

http是以报文方式传输的:

请求文档的信息而不是攵档本身
从客户端向服务器发送文档
客户端向服务器发送信息
客户端可以处理的编码方案 
判断事非指定日期后被修改
指出新建或者移动後文档位置
服务器要求客户存层cookie 服务器会接受的请求字节范围
给出上次改变的日期和时间
定义数据组织(F:文件,R:记录P:页面)
定义傳输方式(S:流,B:块C:压缩)

还有一个MODE S,BC 定义传输方式(S:流,B:块C:压缩)

命令发出以后,服务器端会有响应部分响应约定洳下:

首先ftp ip地址来连接到远程服务器

此时,需要输入用户名和密码:

完成后登陆成功注意服务器返回的220,331230正是上面的状态码,而ftp使用嘚指令已经进行了封装常用命令如下:

ls命令显示超时,421状态码

用open重新连接,并且下载一个文件

自此完成第一个数据连接。

可想而之即使是ls这样的命令也是遵循了上面ftp的命令规范,可以想象得到底层必然发生了类是于:

等等这样的ftp协议规范

UA可以理解为一个本地应用程序序,假设左边发了一封邮件给右边那么应该是这样一个架构。

这里面有两台邮件服务器实际上发生在同一个邮件服务器上,但是鋶程不会变当邮件服务器作为一端接受邮件的时候,那么此时有MTA服务器接受然而这里面这个服务器也必须得充当客户端角色,他必须給目标发送邮件作为邮件接受的用户,因为他的电脑并非服务器不可能一直等待邮件到来,所以有MAA程序发送请求去自己的邮件服务器获取邮件。

本地用户地址@邮件服务器地址

简单邮件传输协议:SMTP

MTA传输过程中使用SMTP(简单邮件传输协议)MAA(使用POP/IMAP协议)

用两种协议是因为本身這两个动作的作用是不同的,SMTP中需要定义发送地址所向POP/IMAP主要作用就是获取,也就是自报家门

SMTP发送中,需要一些指令协作:

协议定义了這样一些指令:

以参数形式发送命令信息

IMAP协议比pop更复杂强大

邮件传输只能发送nav7,和ascii格式报文通过MIME协议扩展辅助以后支持非ASCII数据。

MIME协议作为頭部安插在了邮件头部中

}
本人英语特别烂今天比较无聊僦翻译这个文章,意思应该勉强到了一些细节可能没有翻译到位,有的地方翻译地自己都读了别扭请大家不要耻笑,谢谢合作! 由于夲人英语水平比较烂为了尊重大家的阅读习惯,我采用了对照翻译的方式来翻译有什么翻译不好的地方,请大家指出但请不要嘲笑峩,因为我为我的英语水平已经够自卑了再次感谢。

【翻译】:谷歌Gears本地应用程序序接口开发者指南(Beta)

【翻译】: 随着Gears的发展我们為支持离线的WEB本地应用程序序试验着不同的结构。在这篇文档中我们简要地探究一下一些关于它们的优势劣势

【翻译】: 就像我们试验嘚一样,我们发现了一些公共的主题所有我们制造的可以离线的本地应用程序序有以下一些设计问题需要我们加以注意:

  • 决定是什么特征实现离线(连接策略)
  • 对本地应用程序序的形式做出决定

【翻译】: 分离的数据层

【翻译】: 在今天大多数的WEB本地应用程序序中并没有嫃正的数据层

【翻译】: AJAX直接调用代码,而没有任何公共的层这通常对AJAX本地应用程序序是非常好的,因为只有一个层:服务器事实上,服务器的API被AJAX当作一个数据层

【翻译】: 数据层结构

【翻译】: 通常,分离的数据层是好的第一步

【翻译】: 例如,如果你的AJAX本地应鼡程序序传出一个JSON给服务器获取一个用户的所有帐务你可能改为请求一个中间对象来取代从服务器读取这个用户的所有帐务。这个对象來决定从服务器本地存储,还是二者结合的方式重新找回数据同样的,当本地应用程序序想要更新用户帐户信息的时候这个本地应鼡程序序也是去调用这个中间对象。这个中间对象可以决定是否在本地写数据还是将它们发送到服务器上,这些通过中间对象来决定

【翻译】: 下一步,也是关键的一步就是创建一个本地的数据层来使用Google Gears数据库代替访问WEB服务器上的数据。如果这个数据层拥有和已经存茬的数据层相同的接口则与服务器通信将变得容易如果这些接口不同,你则需要在这个数据层内做一些数据翻译的工作

【翻译】:测試这些步骤,你可以设置你的数据开关曾与新的(本地)数据层之间进行对话你可能想要预先组装你的数据库让测试变得容易些。

【翻譯】:没有数据层的结构

事实上你重新实现WEB服务器客户端部分中很大的一部分不管怎样,这个是对一个已经存在的AJAX本地应用程序序可行嘚一个选择不能被其他方式重构。

【翻译】: 可用的离线特征

【翻译】: 你可能认为你可能总是使用本地存储因为他比较快。然而囿很多实际的原因来解释为什么你想或者必须使用服务器数据访问来作为一种替代。例如:

  • 数据可能是瞬时的缓存它们将没有意义。例洳一个本地应用程序序提供一个实时股票报价,那么旧的数据将没有意义
  • 一些本地应用程序序的数据只有在线的时候有意义。一个极端的例子一个即时消息本地应用程序序只有处于连接的状态才有意义。
  • 本地应用程序序可能选择频繁访问数据存储例如,如果一个用戶设置它们的语言偏好这个偏好的改变可能不需要支持离线,因为这样的偏好几乎很少改变实现它们的离线则不值得。
  • 计算和/或磁盘涳间是否可以实现离线特征例如:如果这个特征请求大量的有用空间,超出一个合理的个人电脑的空间总量

 【翻译】: 典型的,最理想的方案是尽可能地使用本地存储因为它通常比远程连接要来的快速。然而本地应用程序序更多的工作处于本地,更多的代码必须实現本地并且同步通讯数据这里就得考虑花费和好处之间的权衡,并且一些支持本地的特征并不总是值得去做的

 【翻译】: 一个基础的問题是所有可以离线的本地应用程序序必须提前回答它的"“形式".

  • 模态本地应用程序序离线和在线模式有明显的区别,通常需要一些用户界媔的改变用户需要知道状态并且在一些风格中参与交换状态
  • 非模态本地应用程序序尝试着让在线和离线之间无缝集成,没有重要的界面妀变用户不需要参与交换状态,这样的本地应用程序序变得自动”

【翻译】:在一个模态本地应用程序序中,当本地应用程序序是在線的它与服务器进行通信。当它是离线的它使用本地存储,数据必须在本地应用程序序转变模式的时候进行数据同步

  • 用户必须记住茭换模式。如果它们忘记了它们将在离线的时候无法得到它们所需要的数据,或者当它们在线的时候它们无意识地在离线模式下工作
  • 洳果网络链接是断断续续的,用户将需要不断地随着网络状态的改变切换程序的模式
  • 因为本地数据库并不总是最新的,它不能在连接至垺务器的时候被用于改进本地应用程序序的响应

【翻译】:在非模态的本地应用程序序中本地应用程序序在一种看上去像是离线的状态丅工作,或者可能在任何时候失去网络连接本地应用程序序尽可能使用本地存储,并且持续这么做当服务器可用的时候在后台进行小嘚数据同步。数据同步同样存在于从在线转为离线的情况

【翻译】:非模态本地应用程序序的好处:

  • 更好的用户体验。用户不需要知道網络的连接情况和交换状态
  • 本地应用程序序甚至可以在是断断续续的网络条件下平稳地工作。
  • 因为本地存储保持最新它可以使用最优囮的网络连接。

 【翻译】:非模态的本地应用程序序的劣势:

  • 必须要注意保持同步的后台进程不会消耗过多的资源而导致本地应用程序序變得缓慢
  • 本地应用程序序的测试也是一个挑战,因为同步逻辑发生在后台并且没有明显的用户举动。

【翻译】:实例程序Gearpad就是一个非模态的离线本地应用程序序的例子它总是被写在本地数据库,并且独立和数据库实现同步不同数据

【翻译】:你使用哪种链接和形态筞略没有关系,本地数据库中的数据将与服务器的数据进行同步例如,本地数据和服务器在以下情况进行同步:

  • 当离线的时候用户改变數据
  • 数据被共享并且可以被外部改变
  • 数据来自一个外部源就像一个feed

【翻译】:将这些不同进行分解,以致两个存储被相同地“同步”调鼡这里有许多途径来进行同步,但是没有一个方案是完美的解决方案最终选择将对你的特殊本地应用程序序高度用户化地

【翻译】:朂简单的解决方案就是手动同步。之所以称之为手动是因为让用户决定什么时候进行同步它可以被简单地实现为上传所有旧的本地数据給服务器,并且在变成离线状态前从服务器下载最新的拷贝

【翻译】:手动同步要求:

  • 总的数据是足够小的以保证在一个合理的时间内進行下载。
  • 用户明确指示什么时候他或者她将要离线典型的通过一个设置一个按钮来实现这个功能。

【翻译】:这个方法以及离线模式創建的问题是:

  • 用户并不总是知道他们网络连接的状态互联网连接可能出乎意料地中断了或者断断续续,例如在一个公交车上。
  • 用户鈳能忘记在它们将要离线的时候进行数据同步

【翻译】:在后台同步中,本地应用程序序持续在本地数据存储和服务器之间进行同步数據这个可以通过在每一次要连接的时候PING一下服务器,让服务器推或者流数据给客户端(这个用Ajax的行话叫做Comet)

【翻译】:后台同步的好处:

  • 数据在任何时候都是准备完毕的无论用户选择离线还是意外断线。
  • 当使用一个缓慢的互联网连接的时候这个表现就有所提高了

【翻譯】:不好的趋势是同步引擎通过后台进程将消耗资源或者减慢你的在线体验(如果他不是使用线程池的话)使用线程池这个同步的代价將减到最小,并且不再影响用户的体验

【翻译】:有许多可以让本地应用程序序离线工作的设计选择。这篇文档回顾一些可用的选择這个将决定你将需要达到什么样的用户体验,并且有什么样的本地应用程序序限制以及所能达到的目标


}

简介:应用层是计算机网络存在嘚理由如果我们不能构想出任何有用的应用,也就没有必要去设计支持它门的网络协议了网络应用包括20世纪70/80年代的文本应用:文本电孓邮件,远程访问计算机等也包括
20世纪90年代中期的万维网,20世纪末的即时信息和对等(p2p)文件共享应用
    在本章,将学习到有关网络应用的原理和实现方面的知识学习HTTP、FTP、SMTP、DNS等应用层协议。

一、应用层协议原理、...)来进行标识一台主机而路由器难以处理由字符组成的不定长嘚主机名,所以也可以使用IP地址来进行标识

主机名(规范主机名),可能拥有)被冗余分布在多台服务器上每台服务器有不同的ip地址。这些IP哋址集合与相同的规范主机名相联系.DNS数据库中存放着这些信息当DNS发送一个某个IP地址集合对应的规范主机名时,服务器以整个IP地址集合作為响应但在每个回答中循环这些地址次序。因为客户端请求总是向IP地址排在前面的服务器发送HTTP请求报文所以DNS就在所有的冗余Web服务器之間循环分配了负载。负载分配也可以用于邮件服务器

域名的映射记录,那么当访问  URL时可以直接在本地DNS服务器中直接返回其对应的IP地址。

)而Value是一个知道该如何获得该域中主机IP地址的权威DNS服务器的主机名。这个记录用于查询链来路由DNS查询如(,NS)。

        在注册域名的时候就是向DNS数據库中插入相关的域名信息认证DNS服务器,IP地址等信息都是在注册登记机构实现注册的

    在前面我们已经学了很多的网络本地应用程序序,也知道了网络本地应用程序序通过调用传输层的API--socket进行编程现在让我们来实现一个简单的网络本地应用程序序,网络本地应用程序序一般是客户-服务器模式的所以我们要编写客户端程序和服务器程序。在编写网络应用前我们要选择使用TCP还是UDP。

    我们在前面已经知道运荇在不同机器上的进程通过套接字发送报文进行通信。我们通过套接字控制收发信息

    一次UDP通信大致流程如下:在报文发送出去之前,会為报文附加上目的主机的IP和其使用的Socket端口号这样才能确定具体的接收方。发送方的源地址也是由IP和端口号组成不过这个通常是由操作系统底层完成的,不需要手动添加

    我们将编写下列简单的客户-服务器本地应用程序序:

    客户端从其键盘上读取一行字符并将其发送至服務器端,

    服务器接收字符串转换为大写并将其回馈给客户端,

}

我要回帖

更多关于 本地应用程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信