浏览器输入「xxxxhub」的背后.....(二)

简介: 到现在为止,我们算是把应用层、运输层、网络层和数据链路层都介绍完了,那么现在是时候把这些内容都串起来,做一个全面的回顾了。那么我这就以 Web 页面的请求历程为例,来和你聊聊计算机网络中这些协议是怎样工作的、数据包是怎么收发的,从输入 URL 、敲击回车到最终完成页面呈现在你面前的这个过程。

ARP 请求

我看了很多篇文章都没有提到这一点,那就是 ARP 请求的这个过程。

什么时候需要发送 ARP 请求呢?

这里其实有个前提条件

  • 如果 DNS 服务器和我们的主机在同一个子网内,系统会按照下面的 ARP 过程对 DNS 服务器进行 ARP 查询
  • 如果 DNS 服务器和我们的主机在不同的子网,系统会按照下面的 ARP 过程对默认网关进行查询

ARP 协议的全称是 Address Resolution Protocol(地址解析协议),它是一个通过用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。

简而言之,ARP 就是一种解决地址问题的协议,它以 IP 地址为线索,定位下一个应该接收数据分包的主机 MAC 地址。如果目标主机不在同一个链路上,那么会查找下一跳路由器的 MAC 地址。

关于为什么有了 IP 地址,还要有 MAC 地址概述可以参看知乎这个回答 https://www.zhihu.com/question/21546408

ARP 的大致工作流程如下

假设 A 和 B 位于同一链路,不需要经过路由器的转换,主机 A 向主机 B 发送一个 IP 分组,主机 A 的地址是 192.168.1.2 ,主机 B 的地址是 192.168.1.3,它们都不知道对方的 MAC 地址是啥,主机 C 和 主机 D 是同一链路的其他主机。

微信图片_20220416162816.png

主机 A 想要获取主机 B 的 MAC 地址,通过主机 A 会通过广播 的方式向以太网上的所有主机发送一个 ARP 请求包,这个 ARP 请求包中包含了主机 A 想要知道的主机 B 的 IP 地址的 MAC 地址。

微信图片_20220416162819.png

主机 A 发送的 ARP 请求包会被同一链路上的所有主机/路由器接收并进行解析。每个主机/路由器都会检查 ARP 请求包中的信息,如果 ARP 请求包中的目标 IP 地址 和自己的相同,就会将自己主机的 MAC 地址写入响应包返回主机 A

微信图片_20220416162823.png

由此,可以通过 ARP 从 IP 地址获取 MAC 地址,实现同一链路内的通信。

所以,要想发送 ARP 广播,我们需要有一个目标 IP 地址,同时还需要知道用于发送 ARP 广播的接口的 MAC 地址。

这里会涉及到 ARP 缓存的概念。

现在你知道了发送一次 IP 分组前通过发送一次 ARP 请求就能够确定 MAC 地址。那么是不是每发送一次都得经过广播 -> 封装 ARP 响应 -> 返回给主机这一系列流程呢?

想想看,浏览器是如何做的?浏览器内置了缓存能够缓存你最近经常使用的地址,那么 ARP 也是一样的。ARP 高效运行的关键就是维护每个主机和路由器上的 ARP 缓存(或表)。这个缓存维护着每个 IP 到 MAC 地址的映射关系。通过把第一次 ARP 获取到的 MAC 地址作为 IP 对 MAC 的映射关系到一个 ARP 缓存表中,下一次再向这个地址发送数据报时就不再需要重新发送 ARP 请求了,而是直接使用这个缓存表中的 MAC 地址进行数据报的发送。每发送一次 ARP 请求,缓存表中对应的映射关系都会被清除。

通过 ARP 缓存,降低了网络流量的使用,在一定程度上防止了 ARP 的大量广播。

微信图片_20220416162827.png

一般来说,发送过一次 ARP 请求后,再次发送相同请求的几率比较大,因此使用 ARP 缓存能够减少 ARP 包的发送,除此之外,不仅仅 ARP 请求的发送方能够缓存 ARP 接收方的 MAC 地址,接收方也能够缓存 ARP 请求方的 IP 和 MAC 地址,如下所示

微信图片_20220416162833.png

不过,MAC 地址的缓存有一定期限,超过这个期限后,缓存的内容会被清除

深入理解 ARP 协议的话,可以参考 cxuan 的这篇文章。

ARP,这个隐匿在计网背后的男人


所以,浏览器会首先查询 ARP 缓存,如果缓存命中,我们返回结果:目标 IP = MAC。

如果缓存没有命中:

  • 查看路由表,看看目标 IP 地址是不是在本地路由表中的某个子网内。是的话,使用跟那个子网相连的接口,否则使用与默认网关相连的接口。
  • 查询选择的网络接口的 MAC 地址
  • 我们发送一个数据链路层的 ARP 请求:

