2.3.6 ARP协议
MAC地址具有唯一性,所以数据在局域网里最好要通过MAC地址进行传输,设计上也是如此,因此在发送数据之前,你的电脑必须要知道:这个IP对应的MAC地址是什么?
ARP(Address Resolution Protocol)就是用来完成这个“IP对应到MAC”的查询工作。
它的方式很简单——就是广播。
在课堂上,新来的老师不知道每个人的姓名,于是用点学号让人起来回答问题的方式来熟悉每个人。同样的,电脑会在局域网里大声喊:“谁是192.168.1.x?请告诉我你的MAC地址!”
只有拥有这个IP地址的设备就会回应自己的MAC地址。 你的电脑随后把结果记录进ARP缓存,避免每次都重新询问。
ARP 缓存大致如下:
| IP 地址 | MAC 地址 | 有效期(秒) |
|---|---|---|
| 192.168.1.1 | aa-bb-cc-dd-ee-ff | 120 |
| 192.168.1.8 | 11-22-33-44-55-66 | 120 |
ARP只在同一局域网内起作用。
当你访问公网(比如百度服务器的IP),它不在你的局域网里,你的电脑不会去查它的 MAC,而是只需要找到路由器的 MAC 地址,把数据交给路由器,由它继续转发。
3 如何访问到一个网站?
前面的部分我们讲了宽带背后的秘密:公网、内网、DHCP协议、IP地址等等。我想大家看到了这么多的术语,脑袋也许已经被绕晕了,但是学习的过程就是如此,当我们真正理解一个事物之后才会知道其中的乐趣。
接下来进入第三章,在宽带配置完成后,你肯定已经迫不及待地打开短视频或者聊天软件,在这个过程中,呈现在你眼前的是立刻弹出的图片视频或消息,但这背后也有着复杂而难以理解的东西正在运作。
我们以一个简单的例子来看:你打开浏览器,输入www.baidu.com,成功看见百度搜索框。这一个流程大致可以分为请求IP地址、获取IP地址、网页数据传输、页面渲染。由于后面两个涉及的不属于家庭网络的范畴,因此下面不做赘述。
3.1 请求IP地址与获取IP地址
不知大家是否记得,计算机是如何标记自己的呢?没错,是用IP地址!但我们在浏览器网址栏输入的是www.baidu.com,这根本不是一串计算机能直接识别的地址。
我们输入的是我们能懂的网址,可计算机只认数字格式的 IP 地址。那它怎么从 www.baidu.com 这个字符串找到对应的服务器呢?
这里就轮到网络世界中非常关键的角色——DNS(Domain Name System,域名系统)登场了。
其实互联网刚起步的时候,我们访问网站是需要输入IP地址的,但是很麻烦,根本记不住,所以才设计了这个系统。
你可以把 DNS 理解成互联网里的“通讯录”。名字最好记,当你只能记得某人的名字但忘了电话号码时,你会查电话本; 电脑只知道域名、不知道 IP 时,它就会去查 DNS。
3.1.1 DNS 查询:互联网的通讯录
DNS查询不是简单一句话的事,它背后有一套由缓存、服务器层级组成的完整流程。
3.1.2 本地有没有缓存?
当你输入网址时,浏览器会先查询本地的缓存记录:
“我以前访问过吗?我记得它的 IP 吗?”
- 如果浏览器缓存里有,那它会直接使用,不用进行DNS查询。
- 如果浏览器没有,它会继续问操作系统缓存(hosts文件)。
如果还没有答案?那就要去问一下更专业的角色了。
3.1.3 询问最近的DNS服务器
在家庭网络中,电脑通过DHCP自动得到一个DNS 地址(通常路由器的IP地址)。
当缓存里都找不到记录时,电脑会把问题丢给DNS服务器,我们说过路由器有很多功能,其中一个功能就是可以作为小的DNS服务器,此时电脑会构造一个DNS请求发给路由器:
“请问,
www.baidu.com的 IP 地址是什么?”
路由器DNS的工作方式就好比是一个“信息中转站”,它帮忙转发给更高层的DNS服务器,一般是运营商提供的,也可以自己设置。
3.1.4 DNS 是如何找到答案的?
DNS也有层级结构,就像办事要按部门流程走一样:
- 根DNS服务器(Root):互联网域名的最顶层,全球现在有11台。
- 顶级域 DNS(TLD):例如
.com,.cn。 - 权威DNS(Authoritative):真正保存某个域名对应IP的地方。
简要过程如下:
- 运营商DNS去问根服务器:“我要找
www.baidu.com!” - 根服务器回应:“我不管具体域名,但
.com去问那边。” - 运营商转去问
.com的 TLD:“兄弟,我要baidu.com的信息。” - TLD 回答:“去找它的权威 DNS。”
- 权威 DNS 最终给出结果:“IP 是 110.242.68.3。”
- 运营商DNS把答案缓存,再返回给你的电脑。
一般情况主流的域名在运营商的DNS服务器会有缓存,不用完整的走一遍流程,这整个请求流程只有几十毫秒。当然上面看不懂也没关系,只需要了解即可。
3.2 获取IP 地址之后
当电脑拿到百度服务器的 IP,它终于知道请求该发往哪里。就像你终于知道朋友的电话号码,可以直接拨过去聊天一样。
接下来浏览器会向这个 IP 发起 HTTP/HTTPS 请求,服务器则会把网页的 HTML、CSS、JS 和图片等数据分段发送回你的电脑。
后续还涉及:TCP的三次握手、TLS加密、数据分片与重组等等
这已经进入更深的互联网通信层了,不属于家庭网络范畴,所以本章不展开。
3.3 小结
整个访问流程其实就是这样,可以看着流程图回忆一下:
输入域名 → DNS查询 → 得到IP地址 → 发起请求 → 服务器返回数据 → 浏览器渲染页面
你看似只是输入了一个网址,但背后已经走完了一整套复杂的流程。而这都在一瞬间发生。
未完待续