当前位置: 首页 > news >正文

域名解析协议-DNS

DNS(Domain Name System)是互联网上非常重要的一项服务,我们每天上网都要依靠大量的DNS服务。在Internet上,用户更容易记住的是域名,但是网络中的计算机的互相访问是通过 IP 地址实现的。DNS 最常用的功能是给用户提供域名解析服务,将用户的域名解析成网络上能够访问的IP地址。

DNS报文格式

如下图所示,DNS报文由12B长的首部和4个长度可变的字段组成。标识字段由客户端程序设置并由服务器返回结果,客户端通过标识来确定响应与查询是否匹配。

下面我们结合 DNS 查询报文和响应报文的抓包信息来理解报文格式中的几个关键字段。

DNS查询报文的抓包,如下所示。

关键字段如下:

  1. UDP:DNS查询是基于UDP传输数据的。DNS服务器支持TCP和UDP两种协议的查询方式。

  2. Destination port:目的端口默认是53。

  3. QR:0表示查询报文;1表示回应报文。

  4. TC:表示“可截断”。使用UDP时,当应答报文超过512Byte时,只返回前512Byte。
    通常情况下,DNS查询都是使用UDP,返回响应中TC位设置为1时,就意味着响应的长度超过512Byte,而仅返回前512个字节。这种情况下,客户端通常采用TCP重发,将重发原来的查询请求,并允许返回的响应报文超过512Byte。

  5. Queries:表示DNS请求的域名和类型。

  1.  Name:DNS查询中的请求域名。

  2. Type:每一个查询都有一个查询类型,每一个响应也都有一个响应类型。这个类型大约有20多种,但是很多现在已经过时了。最常用的查询类型是A类型,它表示期望获得查询域名的IP地址。查询类型也可以是CNAME(别名记录)。

  3. TTL:生存时间,表示客户端保留该解析资源记录的时间。

DNS回应报文如下图所示

通过返回报文可看到,域名递归路径为:ntp.msn.cn➡msn-cn.a-0032.a-msedge.net➡msn-china.bing123.com➡202.89.233.96 ;客户端保留该解析资源记录的时间为1分36秒。

DNS交互

假设一个用户要去华为商城买一部手机,那么从他在浏览器上输入华为商城的域名,到打开商城网页的一瞬间,其实发出的DNS请求报文已经经历了下图所示的查询过程。

为了便于理解,我们可以简化一下DNS报文交互的流程。暂且把递归服务器这种有官方域名授权的服务器,统一归类为“授权服务器”。这样DNS 服务就可以被分为两大类:一种是授权存储域名和 IP 地址映射关系的授权服务;另一种是临时存放域名和IP地址映射关系的缓存服务。简化后查询流程如下图所示。

http://www.lryc.cn/news/58159.html

相关文章:

  • 分享:包括 AI 绘画在内的超齐全免费可用的API 大全
  • 虹科新闻 | 虹科与Overland-Tandberg正式建立合作伙伴关系
  • 架构设计三原则
  • Android 性能优化——ANR监控与解决
  • Machine Learning-Ex3(吴恩达课后习题)Multi-class Classification and Neural Networks
  • 【Java】SpringBoot事务回滚规则
  • 使用cocopod就那么容易
  • 第14届蓝桥杯C++B组省赛
  • 面向对象编程(进阶)3:方法的重写
  • 2023年第十四届蓝桥杯Java_大学B组真题
  • APIs --- DOM事件进阶
  • awk命令详解以及使用方法
  • vue-router3.0处理页面滚动部分源码分析
  • 走心Python实战应用:【requests+re 模块】快速下载原shen图片
  • Comparable和Comparator的使用
  • 【OJ每日一练】1121 - 耐摔指数
  • vue项目Agora声网实现一对一视频聊天Demo示例(Agora声网实战及agora-rtc-vue使用,新增在线预览地址)
  • 集成时间序列模型提高预测精度
  • (详细)《美国节日》:某月的第几个星期几
  • 架构设计的历史背景
  • C#,初学琼林(06)——组合数的算法、数据溢出问题的解决方法及相关C#源代码
  • MySQL数据库——绘制E-R图:数据库概要设计阶段
  • 对类和对象的理解
  • edge-tts微软文本转语音库,来听听这些语音是否很熟悉?
  • MySQL更换存储引擎
  • filebeat收集不规则多行日志
  • Token Contrast for Weakly-Supervised Semantic Segmentation
  • Jenkins运行在docker中使用Maven构建Java应用程序
  • 将excel导入到sqlite的方法代码
  • Redis主从复制、哨兵和集群部署