浏览器输入www.baidu.com之后发生了什么

经典面试题:浏览器输入www.baidu.com之后,按下回车键之后会发生什么?
从逻辑和网络传输两个方面来看

主要步骤有如下几步:

1.域名解析

2.浏览器与服务器建立连接

3.web浏览器发送HTTP请求

4.web服务器处理请求并返回HTTP响应

5.浏览器接收HTTP响应

6.浏览器渲染页面

1. 域名解析
浏览器首先查询浏览器缓存(浏览器会缓存DNS记录一段时间,各个浏览器缓存时间不等)。
如果缓存中没有,会去电脑中的hosts文件中查找。
如果hosts文件中也没有记录,它将会向DNS服务器发送一条DNS查询请求。DNS服务器是由网络通信栈提供的,通常是本地路由器或者ISP的缓存DNS服务器。(ISP是网络服务提供商,类似于移动,联通)
以上都没有的情况则向根域名服务器查域名对应IP,根域名服务器将请求转发给下一级查询,顺序如下
1、根域名解析服务器
2、com顶级域名服务器
3、baidu.com域名服务器
直至找到IP地址

DNS查询优先级:
a.本地host文件,若没有
b.查找本地DNS解析器缓存,若没有
c.查找TCP/IP参数设置中的首选DNS服务器,若没有
d.DNS服务器间的迭代查询

2. 浏览器与服务器建立连接
一旦浏览器收到正确的IP地址。会与服务器建立TCP连接,通过TCP/IP三次握手的过程建立连接进行数据传输。

3. web浏览器发送HTTP请求
建立连接后,就可以发送HTTP请求,HTTP请求由请求方法,请求头,请求正文三部分组成。

4. web服务器处理请求并返回HTTP响应
web服务器接收到http请求,由控制层处理逻辑,从数据库取得模型,视图层组装页面,返回HTTP响应。

5. 浏览器接收HTTP响应
包括状态行,响应头,响应报文。

重定向: 对于大型网站存在多个主机站点,为了负载均衡或者导入流量,往往不会直接返回请求页面,而是重定向。返回的状态码就不是200OK,而是301,302以3开头的重定向码,浏览器在获取了重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新回到第一步访问。

重定向的作用:重定向是为了负载均衡或者导入流量。利用一个前端服务器接受请求,然后负载到不同的主机上,可以大大提高站点的业务并发处理能力;重定向也可将多个域名的访问,集中到一个站点;比如baidu.com,www.baidu.com,永久重定向会将两个地址关联起来,来提高网站的自然排名。

6. 浏览器渲染页面
HTML字符串被浏览器接收后一句句读取解析
解析到< link >标签后重新发送请求获取css
解析到< scrpit >标签后发送请求获取js,并执行代码
解析到< img > 标签后发送请求获取图片资源
浏览器根据获取到的HTML和CSS计算得到渲染树,绘制到屏幕上。

分析页面中的超链接(如图片,样式等也是一个URL),过程和以上过程类似,之后再显示在当前页面,重复以上过程直至没有超链接需要发送,完成页面的全部加载。


从网络传输方面看这个问题
我们先说说TCP/IP五层模型。
物理层(网关)< >链路层(MAC)< >网络层(IP)< >传输层(TCP)< >应用层(HTTP)

1、 当在浏览器中输入一个域名之后,先通过DNS获得IP地址

2、 浏览器属于客户端,部分浏览器使用的是开源的curl网络连接库,它使用系统提供的套接字接口socket构建HTTP应用层协议,并且监听一个端口号。比如我们写用户登录接口发送username,password等字段都是按照HTTP协议进行封装。
在这里插入图片描述

3、 HTTP协议封装完成之后转交给传输层,HTTP建立在TCP连接(好比给别人打电话,电话线接通是TCP,当我们用中文进行沟通的时候,中文在里面就充当的是HTTP,但是我也可以说英语XMPP,法语FTP等等来进行对话,只需要对面能听懂就行),也就是把封装好的HTTP再次进行TCP封装构建请求段。在这里插入图片描述
TCP包头中的源端口号是浏览器监听的,目的端口号是服务器监听的端口号,默认是80端口。

4、 TCP包传输给网络层,封装成IP包(在网络层IP协议要将源地址、目的地址包装在IP包中,此外,IP包中还包含了版本、首部长度、服务类型TOS、总长度、标识、标志、片偏移、首部检验和、生存时间TTL等)

5、 IP包传给数据链路层,构建MAC帧(MAC全称 Media Access Control 媒体访问控制),本机MAC直接获得,目标MAC需要用到ARP协议获得。

6、 MAC帧构建完成之后就是网关发送数据在真真实实在网络上传送了,可以通过 wifi,网线,光纤进行数据传播,根据路由算法寻址找到目标IP地址所在的网关。

7、 在目标IP地址所在的网关中将MAC和IP包发送到目标主机的网络层,取下IP和MAC地址看和自己是否匹配。如果匹配,把网络层数据传递给传输层,这时候TCP会向反方向发送确认包,这就是传说中的TCP三次握手,在第3步中有个标志位,发送SYN发起一个新连接,到第7步中发送一个ACK确认信号告诉第4步我已经收到,完成第一次握手。然后再到反方向到到第4步中像第7不发送ACK也进行确认完成第二次握手,最后到第7步中收到确认完成第三次握手,完成TCP的连接。

8、 建立完成TCP连接后,这时候进行端口匹配,将内容发送给HTTP服务,服务器端一般使用nginx、tomcat、apache进行HTTP处理。apache把HTTP传递给PHP,PHP直接使用http信息进行相关业务逻辑的处理,比如用户登录,通过$_POST获取http协议的数据区域里面的username和password,再使用PHP提供的相关函数连接数据库,进行对比后把结果信息再次封装成HTTP协议传输给传输层,沿着之前的网络过程进行数据传输,直到用户浏览器。

9、 用户浏览器接收到服务器的HTTP请求,进行相应的逻辑操作(javascript),和页面展示渲染(html/css)出我们能看到的页面、至此整个网络过程传出完毕。


补充:TCP连接中的三次握手,四次挥手

三次握手
第一次握手:
客户端主机将标志位SYN值设为1,再随机产生一个值为seq=x(J的取值范围为=1234567)的数据包通到各协议层封装传输到服务器,客户端A进入SYN_SENT状态(请求连接状态),等待服务端确认;

第二次握手:
服务端收到数据包后由标志位SYN=1就知道客户端的请求是建立连接,服务端将标志位ACK设为1,再设ack=x+1(这里主要ack与ACK的区分),再随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务端进入SYN_RCVD状态(SYN_RECV是指,服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态)。

第三次握手:
客户端收到数据报后,检查ack是否为x+1,如果正确则令ack=y+1,标志位ACK为1,将该数据包发送给服务端,服务端检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,客户端和服务端进入ESTABLISHED状态(连接成功状态),完成三次握手,随后客户端A与服务端B之间可以开始传输数据了。
在这里插入图片描述
四次挥手
第一次挥手:
客户端进程发出连接释放报文,并停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u

第二次挥手:
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。

第三次挥手:
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

第四次挥手:
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
在这里插入图片描述

参考:
链接:https://www.jianshu.com/p/6533de882211
原文链接:https://blog.csdn.net/weixin_41744192/article/details/105920375
原文链接:https://blog.csdn.net/ali_lili/article/details/90245806
原文链接:https://blog.csdn.net/u010852544/article/details/104950025

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值