一、抓包

通过Wireshark这个抓包工具演示下正常能抓到tcp三次握手,能看到的内容是不是和上篇文章tcp三次握手中用图画出来的内容是一样的呢?

现在就抓个包详细得讲解下。先选择我上网的网卡,然后点击这个蓝色的小鲨鱼,开始抓包了。

清除wireshark的历史接口缓存 wireshark 数据内容_程序人生

现在它在开始抓包,我去访问一个页面。这是个https的连接,肯定是基于tcp的。

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_02

点击红色按钮暂停。

抓的是tcp协议,过滤下tcp协议的包。按下回车之后,这边就全是tcp的报文了:

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_03

因为刚刚都在这一块网卡上抓的,这块网卡可能有很多别的流量,所以抓到的流量不是很纯净。

随意看下某个tcp连接,它的三次握手的过程。

我就看这个,怎么过滤出来这一个连接呢?

清除wireshark的历史接口缓存 wireshark 数据内容_python_04

右击这个包,选择追踪流(追踪整个这一个连接)-tcp流

清除wireshark的历史接口缓存 wireshark 数据内容_程序人生_05

将这个连接的所有的数据包都过滤出来了,就看不到其它的杂七杂八的连接。这是指这一个连接的tcp的报文。

清除wireshark的历史接口缓存 wireshark 数据内容_程序人生_06

二、详解tcp3次握手

第1个报文,请求连接消息:syn:

显示出来这是个syn包:

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_07

syn包用来发起连接请求的,客户端向服务器发起连接请求,syn标志位置1。看下标志位置1是什么样子的。双击这个包就可以打开。

看到一个详细的报文显示:

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_08

它会把网络中每一层的数据格式都显示在这里:

清除wireshark的历史接口缓存 wireshark 数据内容_软件测试_09

数据链路层

清除wireshark的历史接口缓存 wireshark 数据内容_python_10

清除wireshark的历史接口缓存 wireshark 数据内容_python_11

清除wireshark的历史接口缓存 wireshark 数据内容_程序人生_12

第2个报文:syn,ack

syn,ack是服务器给客户端返回的确认消息。

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_13

双击它,点开看下:

清除wireshark的历史接口缓存 wireshark 数据内容_清除wireshark的历史接口缓存_14

syn,ack包与syn包对比:

清除wireshark的历史接口缓存 wireshark 数据内容_软件测试_15

清除wireshark的历史接口缓存 wireshark 数据内容_清除wireshark的历史接口缓存_16

第3个报文,确认消息:ack

客户端发给服务器的:

清除wireshark的历史接口缓存 wireshark 数据内容_软件测试_17

清除wireshark的历史接口缓存 wireshark 数据内容_清除wireshark的历史接口缓存_18

seq=1,是因为syn,ack包中确认号是1,表示我希望你收到下一个包的序列号是1。(也就是第一个syn包的序列号加1。)

清除wireshark的历史接口缓存 wireshark 数据内容_python_19

这个ack是1是因为给我发的syn,ack包中序列号是0,在这个基础上加1,所以这个包的确认号就是1。

清除wireshark的历史接口缓存 wireshark 数据内容_自动化测试_20

第4个,http报文:

三次握手之后,直接是个http的报文:

清除wireshark的历史接口缓存 wireshark 数据内容_python_21

传输层已经建立完tcp连接,那应用层才能去在它的这个连接基础上面,去发送http的请求。

以上就是tcp3次握手的过程。