通过tcpdump抓包,然后拿到wireshark分析已成为常用的技术手段,wireshark人性化的界面和功能设计,为包分析提供了诸多便利条件。不过调整后的显示也会为看包人员带来一些误解,拿一个
通过tcpdump抓包,然后拿到wireshark分析已成为常用的技术手段,wireshark人性化的界面和功能设计,为包分析提供了诸多便利条件。不过调整后的优化显示可能会给看包人员带来一些误解,拿一个HTTP请求看,通过wireshark看的包行请求情况如下:(在此过程多谢正强同学的交流)
从wireshark的行显示看,先是3次握手,然后客户端发送请求头给服务器端,三是服务器端发送数据,四是服务器端发送200 ok的响应头,但这跟之前的知识理解矛盾着的,一直以为响应头是服务器最先传给客户端的信息,这样客户端浏览器才能按照响应头的信息来解析数据内容,不可能等到服务器端将数据全部发送到浏览器然后再进行数据解析的,那样的话时延和用户体验得有多差,但从wireshark的显示看,确实是响应头最后发送的,看了N个请求都是这个顺序,难道之前的理解错误了么?继续分析,用tcpdump看原始数据,截图如下:
发现了问题所在,在tcpdump看到的原始信息和wireshark中展示的看似是不完全一样的,首先请求头的时间戳16:19:29.624900是一致的,但响应头时间戳wireshark显然是做过优化显示了,tcpdump显示的响应头时间是16:19:29.626090,而wireshark显示的是16:19:29.626126,这其实是个障眼法,仅仅是个优化显示,打开wireshark的21号数据包,发现响应头其实就在里面,只是wireshark为了优化显示,做了调整而已,好了误会解决。那就是说服务器端还是在收到请求头后第一时间将响应头发送给客户端浏览器,供其进行数据处理,再次总结一下HTTP请求的全过程如下:
1、客户端浏览器进行域名解析;
2、客户端与服务器端进行三次握手;
3、客户端浏览器依次发送请求头(第一行为请求行)、请求体给服务器端,以回车换行(\r\n)结束;
4、服务器端发送响应头(第一行为状态行)给客户端浏览器,同样以回车换行(\r\n)结束;
5、服务器端发送数据给客户端浏览器;
6、数据发送完毕后四次挥手。
“运维网咖社”原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://www.net-add.com
社长"矢量比特",曾就职中软、新浪,现任职小米,致力于DevOps运维体系的探索和运维技术的研究实践. |