解析
hello ⼤家好,我是 up主黎明⾲菜
今早我正打开b站刷剧,突然想到了⼀个问题:
我们在浏览器⾥输⼊ bilibili.com 的时候,电脑是怎么找到b站的呢?
上篇TCP/IP协议的 视频⾥说过,⽹络请求是根据 ip 地址进⾏访问的
⽽只输⼊了b站域名的我们
为什么电脑不会给我们打开 a 站、c 站,抑或是⼀些奇怪的站点呢?
我带着好奇⼼百度了⼀下,我搜到了莆⽥精神病院的联系⽅式
哦不,是这个问题的答案
整个过程就像罗⽼师让我打个电话给张三,提醒他去抄下作业
因为张三只要能抄的作业绝不⾃⼰做,但今天他抄都懒得抄了
这⾥罗⽼师就相当于⽤户,或者是浏览器
负责联系张三这个泼⽪的我们就相当于操作系统
⽽电话号码就相当于IP地址
那么要找到张三这个泼⽪,我先打开了⼿机通讯录,也就是电脑本地的host⽂件
这时我突然意识到:本帅哥怎么会留泼⽪的电话呢?
所以我只能再看看通话记录,也就是本地DNS解析器缓存⾥有没有他电话
卧槽,我昨天刚通话记录清空了
没办法,怎么办呢?
我智能打开微信聊天记录,也就是本地DNS服务器看看能不能查到他的电话
然⽽平⽇⾥⾼冷的我并没有⼏条聊天记录
我只能去找班⻓,也就是根域名服务器求救,让她康康有没有张三联系⽅式
这回找对⼈了,班⻓让我联系下评奖学⾦的吴签⽼师
没错有的⼈天天抄作业照样考第⼀,想到这我就流下了⼼酸的泪⽔
这⾥吴签⽼师就相当于顶级域名服务器
我给吴⽼师发了个短信,他果然秒回了我⼀个奖学⾦评选Excel
还附带了⼀张可爱的图⽚
哎,男孩⼦在外⾯要保护好⾃⼰
这⾥的奖学⾦ Excel 就相当于权限域名服务器
果然在⾥头找到张三的电话,也就是bilibili 的 ip 地址
我赶紧给他打了过去,结束这要命的⼀天
总结
这个在浏览器中输⼊地址的流程,其实也就是DNS的⼯作流程
简单的总结一下:
第一步:在浏览器中输入www.bilibili.com域名,操作系统会先检查自己本地的hosts文件
是否有这个域名的映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
第二步:如果hosts文件中没有,则查询本地DNS解析器缓存,如果有,则完成地址解析。
第三步:如果本地DNS解析器缓存中没有,则去查找本地DNS服务器,如果查到,完成解析。
第四步:如果没有,则本地服务器会向根域名服务器发起查询请求。
根域名服务器会告诉本地域名服务器去查询哪个顶级域名服务器。
第五步:本地域名服务器向顶级域名服务器发起查询请求
顶级域名服务器会告诉本地域名服务器去查找哪个权限域名服务器。
第六步:本地域名服务器向权限域名服务器发起查询请求
权限域名服务器告诉本地域名服务器www.bilibili.com所对应的IP地址。
第七步:本地域名服务器告诉主机www.bilibili.com所对应的IP地址。
其中本地域名服务器,也就是⼿机本地的通讯录、历史信息的查询过程,⼀般采⽤递归查询
⽽向根域名服务器请求,也就是吴⽼师的查询则采⽤的迭代查询
简单来说,递归查询就是:
小明问了小红一个问题,小红不知道,但小红是个热心肠,小红就去问小王了
小王把答案告诉小红后,小红又去把答案告诉了小明
迭代查询就是:
小明问了小红一个问题,小红也不知道,然后小红让小明去问小王
小明又去问小王了,小王把答案告诉了小明
很多时候协议的设计都和我们的⽣活息息相关
信息技术源于⽣活,却⼜在⽆时不刻的影响着我们的⽣活
这就是我们在浏览器输⼊URL后的全部内容了
谢谢⼤家观看,我是up主黎明⾲菜
参考文献:https://segmentfault.com/a/1190000038526729