文章目录
<1>从url栏将域名提取出来
在浏览器上的url栏输入url,如果有汉字,这时会将汉字用unicode转换成计算机可以识别的机器语言
-
unicode(有utf-8,utf-16,utf-32三种情况,他们的区别时utf-8会将一个汉字随机转换成一、两、三、四个字节,而utf-16则会将一个汉字转换成两、四个字节,utf-32会将一个汉字转换为四个字节)
了解更多unicode -
URL的标准格式:
【protocol】://【hostname】:【port】【path】?【query】#【fragment】- protocol是指网络传输协议(如:http、https、file等)。
- hostname是指存放资源的与域名、主机名或IP地址。
- port是指端口,有时用默认端口所以不显示。
- path是指一个主机上的一个目录或者文件地址,它决定了服务器如何处理这个请求。
- query从?到#之间是参数(也叫搜索部分),参数之间用&来间隔。
- fragment用于指定网络资源中的片段,搜索部分搜索出的信息多种多样,通过fragment可以明确指出哪些信息是我们需要
<2>查询ip
获得域名之后应该是查ip,但是在此之前还有一步是查看HSTS列表上有没有要查询的域名,如果有的话就要在和这个域名对应的服务器进行联系时使用https协议(HSTS是IETE推荐的一种web协议)
1.查IP会看本机上的host文件和本地DNS服务器上看看有没有域名相关的记录
2.如果在查询根服务器之后依旧没有域名对应的ip那么将会传给下一级服务器直到查到为止。
- 查询IP有两种方式,分别是递归查询和迭代查询,迭代查询就是这一级服务器没有IP地址的情况下,将下一级服务器的IP传给查询端由查询端访问下一级服务器的方式叫做迭代查询。递归查询是由这一级服务器直接访问下一级服务器下一级服务器同样如此,知道查到IP为止的查询方式,这种方式叫做递归查询。
<3>与对应IP的终端进行联系
[1]一般情况下与服务器进行连接
1.TCP数据报
对于了解TCP的三次握手和四次挥手 你只需要知道数字报中以下三个值的作用:
(1)序号(seq)
序号占32位,用来标识从计算机A 到计算机B的数据包序号。
(2)确认号(ack)
确认号占32位,ACK=seq+1。
(3)标志号
用来标记此次发送的数据是什么类型,自己发送数据”意欲何为“。
- 标志号类型
1.SYN:建立一个新连接
2.FIN:断开一个连接
3.ACK:确认序号有效
4.RST:重制连接
5.PSH:接收方应尽快将这个报文传递给应用层
6.URG:紧急指针有
其实只是了解TCP三次握手四次挥手的话只需要了解前三个标志号类型就行了
2.按照TCP建立联系三次握手
一次:客户端向服务器发送标志号为 SYN 和序号(Seq)为 x
- SYN的意思就是请求建立联系,而发送序列号(Seq)是为了给服务器一个随机产生的数以用于之后的验证。
二次:服务器向客户端发送标志号为ACK,确认号(ACK)为 x+1,序号(Seq)为 y
- ACK是Acknownledge的缩写,ACK的意思是告诉浏览器刚刚的序号有效,确认号(Ack)是用于浏览器验证数据已经成功接受,发送序号(Seq)是为了发送给浏览器一个数以用于之后的验证。
三次:客户端向服务器发送标志号ACK,确认号(ACK)为 y+1
- 标志号为(Ack)是为了告诉服务器刚刚发送的序号有效,确认号(Ack)是用于服务器验证数据已成功接收
3.三次握手的意义
第一次是浏览器给服务器发送信息,此时让服务器知道服务器能够接受数据。
第二次是服务器发送给浏览器,此时让浏览器知道刚刚发的报文服务器已经接受,说明浏览器能够发送数据,浏览器能成功收到服务器的报文,说明浏览器能够接收数据。
第三次浏览器发送报文给服务器,服务器根据验证知道刚刚发的数据浏览器已成功接收,说明服务器能够发送数据
4.断开连接四次挥手
一次:客户端发给服务器标识符是FIN且还有序号(Seq)的TCP报文
- FIN=1意味着发送方字节流结束
二次:类似服务器返回客户端一个ACK报文
三次:服务器给给客户端发送一个FIN报文
四次:客户端回复ACK报文
5.四次握手的意义
一次是浏览器告诉服务器散了吧。
二次是服务器说我知道了我收拾一下东西。
三次是服务器跟浏览器说我收拾好了分手吧。
四次是浏览器给服务器肯定的答复说分手吧。
(收拾东西就是指将不得不发送的数据先发完)
[2]二般情况下与服务器进行明文通信商量之后加密联系
1.SSL协议的构成
SSL协议实际上分为两个部分,分别是SSL记录层协议和SSL握手协议,它用来记录上层协议的数据,再根据SSL握手协议发送,SSL记录层协议是基于TCP协议,而SSL握手协议是基于SSL记录层协议。
2.对记录层的介绍
SSL握手协议是架构在TCP/IP协议族的基础上,而记录层协议是建立在握手协议上,记录层协议主要是在确立加密通讯各种细节之后,对数据的加密规范做了声明。主要流程如下。
1、将要加密的数据分成块
2、对每一块数据进行压缩
3、按照每一块数据的长度生成一个MAC值,并且追加到压缩的数据后面
4、根据握手协议商量好的master-secret进行对称加密
5、添加上内容类型,主版本号,子版本号,内容长度之后就能进行传输了
3.SSL握手协议
ssl握手协议做的事情简单就是,由客户端和服务端共同商讨出来一个随机数,将文件的内容用一个对称加密算法进行加密,再根据非对称加密算法将这个随机数进行加密,这样做又能保证解密数据的速度,同时还能保证数据的安全,因为非对称加密的解密更加耗时。
1、第一步(client hello):在这一阶段由客户端发送自己支持的加密套件,同时发送一个随机数用于之后的rsa非对称加密。
2、第二步(server hello):由服务端发送确定下来接下来的加密套件,同时也发送一个随机数,用于生成一个master secret(用于对数据进行对称加密的密钥)。
3、第三步(certificate):这一部分由服务器发送自己的证书,证书中带着公钥。
4、第四步(server key exchange):这一部分是可选的意思就是可能并不会有这一步,但是如果加密套件中对生成的master secret使用DH 算法进行加密就会有这一步,用来发送DH加密需要的参数。
5、第五步(certificate request):这一部分由服务器表明是否需要客户端发送自己的证书,同时需要了解的是这一部分也不是必须的。
6、第六步(server done):服务端申明自己已经完成交互
7、第七步(certificate):如果在第五步服务端发送了自己的请求则客户端会在这一步中发送自己的证书,如果没有证书在这一关中也需要申明no-certificate,告诉服务端。可见这一步也不是必须的。
8、第八步(client key exchange):
- (1)这一步就是必须的若使用的是RSA算法则客户端要使用之前服务端在第二步中发送来的随机数和自己在第一步产生的随机数按照不同的密钥交换算法生成一个pre-master(这个数的作用是生成master secret)并且用公钥按照RSA算法加密之后发送给服务端,服务端在收到这个数据之后用私钥将pre-master解密出来,然后用pre-master、两个随机数生成一个master secret密钥。同理客户端也是这样操作的。
- (2)如果使用的是DH算法加密生成的密钥则这一步客户端会发送自己的DH参数并且无论客户端和服务端都会根据之前server key exchange和本阶段的参数生成pre-master,并且产生加密数据的密钥。
9、第九步(certificate verify):在这一步服务端会根据从第一段会话开始到现在的所有数据生成一个HMAC用来让服务端校验发过数据包是否有被篡改,会话是否可信。这一阶段也是可以被省去的。
10、第十步(change cipher spec):客户端告诉服务端接下来的对话就会使用之前商量好的方式进行加密。
11、第十一步(finished):这一部分会将之前的会话的摘要的hash值根据生成的master-secret随机数进行加密,而master-secret会被公钥根据RSA或者DH算法加密,这么做的意义在于告诉服务端客户端有加密的能力且没有问题,而让服务端知道自己也有解密的能力。
12、第十二步(change cipher spec):服务端告诉客户端接下来的会话会使用之前商量好的方式进行加密。
13、第十三步(finished):服务端会发送一段加密好的数据给客户段,意义和第十一步是相同的。
4.对加密细节的简单讲解
- 密钥的确定
确定密钥要根据客户算和服务端传来的两个随机数,和客户端自己生成的随机数,之所以要用三个随机数,就是为了让这个加密数据的数无限接近真随机数。 - 公钥加密密钥,密钥加密数据
RAS加密是非对称加密,用来加密数据的话,最后会使数据解析变慢,所以在实际使用过程中会将密钥用公钥根据RAS进行非对称加密,在将数据根据密钥进行对称加密,这就即使加密严格,又提高了解析的速度
<4>传输在互联网上的数据
网络的主要职能就是数据的交互,数据根据网卡由数据信息转换为光电信号,经过交换集线器(第二层交换机),路由器(第三层交换机),经过负载均衡器(4~7层交换机)最终到达你的电脑。
<5>页面渲染
浏览器收到服务器返回的页面数据后,解析之后,开始对页面进行渲染。