赞
踩
我们已经知道,Internet的体系结构是符合TCP/IP协议栈的,而“应用层”就在这个协议的最上层。
本讲内容包括:
常见网络应用包括:
问:网络应用与单机应用有哪些本质的不同?
答:网络应用有网络才能用。网络应用就是有一部分软件是跑在我们自己的计算机上(比如浏览器),而还有一部分软件及数据信息等是跑在互联网的某些硬件服务器上,这两部分软件会互相交互,才共同构成了网络应用。这就是网络应用和单机应用的不同之处。
问:既然网络应用是由不同的部分构成的,那么网络应用应该采用什么样的体系结构呢?
答:互联网经过这些年的发展,基本形成了三种体系结构:客户机/服务器结构、点对点结构、混合结构
服务器和客户机的差别:
服务器:
客户机:
P2P结构最典型的例子就是BT下载。
我们知道,网络应用是由不同的成分构成的,有的运行在我们的PC机上,有的运行在远端的服务器上,而两者显然需要正确的协作才能完成它的功能。这意味着我们PC机上运行的网络应用进程和服务器端运行的进程之间是需要进行通信的。
所以,网络应用的核心和基础就是两个不同的进程之间进行正确的通信,然后完成我们设计的预订功能。本节我们要学习的就是网络应用进程间的通信。
因为在P2P架构中,也需要进行消息交换,所以也会有发起通信的进程和等待通信的进程。
不同主机进程之间的通信依靠的是“套接字”的机制
我们已经知道,网络应用之间打交道依靠消息传输(消息交换),那么我这个消息发出去之后,底层的传输基础设施怎么就能正确无误地将消息送到目的地呢?这里就有一个“进程标识”的问题,我们称之为“寻址”。“寻址”是网络世界的一个非常普遍的问题。
“IP地址+端口号”的模式可以保证我们通过微信发出去的消息,会传送到对方的微信上,而不是其他应用上。其中IP地址可以保证消息被传送到正确的主机,而端口号可以保证消息被传送到正确的应用。
Internet提供两类传输服务:TCP、UDP(等讲到传输层的时候,会具体讲这两个服务)
HTTP协议概述:
Web应用所遵循的协议就是HTTP协议(超文本传输协议),这个协议采用的是客户/服务器架构。
HTTP应用层协议所使用的的传输层协议是TCP。
另外,HTTP协议是一个“无状态”的协议,通俗讲就是,服务器不维护任何有关客户端过去行为的信息。比如2分钟前我请求了新浪的首页,然后我现在又请求获得新浪的首页,那边的服务器不会因为2分钟前已经发给我并且没改过所以就不再给我了,服务器是不区分的,只要我请求,服务器就会给我发。
问:为什么要采用无状态的机制?
答:因为有状态的协议往往更加复杂。因为第一点,你要维护这个状态(记录这个历史信息);第二点更致命,一旦客户机或服务器失效(比如重启了),那必然会产生状态的不一致,解决这种不一致往往是非常复杂的事情,代价也很高。与其这样,我们还不如直接采用无状态的协议,这样反而更可靠。
我们已经知道,Web所遵循的应用层协议是HTTP,我们也知道HTTP底下依靠的是TCP。对于TCP的使用,是有2中不同的使用方法的(也称为2种不同的HTTP连接类型)
思考:这两种方式有什么不同呢?
我们现实生活中,有时候网速特别慢时,网页会先出来,然后图片才一个接一个地出来,甚至会有图片加载失败的情况,这就说明它使用的是非持久性连接。
Entity Body(请求体)中会有一些请求的信息,通常Post请求会用到,比如注册账号的时候你的个人信息就是写在Entity Body中的。
HTTP状态相应代码:
体验一下HTTP:
前面我们强调过,HTTP是一个“无状态”的协议,服务器不记录客户端的历史行为。那么这个时候可能就会带来一些问题。这时我们就用到了Cookie技术。
因为虽然HTTP协议是无状态的,但是很多应用需要服务器掌握客户端的历史状态,比如网上购物的购物车。所以我们要引入Cookie技术。
如果在有代理服务器的情况下,浏览网页就不会真正的访问服务器了,直接访问代理服务器就可以了。
Web缓存/代理服务器确实挺好,但是,我们好像遗漏了一个重要的问题:如果客户访问的东西在代理服务器中存在,那么代理服务器直接返回给客户,那么我们怎么保证代理服务器中存在的就是最新版本呢?即:我们怎么保证代理服务器中的版本和远端服务器中的版本一致呢?这就用到了HTTP中的“条件性GET方法”
(3)条件性GET方法
条件性GET方法的基本思想就是,如果我代理服务器缓存的对象版本是最新的,那它向远端服务器进行条件性GET的时候,就不用再发对象了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。