• [基础技能] 网络技术——当在浏览器中输入一个网址并按下回车后发生的事情


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

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

    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的渲染布局和绘制步骤等。

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

  • 相关阅读:
    并行编译 Xoreax IncrediBuild
    FreeImage使用
    wxWidgets简单的多线程
    wx菜单栏
    #你好Unity3D#Hierarchy视图监听gameObject点击事件
    #你好Unity3D#Project脚本执行双击资源操作
    Unity3D研究院编辑器之Editor的GUI的事件拦截
    Unity3D研究院编辑器之脚本设置ToolBar
    Unity3D研究院编辑器之不影响原有布局拓展Inspector
    Unity3D研究院之Editor下监听Transform变化
  • 原文地址:https://www.cnblogs.com/yushuo1990/p/5984232.html
Copyright © 2020-2023  润新知