一个简单例子
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求
报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;
域名解析
1、浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就结束。
注:chrome://net-internals/#events
2、.如果用户浏览器缓存中没有数据,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。
3、如果没有找到,在本地域名服务器(最近的一台DNS服务器)中查询IP地址
4、如果没有找到,本地域名服务器会向根域名服务器发送一个请求
5、如果根域名服务器中也不存在该域名,但判定这个域名属于“com”域,则本地域名服务器会向com顶级域名服务器发送一个请求
6、如果com顶级域名服务器没有找到该域名,但判定这个域名属于“google.com”域,则本地域名服务器会向google.com域名服务器发送一个请求,以此类推
7、直到本地域名服务器得到域名对应的IP地址,并将其缓存到本地,供下次查询使用
TCP的3次握手
为什么要三次握手
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接
请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后
的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的
连接请求报文段后,就误认为是client再次发出的一个新的连接请求。
于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,
那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求
,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接
已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。
采用“三次握手”的办法可以防止上述现象发生。
![](https://i-blog.csdnimg.cn/blog_migrate/d3a5ad02a35f53f1a0c17a53c27d4498.png)
HTTP是什么?
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、
协作式和超媒体信息系统的应用层协议
通俗来讲,他就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的,应用层的协议,
常基于TCP/IP协议传输数据
HTTP请求方法
GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
TRACE: 追求一个资源请求中间所经过的代理(该方法不能由浏览器发出)
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
HTTP请求格式(请求协议)
![](https://i-blog.csdnimg.cn/blog_migrate/66080e189d6c61cb3eefe337158ce600.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f99813feaccb59ea405eeef32bb1f7c3.png)
HTTP响应格式(响应协议)
![](https://i-blog.csdnimg.cn/blog_migrate/0a8c82350c813f2d0541cc3f77654dcd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/027dc444443fdaf11df6a0bf3c6de40b.png)
HTTP状态码
![](https://i-blog.csdnimg.cn/blog_migrate/ab3df1a7c67c46c76b9551361bc862e8.png)
TCP四次挥手
为什么要四次分手
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。
TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,
只是表示主机1已经没有数据要发送了,主机1告诉主机2,
它的数据已经全部发送完毕了;但是,这个时候主机1还是可以
接受来自主机2的数据;当主机2返回ACK报文段时,
表示它已经知道主机1没有数据发送了,
但是主机2还是可以发送数据到主机1的;
当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,
就会告诉主机1,我也没有数据要发送了,
之后彼此就会愉快的中断这次TCP连接。
![](https://i-blog.csdnimg.cn/blog_migrate/858a7abec63bb26ee97747d4503c6ae1.png)
HTTP协议在网络模型中的位置
![](https://i-blog.csdnimg.cn/blog_migrate/6279f848a79b820059d8f6f89d6eb24c.png)
为什么要用https
HTTP中存在如下问题
1、请求信息明文传输,容易被窃听截取。
2、数据的完整性未校验,容易被篡改
3、没有验证对方身份,存在冒充危险
什么是HTTPS
HTTPS 协议(HyperText Transfer Protocol over Secure Socket Layer):
一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密
SSL又是什么
SSL(Secure Socket Layer,安全套接字层):1994年为 Netscape 所研发,SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。
TLS(Transport Layer Security,传输层安全):其前身是 SSL,它最初的几个版本(SSL 1.0、SSL 2.0、SSL 3.0)由网景公司开发,1999年从 3.1 开始被 IETF 标准化并改名,发展至今已经有 TLS 1.0、TLS 1.1、TLS 1.2 三个版本。SSL3.0和TLS1.0由于存在安全漏洞,已经很少被使用到。TLS 1.3 改动会比较大,目前还在草案阶段,目前使用最广泛的是TLS 1.1、TLS 1.2。
浏览器在使用HTTPS传输数据的流程
1、首先客户端通过URL访问服务器建立SSL连接。
2、服务端收到客户端请求后,会将网站支持的证书信息
(证书中包含公钥)传送一份给客户端。
3、客户端的服务器开始协商SSL连接的安全等级,
也就是信息加密的等级。
4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,
然后利用网站的公钥将会话密钥加密,并传送给网站。
5、服务器利用自己的私钥解密出会话密钥。
6、服务器利用会话密钥加密与客户端之间的通信。
![](https://i-blog.csdnimg.cn/blog_migrate/581a1d15a58b7d991b66d6db1aad7ab1.png)
HTTPS的缺点
HTTPS协议多次握手,导致页面的加载时间延长近50%;
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
申请SSL证书需要钱,功能越强大的证书费用越高。
SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。