Wireshark抓包分析TCP连接、发送数据与断开过程 | 您所在的位置:网站首页 › TCP连接建立通过什么过程 › Wireshark抓包分析TCP连接、发送数据与断开过程 |
准备工具:
1. 两台连接到同个局域网的电脑,或者虚拟机; 2. 在其中一台电脑安装Wireshark; 3. 在两台电脑上面都有TCP&UDP测试工具软件 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。 最后点击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连接的一些特性,有助于理解网络编程出现的一些问题。
|
CopyRight 2018-2019 实验室设备网 版权所有 |