目录
应用层概述
多数应用程序是由通信进程对组成,每对中的两个进程相互发送报文。从一个进程向另一个进程发送的报文必须通过下面的网络。进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。
套接字: 应用程序和网络之间的应用程序编程接口。
应用程序的服务要求:
- 可靠数据传输
- 吞吐量
- 定时
- 安全性
根据这些服务要求从而选择运输层协议(TCP、UDP)
-
例子:
- FTP:文件传输协议。使用两个并行的TCP连接来传输文件。①21端口用来控制连接,两主机之间传输控制信息 ②20端口用来进行数据连接,实际发送一个文件
- SMTP: 简单邮件传输协议。使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。一般不使用中间邮件服务器发送邮件。
- MIME:发送邮件相关协议。MIME试图在不改变SMTP协议和RFC822(邮件格式标准)的基础上,使得邮件可以传送任意二进制文件。
- DNS:因特网的目录服务,实现主机名到IP地址的映射。
- HTTP:超文本传输协议,定义报文结构以及客户与服务器之间进行报文交换的方式
- POP3:邮件访问协议。特许、事务处理和更新
- IMAP:邮件访问协议。将报文与文件夹关联起来,允许用户代理获取报文组件的命令
Web应用和HTTP协议
网页是由对象构成。对象可能是HTML文件,JPEG图片,java小程序等等。
Web应用的按需操作——当用户需要的时候就能得到想要的内容。
web 应用组成
- 前端:负责页面展示,JavaScript程序的执行
- 后端:负责响应客户端浏览器发来的请求,并将对应的资源返回给客户端。数据库的连接,静态页面(html)的生成都在服务器端完成。
HTTP协议:
超文本传输协议,是Web的核心。
-
HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
-
问题:
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,一旦攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此 HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
解决方式:
HTTPS协议在HTTP的基础上加上了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器的通信进行加密。
区别:
1. https协议需要申请ca证书,一般需要交费
2. http协议是超文本传输协议,以明文传输,https协议是具有安全性的SSL加密传输协议
3. http和https协议使用完全不同的连接方式,用的端口也不同,http使用80端口,https使用443端口
4. http的连接很简单,是无状态的,HTTPS是由SSL+HTTP协议构成的可进行加密传输、身份验证的网络协议,比http协议更安全。
HTTP+TCP
HTTP客户发起一个与服务器的TCP连接,一旦建立连接,浏览器和服务器进程可以通过套接字接口访问TCP。
- 客户向它的套接字发送HTTP请求报文并从它的套接字接口中接收HTTP响应报文
- 服务器从它的套接字接口接收HTTP请求报文和向它的套接字接口发送HTTP响应报文。
在访问网站的时候我们需要在浏览器上输入网址。输入后会向对应的URL发送HTTP GET请求,此时服务器就会将对应请求的页面的html返回到客户端的浏览器上。浏览器会根据html的索引信息(比如说头部上的标签显示的信息,img标签里面的url信息),再去向对应的url发请求获取对应的资源。最后再进行显示。
HTTP1.0:短暂连接,每次请求需要一个RTT来建立连接,一个RTT来传输数据
HTTP1.1:持久连接,只需要建立一次连接,以后都不需要建立连接
HTTP报文格式
- HTTP请求报文
下面提供了一个典型的HTTP 请求报文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
- HTTP响应报文
HTTP/ 1. 1 200 OK
Connection: close
Date: Tue , 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue , 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
类型:
GET(可用于表单,拓展URL)
POST(表单提交)
DELETE
HEAD(HTTP报文响应,不返回请求对象)
PUT(允许用户上传对象到指定的web服务器上指定的路径)返回码
200:ok
301:moved permanently
400:bad request
404:not found
505:HTTP VERSION not supported
cookie
允许站点对用户进行跟踪,希望能够识别用户,服务器希望限制用户访问或者将内容与用户进行关联。
cookie一般存储在客户端,session存储在服务器端
- 服务器可以以cookie的方式在客户端保存一定量的数据
- 客户端在发出HTTP请求的同时会带上cookie中保存的参数
cookie的一些字段属性:
- NAME=VALUE(强制): web服务器可以创建任意的NAME-VALUE关联,在后继对站点的访问会将其送回给Web服务器
- expires(可选): cookie的过期时间,用日期字符串来表示
- domain(可选): 使多个web服务器共享cookie,浏览器只向指定域中的服务器主机名发送cookie,将cookie限制在特定的域中。
- path(可选): 指定与cookie关联在一起的网页,为服务器上特定的文档分配cookie
- secure(可选): 如果包含该属性,只有在HTTP使用了SSL安全连接时才会发送cookie
代理服务器
web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象副本。
优点:
1. 大大减小对客户请求的响应时间
2. 减少一个机构的接入连入到因特网的通信量,不必增加带宽
3. 从整体上大大减低因特网上的web流量
代理服务器可能对目标服务器的资源下载至本地缓存,如果客户端所要获取的资源在代理服务器的缓存之中,则代理服务器并不会向目标服务器发送请求,而是直接返回缓存的资源
- 减轻了服务器端的请求负荷与代理服务器到服务器区间的流量(在多个代理服务器的情况下可以使得小网站支持大量用户的访问),同时也使得客户端有更快的响应速度
- 代理服务器同时还可实现网络安全(防火墙),外网访问等功能
域名系统
- 网络中IP地址难记,而且时常会出现变化,给通过IP访问网站造成极大困难
- 域名系统将IP地址和域名做映射,使得用户可以通过相对固定的域名访问网站,而无需去记住IP地址
- 域名系统可提供下列服务
- 域名到IP地址的转换(类型:A与NS)
- 主机别名(类型:CNAME)
- 邮件服务器别名(类型:MX)
- 负载均衡
域名系统一般是分布式系统:
集中式系统存在的缺点:
1. 服务器一旦出现问题,后果严重
2. 服务器需要承载的流量过于巨大
3. 远程集中式数据导致查询效率不高(距离远;数据规模大,查询速度慢)
4. 高昂的维护成本
分布式系统的结构:
- 根节点服务器
- 顶级域名服务器
- 权威域名服务器(本地域名服务器)
查询方式
- 迭代式查询
本地域名服务器从根节点开始逐级迭代进行域名查询
对本地域名服务器的压力比较大 - 递归式查询
本地域名服务器去问根节点服务器,根节点服务器再负责接下来的查询
对根节点服务器的压力比较大,因此一般不采用此方法
Local DNS要知道www.cs.stanford.edu的IP,会先问edu的DNS服务器, edu的DNS服务器会告诉Local DNS下一步去问stanford.edu的DNS服务器,然后Local DNS收到指示后会继续问下去
Local DNS要知道www.cs.stanford.edu的IP,会先问edu的DNS服务器, edu的DNS服务器会自动去问stanford.edu的DNS服务器,如此递归下去最后再将结果返回给local DNS
域名缓存
系统会自动将之前的查询结果(不论是正确的还是不正确的)缓存下来,以节省查询的时间
获取www.baidu.com的ip地址的做法:
1. 同一台主机运行DNS应用的客户端
2. 浏览器从上述URL中提取主机名,并将主机名传给DNS应用的客户端
3. DNS客户向DNS服务器发送一个包含主机名的请求
4. DNS客户最终收到一份回答报文,其中包含主机名对应的IP地址
5. 一旦获取到IP地址,能够向位于该IP地址的80端口的HTTP服务器的进程发起一个TCP连接。