DNS 的讯息传递也是两种:Query 与 Reply(就是要求与回覆),它的设计比较像HTTP,而不是邮件传输交互性那麽细碎。
这边要注意,DNS 的Query 与 Reply 的格式是一样的!
架构如图:参见Explain DNS message format with neat diagram.
The query message consists of a header and question records; the response message consists of a header, question records, answer records, authoritative records, and additional records.
由於有些栏位只有reply需要回答,所以query的那些地方会是0
用课本的图来说明:
因为栏位长度是固定的,所以栏位之间实际上没有任何符号或空格区隔。
Header 包含:Identification 与 Flag
-Identification:
ID是这个message的编号,每次client问问题的ID都是16bit的随机数。server会把client的id给copy过来,用以识别是哪一个reply。
-Flag: 也是16bit,由复合式的栏位组成,如图:
下面是简单说明flag 的复合栏位们:
一次读进16bit,依序先读Identification、Flag、questions(问题的数目)、answers(答案的数目,如果没有就是0)、authority RRs(有几个答案是authoritative 的答案)、additional RRs。[这里都是指数目]
再看一下课本的图
之後四行每一行分别是 questions section、answers section 、authority RRs、additional RRs,它们分别对应到上面questions(问题的数目)、answers(答案的数目)
实际上就会像是这样子:
刚刚是查询,现在这里讲注册纪录
我们要跟authoritative name server注册,如果是一般小公司或是家里要注册DNS,为了节省成本,可以请代管EX:GoDaddy
它是一个域名注册与网站代管的上市公司,是ICANN(负责全世界domainname管理的机构)认证的全球最大注册商。
透过攻击希望能达到:
DNS攻击不只造成网路瘫痪,还会造成企业严重损失与机密(EX:密码泄漏)等严重後果。
我归纳常见攻击性质主要是
1)忙死 2)欺骗
「忙死」,是想办法耗尽DNS资源,忙死DNS server或是塞爆网路,不只local DNS server,Root DNS server也会被攻击。它会透过乱问问题(甚至问不存在的东西),使DNS 解析器不知道指定 IP 位址的网站,之後询问其他 DNS 服务器,如此会一直问下去,然後瘫痪服务,一般来说这类攻击称为拒绝服务 (DoS) 攻击;「欺骗」是给你一个假的回覆,但是假得很像真的。
DoS攻击中最常见的是 DDoS ( Distributed Denial-of-Service )攻击,攻击者不只一个,像是一个军团。
DDoS 中又分三个子类型攻击,分别是:洪水攻击、应用层攻击、协议攻击,放大攻击也是属於DDos的一种。
见详情请看:Four major DNS attack types and how to mitigate them
拦截式的中间人攻击,攻击者拦截client的封包,并给它一个假的回覆,如此client可能会被带到另外一个长很像的网站(说不定会骗你的金融帐密!?);DNS 中毒也是中间人攻击的一种,给你一个错误的回覆让DNS中毒。
还有一种欺骗方法是传假的source IP,让Server 以为是那个假的IP的要求,所以就传回覆给那个假的IP位址,这是spoofed source。
因为UDP比较快,但是DNS 如果在返回的数据量大於512Bytes会使用TCP,但因为大部分的回报大小不会超过512Bytes所以通常用UDP。
参见:51CTO|为什麽 DNS 协定使用 UDP? 只使用了UDP吗?
上一篇文章:阿沁的DNS(1)
参考文章:
Explain DNS message format with neat diagram.
DNS Message — How to Read Query and Response Message
What is a DNS attack? Types of DNS attacks and how to prevent them
51CTO|为什麽 DNS 协定使用 UDP? 只使用了UDP吗?
<<: 【从零开始的 C 语言笔记】第二十一篇-continue & break
>>: Leetcode: 114. Flatten Binary Tree to Linked List | 含C++笔记
Promise 保证执行之後才会做什麽事情 对於「未来的值」的独立封装 状态 pending:尚未被...
今天提到的是 side effect,就像之前提到的, side effect 通常出现在以下几种情...
资料团队组建 当各行业意识数据带来业务成长新动能时,追求卓越的企业意识到要充分运用企业数据,必须组建...
昨天稍微简介了一下 ngrok 在做甚麽,今天我们要让我们的 Line Channel 公开,这个 ...
ES6 概念 ECMAScript 6 (简称 ES6),是JavaScript语言新一代的标准,在...