网络之DNS协议图解

DNS是计算机域名系统 (Domain Name System)

  • 域名系统采用类似目录树的等级结构。

域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。

  • 域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发服务器。

域名解析是将域名映射为IP地址的过程。

  • DNS是应用层协议,client端(一般指浏览器)构建DNS查询请求,依次被传输层,网络层,数据链路层等封装传送到达DNS服务器端,最终client端接收到DNS响应消息
  • DNS主要基于UDP运输层协议
    • 一次UDP名字服务器交换可以短到两个包:一个查询包、一个响应包。一次TCP交换则至少包含9个包:三次握手初始化TCP会话、一个查询包、一个响应包以及四次分手的包交换。
      考虑到效率原因,TCP连接的开销大得,故采用UDP作为DNS的运输层协议,这也将导致只有13个根域名服务器的结果。

小插曲,为什么只有13台根域名解析服务器?

  • 因为要UDP报文中包含所有的根服务器信息
  • 所以现在只能放13条地址在一个包里,也就是416字节,
  • 在IPV4下一个单独的包,解析后只能有512字节用来描述这些跟域名服务器。一个UDP数据包(512bit)必须包括所用跟服务的主机名和IP 。一个完整的IP 包括8 * 4 个字节 也就是 32 个。(11111111.11111111.11111111.11111111)
  • 那么IP占用是32 * 13 = 416 。十三台服务器的主机 是 A 到 M (13)其中每个字母占 7 个长度 ( A 表示 为 1000001)(M 表示为 1001101)总共长度为 7 * 13 = 91 。IP+主机名 = 507 所以一个UDP数据包只能放 13 个 这就是根服务器 目前只能有 13个而且主机名只是 A到M 命名的原因
  • 假设是14个 IP + 主机名 = 14 * 32 + 7 * 14 = 546。都已经超过UDP的报文长度了
  • 讲了一大堆理论的东西,真正的原因还是因为互联网这东西是美国兴起的,自然占据了主动权,所以目前中国没有根域名服务器!但是在2000年初,国家有了很多关于国家安全的措施。特此2018国庆,预祝我们祖国越来越昌盛!
  • 关于为什么中国没有根域名服务器的解析
    如有错误希望指正

域名的分层结构

在这里插入图片描述

DNS 查询的顺序

  1. 是否是本机
  2. 是否是缓存
  3. HOSTS文件查询
  4. DNS服务器查询

下面来个生动形象的例子

黑色粗线,表示域名的分层结构!
箭头表示访问的顺序
在这里插入图片描述

上面的图怎么一个用户,可以直接和根域名服务器有交互,这怎么和我们平时用的不一样呢?

一个局域网的图解:在这里插入图片描述

广域网WAN: 将远隔千里的计算机都连在一起;

在这里插入图片描述

那么天朝是怎么做的?

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 谓词,

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> using namespace std;class GreaterThen20 { public:bool operator()(int val){return val > 20;} };//一元谓词 void test01() {vector<int>v;v.push…

网络之ARP

地址解析协议&#xff0c;即ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机&#xff0c;并接收返回消息&#xff0c;以此确定目标的物理地址…

C++ 内建函数对象

STL内建了一些函数对象。分为:算数类函数对象,关系运算类函数对象&#xff0c;逻辑运算类仿函数。这些仿函数所产生的对象&#xff0c;用法和一般函数完全相同&#xff0c;当然我们还可以产生无名的临时对象来履行函数功能。使用内建函数对象&#xff0c;需要引入头文件 functi…

网络之ICMP协议

ICMP 主要功能&#xff1a; 确认IP包是否成功送达目标地址通知在发送过程当中IP包被废弃的具体原因改善网络设置等 在IP通信中如果某个IP包因为某种原因未到达目标地址&#xff0c;那么这个原因由ICMP通知。 过程&#xff08;图解TCP/IP&#xff09; ICMP类型 常见的&am…

