- 应用层协议管理
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。看清楚:不同的端系统,说明一个问题,应用程序不需要去管理怎么传送数据的,只需要运行在端系统,按照一定的方式进行两者的通讯就可以。由于应用程序限制在端系统,因此促进了大量的网络应用程序的迅速研发和部署。
-
网络应用程序体系结构
应用程序的体系结构明显不同于网络的体系结构。网络的体系结构是固定的(应用层、运输层、网络层、链路层、物理层),为应用程序提供了特定的服务集合。应用程序的体系结构:客户-服务器(CS)体系结构和对等(P2P)体系结构。
-
客户-服务器体系结构:服务器是总是打开的,它服务于来自许多其他称为客户的主机的请求。特征:客户相互之间不能通信;服务器的IP地址是固定的已知的。坏处:需要配备大量主机的数据中心,还需要支付互联和带宽的费用。
- P2P体系结构:对等方向对等方进行传送数据,对于专用服务器依赖小。特征:客户之间相互通信传送数据;自扩展性(每个对等方通过向其他对等方分发文件为系统增加服务能力,这意思就是在你使用P2P的体系结构软件后,相当于你也是一个主机,可以进行共享文件)坏处:面临安全性、性能和可靠性等挑战。
- 进程通信
进行通信的实际是进程,运行在同一个端系统上的进程可以通过进程间通信机制相互通信,而我们学习的是不同端系统上的进程通信(通过交换报文)。
-
客户和服务器进程
不同端系统的进程通信是一对通信进程进行交换报文。发起通信的是客户进程,等待联系的是服务器进程。
-
进程与计算机网络之间的接口
进程通过一个套接字(socket)想网络发送和接受报文。应用程序开发者通过套接字可以控制运输层:选择运输层协议;设定几个运输层参数。并不能控制运输层。
-
进程寻址
发送信息需要知道目的地的地址。因此定义了一个IP地址和端口号解决该事情。IP地址表示目标主机的地址,而端口号则是区分不同的应用程序信息。
- 可供应用程序使用的运输服务
从四个方面考虑选用哪种协议:可靠数据传输、吞吐量、定时和安全性
- 可靠数据传输 能够确保应用程序从一个端系统数据正确、完全地交付给该应用程序的另一端。(数据不可丢失型、容忍丢失的应用)
- 吞吐量 可用吞吐量就是发送进程能够向接收进程交付比特的速率。(带宽敏感的应用和弹性应用)
- 定时 为了有效性而要求数据交付有严格的时间限制(游戏,通话等应用)
- 安全性 是否可以加密
- TCP服务
TCP服务模型包括面向连接服务和可靠数据传输服务。
- 面向连接服务:在发送报文前需要客户和服务器互相交换运输层控制信息,即握手。在握手后,TCP连接在客户和服务器进程的套接字之间建立起来,可以同时进行报文收发。当应用程序结束报文后,必须拆除改连接
- 可靠的数据传送服务:TCP可以无差错按适当顺序交付所有发送的数据。
- TCP还有拥堵控制机制:当发送方和接受方之间的网络出现拥堵时,TCP的拥堵控制机制会抑制发送进程。
- 安全性:TCP是没有提供加密机制的,但是TCP的加强版可以使用SSL加密。
- UDP
UDP是无连接的,不可靠数据传送服务,而且无拥塞控制机制。
- Web和HTTP
Web应用层协议是超文本传输协议(HTTP)。HTTP由两个程序实现:一个是客户程序一个是服务器程序。HTTP定义了报文的结构以及客户和服务器进行报文交换的方式。
Web页面是由对象组成的。大多数Web页面包含一个HTML基本文件以及几个引用对象。HTML基本文件通过对象的URL地址引用页面中的其他对象。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。
Web服务器实现HTTP的服务器端,Web服务器端用于存储Web对象,每个对象由URL寻址。
HTTP定义了Web客户和Web服务器请求Web页面的方式,以及服务器想客户传送Web页面的方式。HTTP使用 TCP作为他的支撑运输协议。HTTP服务器并不保存关于客户的任何信息,因此HTTP是一个无状态协议。
-
非持续连接和持续连接
非持续连接是指每个请求是经一个单独的TCP连接发送的。而持续连接是指所有的请求/回应经相同的TCP连接发送。
-
往返时间(RTT):是指一个短分组从客户到服务器然后在返回客户所花费的时间。
采用非持续连接的HTTP需要两个RTT才开始接受报文。
而HTTP1.1采用持续连接的HTTP,服务器在发送相应后保持该TCP连接打开。在相同的客户与服务器之间,后续的请求和相应报文能够通过相同的连接进行传送。
-
HTTP报文格式
HTTP报文分为两种:请求报文和响应报文
-
HTTP请求报文
第一行是请求行,后面的行是首部行
请求行有3个字段:方法字段、URL字段和HTTP版本字段
方法字段:GET、POST、HEAD、PUT、DELETE
- GET:用来获取URL所指的地址的内容,一般实体体为空
- POST:一般用于搜索引擎提交表单,需要使用实体体,但GET也可以用来提交表单,并在URL中包括输入数据,例子例子。
- HEAD:和GET类似,但不返回对象。(可能这里会有点看不懂,等看完下面的HTTP的相应报文就明白啦,它返回的是状态行和首部行)一般是应用程序开发者进行调试追踪
- PUT:用于用户上传对象到指定Web服务器上的指定路径。
- DELETE:用于用户或者应用程序删除Web服务器上的对象。
首部行
- 首部行Host: www.someschool.edu 指明了对象所在的主机
- 首部行Connection: close 该浏览器告诉服务器不要麻烦地使用持续连接,他要求服务器发送完该请求的对象后就关闭TCP连接
- 首部行User-agent: 指明用户代理,集向服务器说明发送请求的浏览器类型,服务器可以有效地为不同类型的用户代理实际发送相同对象的不同版本。
- 首部行Accept-language: 表示用户想得到该对象的法语版本。
- HTTP响应报文
三部分:状态行、首部行、实体体
- 实体体是报文的主要部分,即它包含了所请求的对象本身
- 状态行:协议版本字段、状态码、相应状态信息
状态码和相应状态信息如下:
- 首部行
首部行Connection:close服务器告诉客户,发送完报文后将关闭该TCP连接
首部行Date:服务器产生并发送该响应报文的日期和时间
首部行 Server:表示该报文时由一台什么类型的服务器产生的
首部行Last-Modified:指示了对象创建或者最后修改的日期和时间
首部行Content-Length:指示了被发送对象中的字节数
首部行Content-Type: 指示了实体体中的对象是HTML文本
-
Window电脑小尝试:
首先打开telnet
打开后输入open www.baidu.com(这个是URL,可以输入任何的服务器地址) 80
按ctrl+] 然后回车
输入:HEAD www.baidu.com HTTP1.1
Host: www.baidu.com
这个会返回一个报文的头部
-
cookie
cookie用于站点对用户进行跟踪
cookie有四个组件:①在HTTP响应报文中的一个cookie首部行
②在HTTP请求报文中的一个cookie首部行
③在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
④位于Web站点的一个后端数据库
cookie被认为是对用户隐私的一种侵害。
- Web缓存
Web缓存也叫代理服务器,它是用来代表初始Web服务器来满足HTTP请求的网络实体。
它会保存最近请求的对象的副本
部署Web缓存器的原因:①Web缓存器可以大大减少对客户请求的响应时间
②减少通信量
- 条件GET方法
在原来GET基础上加上一个首部行If-Modified-Since:这个首部行的值为原来HTTP相应报文的Last-Modified:(用来记录对象最后修改时间)