早就据说了Wireshark
是一个强大的网络数据包分析软件,能够详细的展现网络数据包的交换过程,是监控网络请求定位网络问题的利器。可是一直没能静下心来学习它,一方面是对它的强大和专业望而生畏,另外一方面是平时网络调试使用Fiddler
和Charles
抓包也知足需求了。今天学习网络协议时,忽然以为纯理论的知识点太空泛,想要抓一次真实的网络请求数据来对照学习,本文就是我使用Wireshark
来学习网络协议的笔记。css
我使用的是Mac版Wireshark 2.4.0
,目标是抓取请求http://www.baidu.com
HTML文件的网络数据过程。Wireshark
打开后不用任何设置就能够抓到电脑上发出的全部网络请求,能够看到大量的数据包,包含了电脑上发出的全部的网络请求。咱们想要的是一次网络请求完整的数据交换过程,数据太多不利于分析,因此首先须要过滤出咱们关注的数据。我这里想到使用指定ip来过滤网络请求。浏览器
➜ Desktop ping www.baidu.com
PING www.a.shifen.com (61.135.169.125): 56 data bytes
64 bytes from 61.135.169.125: icmp_seq=0 ttl=53 time=2.697 ms
64 bytes from 61.135.169.125: icmp_seq=1 ttl=53 time=2.963 ms
...
复制代码
先使用ping
命令获取www.baidu.com
对用的ip,而后设置Wireshark
的过滤器ip.addr == 61.135.169.125
。在浏览器中直接请求www.baidu.com
会屡次请求改ip服务器,由于HTML中还有图片、css的资源文件须要加载。这里咱们只要请求HTML文件的请求,因此这里使用curl
命令来模拟一次http请求。bash
➜ Desktop curl http://www.baidu.com
复制代码
经过curl
命令模拟一次http请求,而后使用Wireshark
过滤器过滤出和指定ip服务器交互的请求,咱们就获得了以下图所示数据。服务器
从上面截图中能够看出一次http请求的过程大体是:网络
四个过程咱们这里重点看下tcp协议三次握手的过程。先来看下TCP数据包结构图。 curl
再贴下三次握手流程图 tcp
Wireshark
抓到的第一次握手的数据包。首先客户端向服务端发送了一个设置了Syn (Synchronize) 标记的包,告诉服务端请求创建链接。此时的数据序号是0。
下面是第二次握手的TCP数据包。服务端向客户端发送了一个设置了Acknowledgment位,而且Acknowledgment number设置成了客户端发送数据序号加一。 学习
下面是第三次握手的数据包 url