DNS流程关于TCP和UDP

刚刚安装了下wireshark的命令行程序tshark,顺便抓几个包分析分析

lihuideMacBook-Pro:~ lihui$ sudo tshark -i en0 port 53
Capturing on 'Wi-Fi'
  1   0.000000 192.168.1.12 -> 192.168.1.1  DNS 74 Standard query 0x7ee3  A cbjs.baidu.com
  2   0.000306 192.168.1.12 -> 192.168.1.1  DNS 80 Standard query 0x5325  A wwwbaidu.jomodns.com
  3   0.010475  192.168.1.1 -> 192.168.1.12 DNS 359 Standard query response 0x7ee3  CNAME ecomcbjs.jomodns.com A 122.228.234.49
  4   0.011521  192.168.1.1 -> 192.168.1.12 DNS 334 Standard query response 0x5325  A 122.228.234.40

都是UDP的包,想了想,瞄下nslookup的结果

lihuideMacBook-Pro:~ lihui$ nslookup
> baidu.com
Server:		192.168.1.1
Address:	192.168.1.1#53

Non-authoritative answer:
Name:	baidu.com
Address: 220.181.57.217
Name:	baidu.com
Address: 123.125.114.144
Name:	baidu.com
Address: 180.149.132.47

的确,抓到的包都是我向DNS服务器之间请求相应的包,也就是请求域名解析的包,虽然UDP正确性保证没有TCP高,但是高效,况且这里仅仅是个域名解析的请求,就算有有误或者失败,大不了重来一次,也损失不大,网络流量负载也没有TCP那么大,查询任务应该主要是高效的考虑

实际上DNS域名解析过程远没有这么简单,DNS服务器之间还要进行交互同步,一段时间就会同步一下变动的记录,在服务器之间的这种同步传输是通过TCP协议来完成的,既然是同步数据正确性必须要得到保证才行,当然这个此刻我是无法抓包的

所以简单地说客户端和DNS服务器的数据交互是通过UDP完成的,而DNS服务器之间是通过TCP来同步的

发表回复