码迷,mamicode.com
首页 > 其他好文 > 详细

输入网址按回车发生什么权威版

时间:2019-03-21 17:27:55      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:域名   标签   系统   节点   建立连接   库函数   失败   mac地址   本机   

面对这个古老典型的笔面试问题,考虑比较周全的人会从键盘按下开始,从键盘电路开始回答,但是题目的本质是在考察网络的基础知识,所以一切都围绕着网络的知识才是最合理的。

 

下面对细节过程做一个总结:

1、回车键按下后,浏览器会对输入的地址数据进行解析:
  1.1、检查输入的URL是http协议,请求资源是对应主机名网站主页。 
  1.2、然后检查浏览器的严格安全传输列表( HSTS列表 ),如果网站在列表中,则浏览器直接使用https协议进行传输,否则直接使用http协议传输,或者先使用http协议向网站服务器发送一个请求,服务器返回浏览器只能以https协议进行,则接下来仍然只以https协议来进行传输。
  1.3、然后检查输入地址中是否有非ASCII码的unicode字符,如果有的话进行字符转换。
  1.4、当协议或主机名不合法时,浏览器会将地址栏中输入的内容传递给默认的搜索引擎。

2、然后进行DNS递归查询
  2.1、DNS查询过程中,首先在缓存中进行查询,找到直接返回结果否则
  2.2、再使用gethostbynme库函数进行查询,库函数查询过程中,首先到hosts中进行检查,查看域名是否在本地hosts文件中,找到直接返回结果,如果没有记录且库函数查询也没有记录则
  2.3、以上查询均未果,则会向DNS服务器发送一条DNS查询请求。查询DNS服务器通常是在本地路由器或者ISP的缓存DNS服务器上进行,如果对应记录存在,则返回该映射地址,并且该地址会被标记为非权威服务器应答标签,如果对应记录不存在,则会递归向高层 DNS 服务器做查询,直到返回最终结果。
  2.4、如果DNS查询失败,则返回无法解析DNS地址,停止,否则浏览器根据查询到的对应ip地址进行下一步操作,即使用套接字进行数据访问。

3、使用套接字进行数据访问
  3.1、浏览器获得目标IP地址,以及URL中给出的端口号(http 协议默认端口号是 80, https 默认端口号是 443),调用系统库函数socket,请求一个TCP流套接字。
  3.2、该请求首先被交给传输层,封装成TCP segment,然后被送往网络层,添加目标服务器IP地址以及本机的IP地址,封装成TCP packet,再接下来会进入链路层,在封包中加入frame头部,包含本机网卡的MAC地址和网关MAC地址等,形成最终的TCP封包。
  3.3、TCP封包完成之后,会通过以太网等网络进行传输到目标地址。

4、建立TCP连接
  建立TCP连接会进行三次握手的过程,然后进行发送HTTP请求过程和接收过程。
  4.1、进行三次握手,首先向服务器发送一个syn报文,其中syn=1,seq number=1022(随机);
  4.2、服务器接收到syn报文,根据syn=1判断客户端请求建立连接,并返回一个syn报文,为第一次握手,其中ack number=1023(客户端seq number+1),seq number=2032(随机),syn=1,ack=1;
  4.3、客户端根据服务器的syn报文,确认其ack number是否与上一次发送的seq number+1相等,且ack=1,确认正确,则回应一个ack报文,为第二次握手,即ack number=2033(服务器seq number+1),ack=1,
  4.4、服务器根据接收到的ack报文,确认ack number是否与上一次发送的seq number+1相等,并且ack=1,确认正确,则建立连接,进入Established状态,为第三次握手。
  4.5、建立TCP连接后,会使用HTTP协议发送HTTP的GET请求,服务器处理请求返回资源数据。

5、浏览器处理数据
  5.1、再接收到所请求的资源之后,浏览器会对接收到的html、css、js等数据根据标准格式进行解析。
  5.2、然后会通过构建和遍历DOM节点树,进行各个节点的渲染计算,最后进行GPU的渲染布局和绘制步骤等。

 这大致是一个以网络内容为核心的整体的处理过程。

输入网址按回车发生什么权威版

标签:域名   标签   系统   节点   建立连接   库函数   失败   mac地址   本机   

原文地址:https://www.cnblogs.com/myiuni/p/10572818.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!