《网络是如何连接的》DNS篇总结

  DNS:

我们知道,浏览器中输入域名后,浏览器会生成HTTP格式的请求,操作系统的协议栈会把请求发送给最近的DNS服务器,该DNS服务器存着对照表,一个域名对应一个IP地址,查到之后再返回给我们的操作系统,浏览器应用程序再从操作系统拿到IP地址。

那么,DNS服务器的机制是怎么设计的呢?首先,全世界又非常多的服务器,每个服务器对应一个域名的话,不可能一个DNS服务器能把全世界所有的域名-IP地址映射都存下来。我们知道域名越往右边表示域的层级越高,而DNS中通常只存一个域的信息,所以DNS服务器逻辑上和域名一样存在层级结构。负责管理下级域的DNS服务器IP地址会被注册到上级域中,上级域的IP地址信息会被注册到更上一级的DNS服务器中。举个例子,www.baidu.com这个域名,负责管理baidu.com这个域的DNS服务器IP地址会存在管理.com这个域的DNS服务器中,管理.com这个域的DNS服务器ip地址会被保存到根域DNS服务器中,所有的DNS服务器在配置的时候一般都会保存根域的IP地址,方便用户在第一次访问最近的DNS服务器没查到需要的IP地址时,直接访问根域DNS服务器,方便顺藤摸瓜一路往下查,具体步骤就是:一开始,我们想访问www.baidu.com,最近的DNS服务器中没有百度的IP地址,就会直接访问根域DNS,根域中当然也没有,但是他会返回管理.com这个域的DNS服务器ip地址,好像在说“虽然我不知道,但是你可以问管.com这个域的dns”,然后,最近的DNS就去访问管com域的DNS服务器,这时候这台DNS中保存了百度的IP地址,就可以返回给最近的DNS了。

当然,现实中很多时候一个DNS服务器可能管理着多个域的信息,而且会通过缓存机制来加快响应。如果一个域名之前被访问过,那么相关信息会被存储到最近的DNS中,包括一些查询错误的域名,也会被记录,再次查找会直接返回无响应。但是,有时候这种机制会出错,因为当该域名的注册信息发生改变时,缓存里存的可能是一些过时的无效信息,所以有一个有效期,过了这个有效期,缓存会自动删除相关的信息,此外,对查询请求进行响应的时候,DNS也会告知该信息是来自于缓存还是管理对应域名的DNS服务器。

域名转化为IP地址的原因:四个字节的IP地址容易处理,存储转发都方便。(没有什么是加一层解决不了的)
子网掩码 = 网络号(all 1)+主机号(all 0)  主机号全0 = 这个子网 全1 = 发广播


DNS查到域名对应的IP地址之后,浏览器要委托OS的协议栈创建套接字,因为把套接字连接之后要创建的管道,再连接服务器的套接字,在服务器处于等待状态时才可以通信,通信是在一个类似管道的机制里进行的。通信完成之后,删除套接字,断开管道。这个过程都需要调用OS的Socket库里面的多个程序组件。

DNS的出现既方便了人不用记IP,又方便了网络传输的迅捷。
用OS socket库里面的解析器组件生成查询消息,OS协议栈向DNS发查询请求,DNS发回协议栈IP地址,然后返回给解析器,解析器再返回给浏览器,再把IP地址写入对应的内存。DNS会从保存的记录里查找域名对应的IP地址。

套接字就是内存里一些控制信息(对方IP 端口 本机IP 端口 连接状态等)。协议栈要根据这些信息来决定操作,比如长时间没收到响应,就会重发。

socket组件创建套接字,协议栈返回描述符给浏览器,用于内部区分套接字,然后调用connet组件来进行连接管道,需要知道对方的IP,客户端套接字描述符,对方的端口号(一般已经规定好,如web服务器通信一般是80端口)
也就是通信需要双方的IP,端口号,规定好协议,才能唯一确定跟哪个机子上的哪个程序互动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值