打开一个网页时发生了什么
一、输入地址
- 当我们在浏览器输入网址时,浏览器已经在从历史记录,书签等地方智能匹配可能的url
- 请求一发起浏览器首先会查看本地硬盘的 hosts 文件,看里面有无这个域名对应的规则,有的话直接使用hosts文件的ip地址
- 如果本地的 hosts 文件没有对应ip地址,浏览器会发出一个DNS请求到本地NDS服务器(本地服务器指你的网络接入服务商,比如这个移动中国电信)。
- 查询输入网址的DNS请求到达本地DNS服务器后,本地DNS服务器会先查询它的缓存记录,如果有记录则直接返回结果(此过程是递归查询的)。如果没有,本地服务器会向DNS根服务器进行查询。
- 根DNS服务器不会记录具体域名和IP地址对应关系,而是告诉本地DNS服务器可以到域服务器上去继续查询,并给出域服务器地址(这种过程是迭代的过程)。
- 本地DNS服务器向域服务器发出请求,域服务器不会直接返回域名和IP地址的对应关系,返回的是域名解析服务器的地址。
- 本地DNS服务器向域名解析服务器发出请求,此时会收到一个域名和IP地址的对应关系,然后本地DNS服务器把IP地址返回用户电脑,并且把这个对应关系保存在缓存,以备下次用户查询时直接返回结果,加快网络访问。
OSI七层模型:
- 物理层-比特——投进邮筒,数据就可以在互联网中传递
- 数据联络层-帧——邮局
- 网络层-报文-IP地址——收信人地址
- 传输层-TPDU——填写发信人和收信人
- 会话层-SPDU——因为是邮件所以要给信封
- 表示层-PPDU——写的是什么类型的信(txt,ppt,exe)
-
应用层-APDU——给女朋友写信
— 发送数据从应用层往物理层发送
— 接收数据从物理层往应用层接收
—TCP/IP—
- 网络接口层:与OSI中的物理层和数据联络层对应,负责监视数据在主机和网络之间的交换
- 网际层:对应OSI的网络层,负责主机到主机的通信问题,该层主要有三个协议:网际协议(ip),互联网组管理协议(IGMP),互联网控制报文协议(ICMP)
- 传输层:负责通信和数据包传送,该层主要有两个协议:传输控制协议(TCP)和用户数据报协议(UDP)
- 应用层:为用户提供各种服务,例如:FTP、DNS
DNS(Domain Name System,域名系统):因特网上作为域名和IP相互映射的一个分布式数据库,能够使用户更加方便访问互联网,而不用去记住直接被机器读取的IP数串。通过主机名最终得到该主机对应的IP地址的过程叫域名解析。
通俗的说DNS就相当于一个电话本,比如你找www.baidu.com这个域名,那就翻一翻电话本,我就知道,噢,它的电话(IP)是14.215.177.38
DNS负载均衡:当一个网站的用户非常多,假如每次请求的资源位于同一台机器,那么这台机器随时可能会崩掉。处理办法就是DNS负载均衡,原理是在DNS服务器中为一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同机器,使不同客户端访问不同服务器,从而达到负载均衡。
三、浏览器向web服务器发送一个HTTP请求
- 浏览器拿到域名对应的 ip 地址后会向服务器的WEB程序 80 端口发起TCP的连接请求(三次握手)
- 第一次握手:客户端A发送SYN信息(序列号seq=X) 你在吗
-
第二次握手:服务端B接收SYN信息(序列号seq=X) 我在
服务端B发送SYN、ACK信息(序列号seq=Y, 确认号=X+1) 你还在吗 -
第三次握手:客户端A接收SYN、ACK信息(序列号seq=Y, 确认号=X+1) 我还在
客户端A发送ACK信息(确认号Y+1) 我要跟你发送数据 - 服务端B接收ACK信息(确认号Y+1) 好的
- 在此期间AB持续进行交流 (PS:三次握手的目的是”为了防止已失效的连接请求报文段 突然传送到了服务端,因而产生错误,可能会造成不必要的server端资源浪费)
- 第一次挥手:Client(客户端)发送FIN=1(序列号seq=u),关闭Client到Server的数据传送,Client进入(终止等待)FIN_WAIT_1状态。
- 第二次挥手:Server(服务端)收到FIN后,发送ACK=1(序列号seq=v,确认号=u+1)给Client,Server进入
- (关闭等待)CLOSE_WAIT状态。
- 第三次挥手:Server 发送FIN=1,ACK=1(序列号seq=w,确认号=u+1)给Client,Server进入LAST_ACK(最后确认)状态
- 第四次挥手:Client发送ACK=1(序列号seq=u+1,确认号=w+1)给Server。请注意,此时TCP连接还没有释放掉。必须经过时间等待计时器设置的时间2MSL(MSL:最长报文段寿命)后,Client进入CLOSED状态,结束再次TCP连接
- 为什么关闭连接要四次挥手:关闭连接时,收到对方的FIN报文仅表示对方不再发送数据,但还能接收数据,己方的数据还没有发送完
常见端口号:
- FTP(文件传输协议):端口号:20 21
- SSH(安全shell协议):端口号:22
- telnet(远程登录协议):端口号:23
- DNS(域名系统):端口号:53
- http(超文本传输协议):端口号:80
- SMTP(简单邮件传输协议):端口号:25
- POP3(邮局协议3代):端口号:110
- TCP协议在运输层;IP协议在网络层;http协议在应用层
- http是基于tcp连接方式的一个超文本传输协议,http请求用三部分组成:请求行,消息报文,请求正文;
- http所有传输的内容都是明文,并且客户端和服务器都无法验证对方的身份。https具有安全性的ssl加密传输协议,加密采用对称加密,https协议需要到ca申请证书,一般免费证书很少,需要交费。https是在http的基础上加了ssl的一个安全协议,为传输提供一个安全性认证和数据完整性保护。
-
Get和Post的区别
get:指定资源请求数据,刷新无害,get请求的数据会附加到URL中,传输数据的大小收到url的限制
post:向指定资源提交要被处理的数据。刷新会使数据被重复提交。post在发送数据前会先将请求头发送给服务器进行确认,然后才真正发送数据
- 浏览器将支持的加密算法发给服务器
- 服务器选择浏览器支持的加密算法,以证书的形式回发给浏览器
- 客户端(SSL/TLS)解析证书验证证书合法性,生成对称加密的密钥,就是客户端密钥,用服务器的公钥对客户端密钥进行非对称加密。
- 客户端发起HTTPS中的第二个HTTP请求,将加密之后的客户端对称密钥发送给服务器
- 服务器接收到客户端发送密文后,用自己的私钥进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行对称加密,数据就会变成密文。
- 服务器将加密之后的密文发送给客户端
- 客户端收到服务器发送的密文,用客户端密钥进行对称解密,得到服务器发送的数据。HTTPS中的第二个http请求结束,HTTPS传输完成。