当前课程知识点:互联网体系结构 > 第七周:DNS协议及域名存储与解析 > DNS域名解析过程分析 > Video
这是根域名服务器
那我们再来看一下
它的用法就是使用
他需要就是include两个头文件
他这里边
他的整个的函数原型是这样
他有个struct hostent这么一个数据结构
那就返回这么一个数据结构的指针,他的参数
它的输入呢
就是域名
然后他返回的就是
这个这个函数的传入值的是域名或者主机名
传出值是一个hostent的结构
对我们看一下这个hostent的结构
实际上它的返回值就是用来存储我们的IP主机的,IP地址的
还有主机的规范名
主机的别名
然后呢
就是主机IP地址的类型到底是IPv4还是IPv6是吧
类型还有主机IP地址的长度
地址长度
这边有主机的IP地址是网络自己去存储的
他有一个地址的列表
有存储这个返回的值的,这地方有一个很简单的这个域名,就是使用的这个代码,简单的范例代码
我们就是查询假如github.com
域名
域名他查询出来之后
我就把他的hostent结构里面的name
然后呢
和他这个addr list
就是IP地址列表里面的把它都打印出来
但是我们就可以看到github.com对应的IP地址啊
只是一个简单的用法
实际上
我们浏览器再就是在访问一个网页的时候
他是首先要把这个网址上的域名解析成IP地址
然后才发出一个http请求对吧
然后再发出来
然后再把
这个http请求才能发送到这个
互联网上
那就是DNS的解析过程是比较复杂的
也就是说我们在逻辑上简单梳理一下
比如说浏览器
它要访问一个网址对吧
有网址
那么他首先呢
这个就是浏览器
它需要
把这个域名需要先解析成IP地址
解析成IP地址呢
他首先查询本地
他有两种一个是hosts对吧
他会查询那个静态映射
但是那就是PC也可能对这个域名
那他有有缓存机制短也就是之前反映过它的缓存机制
嗯
然后就是如果在这没找到的话
在本机没有找到的话
那么那他就把它发送一个DNS请求
通过UDP协议发送一个DNS请求给本地的也就说
我们这个主机在配置的时候我们一般都配置了几个关键的选项的吧
一个是IP地址的吧
一个是网关对吧,网关的我们前面都分析过了
就是加一个网关的话
实际上就是默认路由的网
我们让IP包能够发送出去,那还有一个呢
就是DNS server对吧
DNS server往往会有两个
一个是主DNS server
一个是从DNS server
我们在配置这个DNS服务器的时候
他往往也是双机备份
正常情况下是双机备份
当然
越是顶级的域或者是根域
他就有很多个备份的吧
根域有十几二十几个的吧
光主要的服务器就至少13台
还有其他的镜像服务器对吧
也就是说
他是很多台服务器备份来了
但是一般的就是域名服务器
一般的域名服务器
他都至少会有两台服务器主服务器和从服务器两台互相备份
因为就是DNS作为一个基础设施
他一般宕机了
就会影响很多互联网上的业务就没法开展了
对吧
因为大多数现在我们都是习惯于,不只是人脑喜欢用域名
我们的很多代码中也不写
不是直接用IP地址了
也都是
都是通过域名方式
那么这时候的他是通过UDP协议发送了一个DNS请求对吧
这个呢
就是这是PC和DNS server的非递归的一个调用一个返回对吧
一定要有返回
但是在本地这个DNS server
他会查询几个
他会做哪些东西
如果这个域名就是这个DNS server所管辖的域的话
那么他只需要查询他自己的域名数据库就可以了
对吧
但是呢
就是很多情况下都不是他本地的域
因为它就是可能很多地方还不是管理的
他本地域
我们这个就是
他还有一个域名缓存
也就是我这个域名服务器就是服务的这个网络
那大家都经常访问的网址就是域名
那么他会在本地建立缓存
这样呢
他就不需要到其他的域名服务器上来查询了对吧
因为我已经缓存过了
他就可以直接回送
得了一个DNS响应就是通过UDP协议的一个响应
给把IP地址给他就好了是吧
但是这次如果是这个域名的
是第一次被访问
我这没有缓存
我查不到这个DNS服务器了
就会想办法通过他背后有一套系统对吧
背后有一套支撑
就是分布式的支撑的一套域名系统
它就要想办法查,想办法查怎么办呢
哎
就是他查
可能就是说我们就是输入的网址
可能是任意一个网址
在全球范围内任意一个网址
它到哪里去查呢
对吧
每一台域名服务器
它只管理他自己的那个域
那我就是要查的话怎么办呢
他有一个叫做递归查询的方式
因为每一个DNS服务器
他都知道根在哪里对吧
但他不知道这个域名具体在哪里
但是他知道根在哪里
就像我们在就是unix类的就是文件系统里面对吧
我们可能在他的目录层级,树型的目录很复杂
我不知道这个目录在哪里
但是我知道先找了根
然后再找到
就是先找根目录
然后再找下面的子目录,一层一层的找的吧
一层层找
那么我们这个域名的就是这么来定义的,它的根是就是明确的
是吧
它的根是明确的
但是顶级域
还是其他的顶级域对吧
那我们这儿呢
就是以就是科大的主页为例
科大为例
那么他首先呢
去DNS server到根DNS查询CN这个顶级域的
那么这个根就是域名服务器
那就告诉他哦
CN域的管理权限就是,CN域下面存储的域名数据库都在这个CN域的DNS server上
然后他就返回给他了
一个CN域的DNS server的IP地址是吧
嗯
然后呢
他通过这个IP地址呢
再到cn域
DNS server上查询edu域
他这个cn域的DNS server
那就返回给他一个IP,edu域
下面的这个
域名都存储在edu域,返回他一个IP地址
这时侯那边再去查询
再到这个edu.cn的DNS server上去查询USTC
对应的就是信息对吧
这些信息他到USTC上
然后他就返回了
一个ustc.edu.cn域服务器DNS服务器
这时候
本地server再到ustc.edu.cn和域名服务器查询
对应的主机的IP地址对吧,3W对应的
这样ustc.edu.cn域
他就负责管理着这个域下面的所有的子域或者是主机对吧
那么他一查
这个3W就对应着一个主机的IP地址
他就回给他了一个主机IP地址
这时候,本地就查询到了3W对应的主机IP地址就返回给PC
所以呢
一般来讲
从这个过程来讲
我们要访问一个陌生的IP
就是域名的话
他第一次访问往往会相对比较慢一些
因为这个域名解析就需要这个递归查询好几次对吧
所以那他就是我们访问往往会感觉慢一点
你再次打开的时候就发现会快了
因为他被缓存下来了
对吧
这是DNS的解析过程
我们简单地从逻辑上怎么来理解
那么就是实际上DNS呢
就是他是一个应用层协议
它是使用UDP socket对吧
实际上我们也可以以DNS为例
来梳理一下整个Linux内核的网络协议栈他的工作机制
这个那也作为一个作业
大家可以分析一下我们这我们这儿的简单的给大家
就是梳理一下分析的
哪些环节
那如果我要就是分析
就是DNS解析的过程呢
但你首先要就是
通过socket 53号端口
你绑定了,socket api绑定了53号端口
然后呢
这里边呢
你在这个用户层通过socket api
发送和接收,发送DNS请求,接收DNS的响应
DNS server回来的响应
这是
然后呢
就是第二步呢
就是我们通过系统调用陷入内核,之后呢
就对应着两个系统
就是系统调用的处理函数
最终他们会调用,就是两个函数指针
这个就是在我们在那个内核代码
里面都可以查询到
但是这两个函数指针就是我们之前的分析
TCP的时候
它对应着TCP协议栈的两个函数对吧
那这里呢
他就是对应在UDP里面的
相对于TCP来讲
要简单的多
大家可以应该能够找到
在UDP协议里面
我们能找到这两个函数指针
对应的
我们应该可以找到这两个之后呢
那么分析的过程就和我们前面TCP里面分析
他在就是TCP层做的哪些工作
我们这地方那就可以分析
在UDP协议内
他做了哪些工作
他是怎么样是在发送的过程中还是怎么样发送的
接收的过程中是怎么接收的
对吧
他就可以一层一层的像IP协议栈的
路由选择数据收发
二层数据链路层和设备驱动程序中的数据收发等等
一层层对应下来
就和我们前面分析那个TCP的方式是比较类似
这里面可能的关键点就是一个函数指针在哪里
被挂载被初始化的还有
那就是在哪里被使用了队列号入队出队的都是这两种方式的机制
可能都是我们需要重点关注的东西
所以呢
到这里呢
到这里
我们就把就是整个互联网体系结构里面关键的东西
关键的东西
都梳理了一下
对吧
我们只是选择了几个关键的协议
对吧
就是从应用层,基础设施域名体系对吧
我们刚刚这一部分
然后呢
呃
他在互联网上就是传输层和网络层
它是就是互联网的核心了吧
互联网的核心
他这边的涉及到路由表的吧
IP和路由表
还有就是IP地址解析和IP缓存对吧
他就依靠这些数据
他才能有效地工作起来
然后呢
再就是二层链路层上他有这个学习和转发过滤数据库
它可以就是让我们的这个TCP协议栈的就是可以工作
IP数据包可以工作
在以太网这个交换网络上
这样呢
就是我们梳理下来
我们就有了一个互联网体系结构
它的核心的一个工作机制
-课程内容简介
--Video
-网络协议基础
--Video
--Video
--Video
--Video
-上网浏览网页背后的网络通信过程
--Video
--Video
-实验环境安装配置
--Video
-网络相关命令
--Video
--Video
-本周作业
--外部链接
-编译、构建和调试
--Video
--Video
--Video
-Socket接口
--Video
--Video
-UDP范例代码
--Video
-TCP范例代码
--Video
-本周作业
--外部链接
-TCP协议概述
--Video
--Video
-Linux网络协议栈源代码简介
--Video
-Linux系统的编译、构建和调试
--Video
--Video
-TCP协议源代码分析
--Video
-本周作业
--外部链接
-IP协议基础
--Video
-路由表
--Video
-路由转发举例
--Video
-IP协议栈源代码解析
--Video
-路由协议简介
--Video
-网络层数据传输路径解析
--Video
-本周作业
--外部链接
-ARP协议基础
--Video
-ARP解析的过程
--Video
-ARP解析在网络传输过程中的作用
--Video
-ARP协议栈源代码解析
--Video
-本周作业
--外部链接
-以太网基础
--Video
--Video
-交换机的学习、转发和过滤数据库
--Video
-常见二层协议
--Video
-数据链路层在Linux网络协议栈中的一些关键代码分析
--Video
-本周作业
--外部链接
-DNS协议基础
--Video
-DNS域名的存储
--Video
-DNS域名解析过程分析
--Video
-本周作业
--外部链接
-互联网架构设计的最初动机与核心目标
--Video
-互联网架构设计的具体目标及背后重要权衡
--Video
--Video
--Video
-课程考核
--外部链接