C++ 常用算法之遍历

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <functional> using namespace std;/* 遍历算法 遍历容器元素 param beg 开始迭代器 param end 结束迭代器 param _callback 函数回调或者函数…

网络之NAT协议

由来&#xff1a; 2011年2月3日中国农历新年&#xff0c; IANA对外宣布&#xff1a;IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会。2011年4月15日&#xff0c;亚太区委员会APNIC对外宣布&#xff0c;除了个别保留地址外&#xff0c;本区域所有的IPv4地址基本耗尽…

C++ 常用查找算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> using namespace std; #include <vector> #include <string> #include <functional> /* find算法 查找元素 param beg 容器开始迭代器 param end 容器结束迭代器 para…

CentOS7卸载并安装mysql教程

MySQL安装 先卸载其他 删除Mysql yum remove mysql mysql-server mysql-libs mysql-server;find / -name mysql 将找到的相关东西delete掉(rm -rf /var/lib/mysql)&#xff1b;rpm -qa|grep mysql(查询出来的东东yum remove掉) rm /etc/my.cnf查看是否还有mysql软件&#x…

C++ 常用排序算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; #include <algorithm> #include <vector> #include <functional> #include <ctime> /* merge算法 容器元素合并&#xff0c;并存储到另一容器中 这两个容器 必须也是…

排序稳定性的意义

首先&#xff0c;为什么会有排序算法稳定性的说法&#xff1f;只要能排好不就可以了吗&#xff1f; 看例子 第1行是数字2 记作 1 2 第2行是数字4 记作 2 4 第3行是数字2 记作 3 2 排序后的结果&#xff08;如果看不懂命令的意思&#xff0c;参照这个博客&#xff09; 那么引入…

C++ 常用拷贝和替换算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std;/* copy算法 将容器内指定范围的元素拷贝到另一容器中 param beg 容器开始迭代器 param end 容器结束迭代器 p…

防火墙的基础知识入门

文章目录防火墙基于实现方式&#xff0c;防火墙的发展分为四个阶段:Linux 环境中主要的防火墙形式TCP wrappers~~详解~~ 粗解Tcp wrappers的认识它的基本过程是这样的&#xff1a;iptable攻击和防御DDOS 攻击常见的可能受到 DDOS 攻击体现的症状有&#xff1a;而常见的 DDOS 攻…

C++ 常用算数生成算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <vector> using namespace std; #include <algorithm> //不好使 #include <numeric> //好使 #include <iterator> /* accumulate算法 计算容器元素累计总和 param beg 容器开始迭代…

fork()请问下面的程序一共输出多少个“A”?多少个-?

题目&#xff1a;请问下面的程序一共输出多少个“-”&#xff1f; #include #include #include int main(void) { int i; for(i0; i<2; i){ fork(); printf("-"); } return 0; } 解析&#xff1a;一共输出8个。 首先程序一开始&am…

C++ 常用集合算法

#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include <algorithm> #include <vector> #include <iterator> using namespace std;/* set_intersection算法 求两个set集合的交集 注意:两个集合必须是有序序列 param beg1 容器1开始迭代器 par…

本能富可敌国,最后却选择拯救世界!Bram的Vim和乌干达儿童

他本能富可敌国&#xff0c;最后却选择拯救世界 在命令行界面输入vim会出现一堆文件&#xff0c;但是一直有这么一句话 Help poor children in Uganda! “帮助可怜的乌干达儿童” 查询了一下这里面相关的历史背景和知识 在Vim许可证文件结束后的部分翻译 &#xff0d;如果…

linux 常用命令01

/bin/bash 就是linux默认的shell ls命令 ls -a 显示所有文件 包含隐藏文件 ls -R 递归显示子目录 ls -l 显示详细信息 ls -lrt 按照时间排序&#xff0c;显示文件信息 配合通配符使用 ls *.c *匹配任意多个字符 ls xx.? 匹配任意一个字符 cd 命令 cd - 为切换到上次目录 cd 回…

Linux基础查漏补缺

文章目录第二遍重新回顾Linux基础查看主机名修改主机名查看IP地址Linux的 “--”和“-”根目录文件的意义和作用alias直接在命令行界面输入firefox数组越界发生什么命令行光标移动的几个操作重定向第二遍重新回顾Linux基础 1.查找忽略的知识点 2.再次记忆一些基础知识 3.巩固基…

linux 常用命令02--文件属性 以及软硬链接

文件属性和用户用户组 通过ls-l 显示文件详细信息 drwxrwxr-x 2 user usergroup 4096 10月 30 20:55 stu1drwxrwxr-x d代表目录文件&#xff0c; -代表普通文件 rwx rwx r-x 归属用户的权限 归属组的权限 其他用户的权限 权限位数字表示法(8进制数…

linux查漏补缺之常用命令

wc命令 -c, --bytes, --chars输出字节统计数。-l, --lines输出换行符统计数。-L, --max-line-length输出最长的行的长度。-w, --words输出单词统计数。grep命令 图解