微信图片_20220416162838.png

根据连接主机和路由器的硬件类型不同,可以分为以下几种情况:

直连:

  • 如果我们和路由器是直接连接的,路由器会返回一个 ARP Reply (见下面)。

集线器:

  • 如果我们连接到一个集线器,集线器会把 ARP 请求向所有其它端口广播,如果路由器也连接在其中,它会返回一个 ARP Reply

交换机:

  • 如果我们连接到了一个交换机,交换机会检查本地 CAM/MAC 表,看看哪个端口有我们要找的那个 MAC 地址,如果没有找到,交换机会向所有其它端口广播这个 ARP 请求。
  • 如果交换机的 MAC/CAM 表中有对应的条目,交换机会向有我们想要查询的 MAC 地址的那个端口发送 ARP 请求
  • 如果路由器也连接在其中,它会返回一个 ARP Reply

ARP Reply:

微信图片_20220416162841.png

现在我们有了 DNS 服务器或者默认网关的 IP 地址,我们可以继续 DNS 请求了:

  • 使用 53 端口向 DNS 服务器发送 UDP 请求包,如果响应包太大,会使用 TCP 协议
  • 如果本地/ISP DNS 服务器没有找到结果,它会发送一个递归查询请求,一层一层向高层 DNS 服务器做查询,直到查询到起始授权机构,如果找到会把结果返回。

(上述均来自:https://github.com/skyline75489/what-happens-when-zh_CN#dns

相关文章
|
7月前
|
数据采集 Web App开发 JavaScript
Puppeteer无头浏览器:开启自动化之门,掌握浏览器世界的无限可能
大概还是入门期,我曾用Puppeteer做爬虫工具以此来绕过某网站的防爬机制。近期有需求要做任意链接网页截图,像这种场景非常适合用Puppeteer完成。无头浏览器我已知的还有Selenium。
143 2
Puppeteer无头浏览器:开启自动化之门,掌握浏览器世界的无限可能
|
9月前
|
Web App开发 存储 缓存
浏览器(一)---- 宏观视角下的浏览器
一、简介 1、浏览器进化路线 第一个是应用程序 Web 化 第二个是 Web 应用移动化 第三个是 Web 操作系统化
133 0
|
9月前
|
Web App开发 缓存 JavaScript
浏览器(一)---- 宏观视角下的浏览器(2)
4、从输入URL到页面展示?----导航流程 浏览器进程--主要负责用户交互、子进程管理和文件储存等功能。 网络进程--是面向渲染进程和浏览器进程等提供网络下载功能。 渲染进程--主要职责是把从网络下载的 HTML、JavaScript、CSS、图片等资源解析为可以显示和交互的页面。因为渲染进程所有的内容都是通过网络获取的,会存在一些恶意代码利用浏览器漏洞对系统进行攻击,所以运行在渲染进程里面的代码是不被信任的。这也是为什么 Chrome 会让渲染进程运行在安全沙箱里,就是为了保证系统的安全。
102 0
|
11月前
|
XML JavaScript 前端开发
我对浏览器的浅微认知
作为前端天天和浏览器打交道,怎么能不对其有所了解呢?这两天看了一些浏览器相关的文章,现在简单总结下自己的理解。
|
Web App开发 缓存 网络协议
浏览器输入「xxxxhub」的背后.....(一)
到现在为止,我们算是把应用层、运输层、网络层和数据链路层都介绍完了,那么现在是时候把这些内容都串起来,做一个全面的回顾了。那么我这就以 Web 页面的请求历程为例,来和你聊聊计算机网络中这些协议是怎样工作的、数据包是怎么收发的,从输入 URL 、敲击回车到最终完成页面呈现在你面前的这个过程。
浏览器输入「xxxxhub」的背后.....(一)
|
XML Web App开发 缓存
浏览器输入「xxxxhub」的背后.....(三)
到现在为止,我们算是把应用层、运输层、网络层和数据链路层都介绍完了,那么现在是时候把这些内容都串起来,做一个全面的回顾了。那么我这就以 Web 页面的请求历程为例,来和你聊聊计算机网络中这些协议是怎样工作的、数据包是怎么收发的,从输入 URL 、敲击回车到最终完成页面呈现在你面前的这个过程。
浏览器输入「xxxxhub」的背后.....(三)
|
Web App开发 缓存 前端开发
浏览器工作原理和实践(一)——浏览器
  《浏览器工作原理与实践》是极客时间上的一个浏览器学习系列,在学习之后特在此做记录和总结。
浏览器工作原理和实践(一)——浏览器
|
Web App开发 搜索推荐 程序员
谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!
谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!
280 0
谷歌强烈推荐!浏览器助手,让你的浏览器至少提升10个档次!