wireshark学习-DNS
首先打开wireshark开始抓包在浏览器的网址栏里直接输入www点baidu点com回车然后就可以暂停抓包了这里用过滤表达式dns contains baidu【匹配 DNS 报文中任意字段包含 baidu的报文】可以看到密密麻麻出来一大堆DNS不急咱们挨个看看首先来看这个通信的两端一个是192.168.223.185一个是192.168.223.81快捷键winR输入cmd输入ipconfig说明我的电脑是185我给电脑开热点的手机是81。有啥玩意电脑都直接丢给网关了。然后开始看第一个包transaction id是用来标识dns请求的这个值是随机生成的发起和回复的id必须相同这样电脑就能知道哦原来这俩是一对。否则电脑DNS客户端就无法区分哪个响应给哪个请求了flagsstandard query表示标准查询重点是下面的queries查询第一个字段name表示要查询的域名type是A表示我需要的是ipv4地址classin表示互联网类Internet没啥用后面就不看这个了所以总结一下就是我想知道www点baidu点com这个域名所对应的ipv4地址是什么---------------手动分割线------------------再往下看第二个包这个包是针对上一个包的回复我怎么知道的呢因为首先transaction id和上一个包一样都是0608这也就意味着他们俩是一对。而下面的flags又有一个query response查询回复因此这个包是对第一个包的响应再往下看queries查询是和请求包一样的但是多了一个answers回答这就是响应的内容也就是说针对你给我的“上面这个问题”我的答案是xxx接下来具体看回复内容先来看第一条name表示针对这个域名typecname表示这是个别名记录反应了域名与别名的映射关系【记录约等于报文类型】time to live是存活期address是ip地址人话针对你请求的这个域名它其实有个别名叫做www点a点shifen点com这个所谓的别名它的ipv4地址是39点156........那请问为什么这个响应不直接告诉我baidu的地址非要告诉我个别名的地址呢这个shifen实际上叫做中间域名因为后面服务器的ip地址可能会因为各种原因发生改变比如更换机房或者有其他业务需求如果有个中间域名那改地址的时候就直接改中间域名的A记录就可以了省事。那A记录是个什么东西呢其实就是真正用来记录域名与ipv4地址的映射关系的东西这两条都是A记录记录了什么记录了刚才告诉你的那个别名的IP地址有俩一个70.239一个70.46这是为了保险浏览器会先访问239如果不行再直接访问46。后面紧接着就是发送http来请求内容了和dns无关---------------手动分割线------------------到这就完了吗这不是才看了两个包可是咱抓了这么多包啊仔细看看就会发现后续的这些DNS好像和一开始的www点baidu点com都不一样啊这家伙在干什么呢这就涉及到网页的底层了比如我们刚才打开的那个百度网页再瞅瞅你会发现这个页面并不是简简单单的静态页面我用红色框起来的这些地方都是可以点击的超链接点击之后就会跳转到其他页面。一开始你输入了百度的网址浏览器就向电脑发送请求用网卡来发送/接收dns包得到了那个shifen的ip地址之后给shifen发送http请求包去拿构建网页所需的资源图片、css样式等等然后浏览器解析页面的过程中发现这个页面里还有一堆超链接为了提高速度浏览器会直接自动帮你查询这些超链接的域名ip地址这样你点击的时候就不用现场解析了直接发http去请求内容就可以。所以咱们才会看到这么多dns包。等等所以还没解释最后一件事情为什么要把网页资源放在shifen这个域名那边的服务器里呢直接放在baidu这个域名底下的服务器里不行吗首先浏览器的同域名并发连接数有限制HTTP/1.1 时通常是 68 个。如果把所有资源主页面 图片 CSS JS都放在baidu下浏览器对这个域名最多只能同时开几个 TCP 连接剩下的资源必须排队等待页面加载就会变慢。使用多个不同域名dss1、dss0、sp1、sp2……浏览器就可以同时与多个域名建立连接并发下载更多资源就像开了多条车道来运输货物。其次就是存放这些资源的服务器如果坏了那你访问baidu最多就是页面变得奇丑无比排版很奇怪但主站baidu还是能返回基础的 HTML 文字和登录功能。这样部分降级比全局完蛋要好。就像这样网络不好的时候有时能看到这种情况但是其实也能用