DNS
DNS的协议包结构:
Transaction id: 16bit,
Flags:在应答时,要特别关注这个字段。有没有错误等。
Questions:请求的实体个数,一般是1
Answer RRs:应答,答案的实体个数,N个
Authority RRs:应答,权威实体个数,N个,好像最多13个
Additional RRs:应答,附加记录资源个数,N个
资源实体:根据上面的个数,跟的具体实体数据。
请求场景:
请求实体:域名+type+class。
Type:如A,AAAA,等等。A 表示IPv4地址, AAAA表示IPv6地址
Class:现在固定为1。
应答场景
应答时,一般有多个RRs。但一般只在Answer RRs找到对应的IP地址。
应答场景要特别关注flag字段,要看是否有错误发生,尤其是“截断”和“no such name”这两种比较常见的错误类型。
特别关注
一般UDP包做DNS解析时,限制UDP包长度为512,如果应答的资源太多,就会在flag字段中标记为截断。
而一般的做网络业务交互的组件(如curl)在UDP包返回有截断标记时,会再用TCP协议来做DNS解析。
这种情况一般都是CDN做加速和负载均衡时,返回过多的CNAME和A记录导致UDP包超大。
【以后补图】。