- 浏览器做的第一步工作是解析 URL,分清协议是http还是https,主机名,路径名,然后生成http消息,之后委托操作系统将消息发送给 Web 服务器。
- 在发送之前,还需要先去查询dns,首先是查询缓存浏览器缓存、电脑缓存、路由器缓存、运营商缓存、请求dns服务器的缓存;然后udp协议查询本地dns服务器,本地dns服务器没有再去迭代查询顶级-次级等一系列服务器,最终返回给电脑,并缓存。
- 知道了地址,下一步就是把 HTTP 的传输工作交给操作系统中的协议栈,协议栈的内部分为几个部分,分别承担不同的工作。上下关系是有一定的规则的,上面的部分会向下面的部分委托工作,下面的部分收到委托的工作并执行。
- 接下来 数据包去找tcp协议栈打包成tcp数据包 源端口一般是浏览器监听的端口(通常是随机生成的),而目的端口如果http一般80 https一般443
- 然后 tcp先通过三次握手的方式 经由ip协议、数据链路等建立连接
- 之后数据包下一步 打包成ip格式报文 添加ip报文头
- 由网卡发出,通过路由表,确定下一跳的位置(一般是路由器)
- 然后通过arp协议,由ip地址找到路由器的mac地址,添加mac头部等,转化为电信号发送给路由器的交换机模块
- 交换机接收到数据包后,根据mac表,确定发到哪个端口,由于我们是向外,所以是发到路由器模块
- 经历路由器等等一系列路由器 经过网线传输,可能还要经历NAT流程,最终达到目标地址和端口
- 对方洋葱皮解码,然后服务器做出响应,将对于的html文本发回给浏览器
- 释放tcp连接(不一定)
- 浏览器将该 html 文本并显示内容;
https版本需要增加
用户在浏览器里输入一个https网址,然后连接到server的443端口。
服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过。这套证书其实就是一对公钥和私钥。
服务器将自己的数字证书(含有公钥)发送给客户端。
客户端收到服务器端的数字证书之后,会对其进行检查,如果不通过,则弹出警告框。如果证书没问题,则生成一个密钥(对称加密),用证书的公钥对它加密。
客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器。
服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后得到客户端密钥,然后用客户端密钥对返回数据进行对称加密,这样数据就变成了密文。
服务器将加密后的密文返回给客户端。
客户端收到服务器发返回的密文,用自己的密钥(客户端密钥)对其进行对称解密,得到服务器返回的数据。