从输入 url 到页面加载完成的过程中都发生了什么事情?(总结)



1、输入url,按回车,专用于回车键的电流回路被直接或者通过电容器闭合了,使得少量的电流进入了键盘的逻辑电路系统(这个系统会扫描每个键的状态,对于按键开关的电位弹跳变化进行噪音消除(debounce),并将其转化为键盘码值。在这里,回车的码值是13。键盘控制器在得到码值之后,将其编码,用于之后的传输。)
2、 浏览器根据url可以知道使用的协议和请求的资源(当协议或主机名不合法时,浏览器会将地址栏中输入的文字传给默认的搜索引擎。大部分情况下,在把文字传递给搜索引擎的时候,URL会带有特定的一串字符,用来告诉搜索引擎这次搜索来自这个特定浏览器。)
3 、检查HSTS列表(浏览器检查自带的“预加载HSTS(HTTP严格传输安全)”列表,这个列表里包含了那些请求浏览器只使用HTTPS进行连接的网站。如果网站在这个列表里,浏览器会使用HTTPS而不是HTTP协议,否则,最初的请求会使用HTTP协议发送)
4、浏览器检查域名是否在缓存当中。
5、如果没有缓存,就检查host文件是否有相应的映射
6、如果host文件也没有指向,则请求相应的DNS服务器。
7、如果DNS服务器和发请求的主机在同一子网,则对DNS服务器进行ARP查询,如果不在同一子网,则对默认网关进行查询。
8、有了DNS服务器或者默认网关的IP地址,可以继续DNS请求(使用53端口向DNS服务器发送UDP请求包,如果响应包太大,会使用TCP。如果本地/ISP DNS服务器没有找到结果,它会发送一个递归查询请求,一层一层向高层DNS服务器做查询,直到查询到起始授权机构,如果找到会把结果返回)
9、 浏览器得到了目标服务器的IP地址,以及URL中给出来端口号(http协议默认端口号是80, https默认端口号是443),它会调用系统库函数 socket ,请求一个TCP流套接字。(这个请求首先被交给传输层,在传输层请求被封装成TCP segment。目标端口会会被加入头部,源端口会在系统内核的动态端口范围内选取。TCP segment被送往网络层,网络层会在其中再加入一个IP头部,里面包含了目标服务器的IP地址以及本机的IP地址,把它封装成一个TCP packet。这个TCP packet接下来会进入链路层,链路层会在封包中加入frame头部,里面包含了本地内置网卡的MAC地址以及网关(本地路由器)的MAC地址。如果内核不知道网关的MAC地址,它必须进行ARP广播来查询其地址。)然后传输TPC封包。(方式:WIFI、以太网、蜂窝数据网络)
10、 一般,封包会从本地计算机出发,经过本地网络,再通过调制解调器把数字信号转换成模拟信号,使其适于在电话线路,有线电视光缆和无线电话线路上传输。在传输线路的另一端,是另外一个调制解调器,它把模拟信号转换回数字信号,交由下一个网络节点处理。(大型企业和比较新的住宅通常使用光纤或直接以太网连接,这种情况下信号一直是数字的,会被直接传到下一个网络节点进行处理。)最终封包会到达管理本地子网的路由器。然后继续经过自治区域的边界路由器,其他自治区域,最终到达目标服务器。(一路上经过的这些路由器会从IP数据报头部里提取出目标地址,并将封包正确地路由到下一个目的地。IP数据报头部TTL域的值每经过一个路由器就减1,如果封包的TTL变为0,或者路由器由于网络拥堵等原因封包队列满了,那么这个包会被路由器丢弃。)
11、服务器响应请求,提供资源。(ps:不具体展开了,看底部网址可以大致了解)
12、当服务器提供了资源之后(HTML,CSS,JS,图片等),浏览器会执行下面的操作:
 ~解析 HTML,CSS,JS
 ~渲染——构建 DOM 树 -> 渲染 -> 布局 -> 绘制   
页面显示完毕


补充:
ARP(Address Resolution Protocol)
  要想发送ARP广播,我们需要有一个目标IP地址,同时还需要知道用于发送ARP广播的接口的Mac地址。
首先查询ARP缓存,如果缓存命中,我们返回结果:目标IP = MAC
  如果缓存没有命中:
查看路由表,看看目标IP地址是不是在本地路由表中的某个子网内。是的话,使用跟那个子网相连的接口,否则使用与默认网关相连的接口。
查询选择的网络接口的MAC地址
我们发送一个二层ARP请求:
  ARP Request:
Sender MAC: interface:mac:address:here
Sender IP: interface.ip.goes.here
Target MAC: FF:FF:FF:FF:FF:FF (Broadcast)
Target IP: target.ip.goes.here
  根据连接主机和路由器的硬件类型不同,可以分为以下几种情况:
  直连:
如果我们和路由器是直接连接的,路由器会返回一个 ARP Reply (见下面)。
  集线器:
如果我们连接到一个集线器,集线器会把ARP请求向所有其它端口广播,如果路由器也“连接”在其中,它会返回一个 ARP Reply 。
  交换机:
如果我们连接到了一个交换机,交换机会检查本地 CAM/MAC 表,看看哪个端口有我们要找的那个MAC地址,如果没有找到,交换机会向所有其它端口广播这个ARP请求。
如果交换机的MAC/CAM表中有对应的条目,交换机会向有我们想要查询的MAC地址的那个端口发送ARP请求
如果路由器也“连接”在其中,它会返回一个 ARP Reply
  ARP Reply:
Sender MAC: target:mac:address:here
Sender IP: target.ip.goes.here
Target MAC: interface:mac:address:here
Target IP: interface.ip.goes.here
 


2、53端口
DNS服务器所开放的端口,入侵者可能是试图进行区域传递(TCP),欺骗DNS(UDP)或隐藏其他的通信。因此防火墙常常过滤或记录此端口。 




3、三次握手
客户端选择一个初始序列号(ISN),将设置了SYN位的封包发送给服务器端,表明自己要建立连接并设置了初始序列号
服务器端接受到SYN包,如果它可以建立连接:
服务器端选择它自己的初始序列号
服务器端设置SYN位,表明自己选择了一个初始序列号
服务器端把 (客户端ISN + 1) 复制到ACK域,并且设置ACK位,表明自己接收到了客户端的第一个封包
客户端通过发送下面一个封包来确认这次连接:
自己的序列号+1
接收端ACK+1
设置ACK位
数据通过下面的方式传输:
当一方发送了N个Bytes的数据之后,将自己的SEQ序列号也增加N
另一方确认接收到这个数据包(或者一系列数据包)之后,它发送一个ACK包,ACK的值设置为接收到的数据包的最后一个序列号
关闭连接时:
要关闭连接的一方发送一个FIN包
另一方确认这个FIN包,并且发送自己的FIN包
要关闭的一方使用ACK包来确认接收到了FIN  
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值