[计算机网络] 从输入网址到返回页面中间经历了什么

1. URL 解析

首先浏览器判断该URL是否是合法的URL。如果是合法的,就生成http请求报文。

2. DNS 解析

DNS解析就是将地址栏的域名转化为IP地址

DNS 寻址过程
  1. 在浏览器中输入 www.qq.com 域名,操作系统会先检查自己本地的 hosts 文件是否有这个网址映射关系。
  2. 如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。
  3. 如果本地DNS服务器的缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询。
  4. 根DNS服务器没有记录具体的域名和IP地址的对应关系,而是收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个 IP。本地 DNS 服务器收到 IP 信息后,将会联系负责.com 域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com 域的下一级 DNS 服务器地址(qq.com)给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 qq.com 域服务器,重复上面的动作,进行查询,直至找到 www.qq.com 主机。
  5. 本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

3. TCP 连接

通过三次握手和目标进程建立连接之后,将报文段交给网络层进行传输。

4. HTTPS请求要执行TLS握手

  1. 客户端先发送支持的TLS版本,认证算法,加密算法,数据校验算法,还有一个随机码
  2. TLS服务器进行确认,确定使用的TLS版本,认证、加密和校验算法,也附带一个随机码以及证书
  3. 客户端解析证书拿到服务器的公钥,并用公钥发送一个随机字符串给服务器
  4. TLS服务器用私钥解密,用上述的三个随机码作为整个会话过程的密钥

5. 添加IP首部和MAC首部

首先需要将传输层传递来的报文段再封装为数据报,加上IP首部,

如果本机有多个网卡,那应该选用哪个?
这时候可以使用路由表来查询,通过目的地址(Destination) 和子网掩码(Genmask) 进行与操作得到地址和目标地址匹配,如果能匹配的上,则使用该IP,如果不能匹配则使用0.0.0.0的默认路由。

如此操作就生成了IP数据报并传递给链路层。
链路层将IP数据报加上MAC首部:

MAC首部主要包括发送方MAC地址,以及接收方MAC地址和协议字段。

接收方mac地址获取
  1. 先向高速缓存中查询是否有目标IP地址对应的MAC地址,如果没有。
  2. 向同一链路广播一个ARP请求包,内容包括本机的IP地址以及目标主机的IP地址。
  3. 如果某个路由器有去往该IP的路由规则,或者某台主机IP地址就是目标IP地址,就会发回一个ARP响应包,内容是需要发送的MAC地址。
  4. 源主机收到响应包会将MAC地址写入接受方MAC地址字段,并将该MAC地址存入高速缓存。

在这里插入图片描述

6. 网卡

IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输

网卡驱动获取到链路层帧之后,将其复制到网卡内的缓冲区,并在开头加上报文头和起始帧分隔符,尾部加上FCS帧校验序列。
在这里插入图片描述

都完成之后,再将数据包转换成电信号,通过网线传输出去。

7. 交换机

电信号到达网线接口,由交换机进行接收,并且把其中的电信号转换成数字信号。再通过校验检测是否出错,如果没错,则放入缓冲区。

另外由于交换机自学习的特性,它会将传送来的接口以及MAC地址做一个记录在MAC地址表中。

再通过查询MAC地址表,将收到的分组传递到应该去的接口上。

如果地址表中找不到指定的 MAC 地址。交换机只能将包转发到除了源端口之外的所有端口上

8. 路由器

网络包经过交换机之后,现在到达了路由器,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。接收之后路由器就会去掉包开头的 MAC 头部。

然后根据包的接收方 IP 地址查询路由表中的目标地址栏找到下一跳路由的ip,并查询ARP或者广播找到路由的MAC地址,并添加MAC头部

在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC地址在以太网内进行两个设备之间的包传输。

9. 目标服务器

当数据报达到目标=服务器之后,服务器就会对数据包进行一层一层的扒皮:

  1. 检查MAC首部中目的MAC地址和自己的MAC地址是否匹配。然后去除MAC首部。
  2. 检查IP地址是否匹配然后去除IP首部。
  3. 检查TCP首部序号是否对应等,再通过TCP首部的端口号,分发到对应进程。
  4. HTTP进程收到请求之后,将需要返回的数据封装在响应报文中,并返回,返回的过程就是上述过程的逆向,一层一层封装首部,从网卡发出,交到交换机手上并发给路由器,由路由器转发对目标地址对应的交换机,再由交换机转发到客户端。
  5. 客户端收到响应报文后,浏览器渲染页面。

10. 浏览器解析渲染页面

以webkit的渲染过程为例。过程包括:

解析html以构建dom树 -> 构建render树 -> 布局render树 -> 绘制render树:

在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。比如图片,CSS,JS文件等,这些地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…

不像动态页面,静态文件会允许浏览器对其进行缓存。有的文件可能会不需要与服务器通讯,而从缓存中直接读取,或者可以放到CDN中

引用
作者:小林coding
链接:https://www.zhihu.com/question/34873227/answer/1657140394 来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值