六、应用层
六、应用层
6.1从输入网址到浏览器显示过程?
1) DNS对输入网址进行域名解析;
2)建立TCP连接(三次握手);
3)客户端发送HTTP请求,服务端响应请求;
4)浏览器解析渲染页面;
5)连接结束(四次挥手)。
6.2 DNS
域名系统(Domain Name System,DNS)是一种工作在 TCP/IP 的应用层的分布式网络目录服务系统。它通过一个遍布全球的分布式数据库,提供主机名字和 IP 地址之间的映射。
6.1.1 DNS解析过程
主要依次查询浏览器、操作系统、本地域名服务器、根域名服务器、主(顶级)域名服务器、注册域名服务器中的域名与IРP映射关系。
1)浏览器先检查自身缓存中有没有被解析过的这个域名对应的IP地址,如果有,解析结束。(同时域名被缓存的时间也可通过TTL属性来设置。)
2)如果浏览器没有命中缓存,则检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。(在windows中可通过c盘中一个叫 hosts 的文件来设置,如果在这指定了一个域名对应的IP,则浏览器会优先使用这个IP地址。)
3)如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS))来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了;
4)如果LDNS仍然没有命中,就直接跳到Root Server域名服务器请求解析;
5)根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址;6)此时LDNS再发送请求给上一步返回的gTLD;
7)接受请求的gTLD查找并返回这个域名对应的 Name Server的地址,这个Name Server就是网站注册的域名服务器;8)Name Server根据映射关系表找到目标IP返回给LDNS;
9)LDNS缓存这个域名和对应的IP;
10)LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程至此结束。
6.1.1 名字空间
为了无二义性,主机名字必须全局唯一。把 IP 地址映射为全局唯一的名字的名字空间(name space)可以通过两种方法来组织:
在平面名字空间中,主机名字采用一个无结构的字符串来表示,整个网络中的所有名字都处于同一个名字空间中,所有名字集中管理。——只适用于规模较小的网络系统。
在层次名字空间中,主机名字中引入了层次结构,将名字空间分成若干个子空间,子空间还可以进一步划分。子空间的管理由相应的机构负责,每个机构要保证自己所管理的名称不重复。——既减轻了单个管理机构的管理工作量,也使得解析工作可以局部化完成,提高了系统的工作效率。
在因特网中,域名空间被划分为三个不同的部分:类属域、国家域和反向域。
类属域(generic domain)按照主机的类属行为来定义注册主机。
国家域(country domain)按照国家或地区来定义注册主机。
反向域(inverse domain)用于把地址映射为名字。
6.1.2 DNS缓存
每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。
可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如,每个项目只存放两天)。
当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
6.3 Http
Http 是基于TCP面向连接的无状态应用层超文本传输协议。
为了使超文本的链接能够高效率地完成,需要用 HTTP 协议来传送一切必须的信息。
从层次的角度看,HTTP 是面向事务的 (transaction-oriented) 应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
6.3.1HTTP状态码
HTTP状态码分为5类:1xx表示继续发送请求;2xx表示请求成功;3xx表示资源已找到但需要继续进行其他操作; 4xx表示客户端错误;5xx表示服务器错误。下面就具体详述常见状态码的语义,及其使用方式。
状态码:由3位数字组成,第一个数字定义了响应的类别
1xx:指示消息,表示请求已接收,继续处理
2xx:成功,表示请求已被成功接收,处理
200 OK:客户端请求成功
204 No Content:无内容。服务器成功处理,但未返回内容。一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况。不会刷新页面。
206 Partial Content:服务器已经完成了部分GET请求(客户端进行了范围请求)。响应报文中包含Content-Range指定范围的实体内容
3xx 重定向
301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
302 Found:临时重定向,表示请求的资源临时搬到了其他位置
303 See Other:临时重定向,应使用GET定向获取请求资源。303功能与302一样,区别只是303明确客户端应该使用GET访问
307 Temporary Redirect:临时重定向,和302有着相同含义。POST不会变成GET
304 Not Modified:表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足。返回304时,不包含任何响应主体。虽然304被划分在3XX,但和重定向一毛钱关系都没有
4xx:客户端错误
400 Bad Request:客户端请求有语法错误,服务器无法理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务
404 Not Found:请求资源不存在。比如,输入了错误的url
415 Unsupported media type:不支持的媒体类型
5xx:服务器端错误,服务器未能实现合法的请求。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
6.3.2HTTP特点
HTTP 使用了面向连接的 TCP 作为运输层协议,保证了数据的可靠传输。
HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
HTTP 是面向事务的客户服务器协议。
HTTP 协议是无状态的 (stateless)。
6.4HTTPS
首先了解一下什么是 Https协议。
HTTPS是以安全为目标的HTTP通道,是HTTP的安全版。HTTPS的安全基础是SSL。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol),它建立在可靠的传输协议〈(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
6.4.1Http 与 Https的区别?
1)HTTPS协议需要到CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
2)HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
3)HTTP和HTTPS使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。
4)HTTP的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
6.4.2握手的详细过程
1. 客户端发起HTTPS请求
2. 服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。
3. 传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等。
4. 客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。
5. 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
6. 服务段解密信息
服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该值进行对称加密。
7. 传输加密后的信息
这部分信息是服务端用随机值对称加密后的信息,可以在客户端被还原。
8. 客户端解密信息
客户端用之前生成的随机值解密服务端传过来的信息,于是获取了解密后的内容。