Wireshark抓包分析TCP连接、发送数据与断开过程
准备工具:1. 两台连接到同个局域网的电脑,或者虚拟机;2. 在其中一台电脑安装Wireshark;3. 在两台电脑上面都有TCP&UDP测试工具软件TCP连接建立过程(三次握手):抓包分析TCP连接过程:1.两台主机都分别打开TCP&UDP测试工具这里设置主机A的IP地址为10.1.13.2, 主机B为10.1.13.3。主机A作为客户...
准备工具:
1. 两台连接到同个局域网的电脑,或者虚拟机;
2. 在其中一台电脑安装Wireshark;
3. 在两台电脑上面都有TCP&UDP测试工具软件
TCP连接建立过程(三次握手):
抓包分析TCP连接过程:
1.两台主机都分别打开TCP&UDP测试工具
这里设置主机A的IP地址为10.1.13.2, 主机B为10.1.13.3。
主机A作为客户端,主机B作为服务器端。
--------------------------------------------------------------------
主机A(10.1.13.2) 设置如下:
点击右上角的创建连接,弹出对话框。
类型选择TCP
目标IP选择10.1.13.3,端口号选择80
本机端口号选择指定为4001,当然也能随机端口,这里为了更好说明,选择固定的端口号。
如下图所示:
点击创建,如下图所示:
--------------------------------------------------------------------
主机B(10.1.13.3) 设置如下:
打开TCP&DUP测试工具,点击左上角创建服务器。
指定IP设置为10.1.13.3,本机端口:80。
点击确定之后如下图所示:
点击启动服务器。
--------------------------------------------------------------------
2. 打开Wireshark,选择目前在用的网卡,我这里是“以太网”,点击进入,开始抓包。
3.在主机A(10.1.13.2)中,点击TCP&UDP测试工具中的【连接】按钮。
此时,主机A如下:
主机B如下:
4.Wireshark软件点击左上角红色方框,停止抓包。
可以把抓到的包保存起来,点击文件->保存即可。
在应用显示过滤器搜索栏中输入ip.addr == 10.1.13.2 and ip.addr == 10.1.13.3 and tcp
这样就抓到了TCP连接三次握手过程的包。
5.分析TCP连接过程:
从每一条的初略信息可以看出,第一条是10.1.13.2客户端发给10.1.13.3服务器端的,发送的是一个seq=0, ctl = SYN的包;
第二条是服务器端10.1.13.3发给客户端10.1.13.2, seq = 0, ack = 0, ctl = SYN, ACK;
第三条是客户端发给服务器端 seq = 1, ack = 1, ctl = ACK。
跟我们平时看见的TCP连接三次握手过程一致。
----------------------------------------------------
进一步分析,点击第一条信息,弹出如下详细信息:
这里我们可以看见几个层的详细信息,和原始数据。
其中有一个Transmission Control Protocol, Src Port:4001, Dst Port:80, Seq:0,Len:0.
这个就是一个TCP的包。打开如下:
这里完整给我们展示了第一次握手时TCP包的详细过程。
根据TCP报文格式定义:
对比上面的信息,可以知道每一个数据代表的意思。这里不进行展开说明。
这里发的序列号码是seq=0;
SYN标志在控制位的倒数第二位,如上上图的红线部分;
以上两点说明了这个TCP第一次握手的通信过程。
其他两次握手过程不再展开讨论。
抓包分析TCP发送数据过程:
1. 在TCP&UDP测试工具中,假设这是客户端和服务器TCP是处于连接状态,我们在客户端发送一个hello到服务器,如下图。并按照上面介绍的方法抓包。
抓到的包如下:
第一个包为10.1.13.2发给10.1.13.3的一个TCP包,第二个为10.1.13.3发给10.1.13.2的一个回应。
由上面可以看出,TCP在发送数据的时候,seq=1, ack = 1,当然,这里的seq和ack会随着发送数据的次数而增加,不一定都是1。
控制位 ack, push被置为1;
最后我们还看见了发送的数据,共5个字节,为68 65 6c 6c 6f 翻译为字符串即为hello。
-------------------------------------------------
10.1.13.3回复10.1.13.2,它收到了一个TCP包,如下,seq = 1, 控制位ack置为1。
抓包分析TCP断开过程:
最后点击10.1.13.2客户端主机的TCP&UDP测试工具的"断开连接",再用wireshark抓包,得到如下:
TCP断开是4次握手,如下图:
对比抓包和这个示意图,可以更清晰展现TCP断开的过程。
10.1.13.2客户端发送FIN,ACK控制命令给10.1.13.3服务器,告诉服务器,你可以结束(final)连接了,请给我确认(ack)一下;
服务器收到之后,会先给客户端发送一个ACK,确认收到了客户端的请求;
然后服务器准备好断开之后,再给客户端发送FIN,ACK,告诉客户端,我服务器已经把准备好你断开结束(final)了,收到请给我确认(ack)一下。
客户端收到之后,再给服务器发送一个ACK,说明它收到了。然后进入一个称为TIME_WAIT的等待时间,这个时间要求是2个MSL,
MSL是一个IP包能在互联网上生存的最长时间。这样做是为了防止服务器收不到最后一个ACK,导致服务器资源的浪费。
服务器收到ACK之后就断开了。通信结束。
通过抓包可以更深入学习TCP连接的一些特性,有助于理解网络编程出现的一些问题。
更多推荐
所有评论(0)