本地抓包访问百度的过程
浏览器输入www.baidu.com,回车,查看抓包情况
(1)客户端先通过ARP协议获取默认网关的MAC地址(如果清除本机的arp表,则会发送广播获取网关MAC,即二层的目的MAC为FF:FF:FF:FF:FF:FF,ARP的目的MAC为wireshark填充的全0)
(2)本机向网关发起DNS请求,用的UDP协议,端口号53,本机只能抓到本机与网关之间的流量情况,网关收到DNS请求后会一步步向上发,直至找到百度的ip地址:
DNS解析具体过程为:
1、浏览器首先查询浏览器的缓存,因为浏览器会缓存 DNS 记录。
2、若浏览器无缓存,那么查询操作系统的 HOST 文件,查询是否有 DNS 记录。
3、若还没有命中域名,就请求本地域名服务器(LDNS)
(这台服务器一般在城市的某个角落,距离客户端不会很远。该服务器一般都会缓存域名查询结果,因此大部分域名解析都能在这里解析完成。)
4、若LDNS还没有命中,就LDNS请求根域名服务器(Root Server),根域名服务器返回一个主域名服务器(gTLD DNS,国际顶尖域名服务器,如.com,.cn,.org等),这里访问的是 www.baidu.com 百度,即返回 .com 的主域名服务器。
5、LDNS 继续访问 gTLD Server,查找这个域名对应的 Name Server 地址,即网站注册的域名服务器 BAIDU-DNS。
6、LDNS 继续访问 BAIDU-DNS Server,根据映射关系表找到目标 IP 地址,返回给 LDNS。
7、LDNS 拿到 IP 地址后,对这个域名和 IP 地址进行缓存,并将 IP 地址返回给请求客户端,即我们的浏览器,至此,DNS 域名解析过程结束,拿到域名对应的 IP 地址。
上述过程参考:
183.232.231.174和183.232.231.172就是百度的其中两个ip地址(百度内部ip众多,每次查看可能都不一样),百度别名是www.a.shifen.com
用命令行也可以查看百度当前映射的两个ip地址:
(3)网关向客户端返回解析后的ip后,客户端向百度的ip地址发起TCP三次握手,以及TLS握手,建立连接后发送数据,获取服务器响应。