使用WireShark查看TCP连接和断开过程

TCP连接三次握手过程

机器A向机器B发送建立连接请求的过程:

  1. A向B发送: SYN=1 Seq=随机生成的数字i。A进入SYN_SENT状态。
  2. B收到A发送的消息:从SYN=1知道A想要和B发送请求。于是B向A发送:SYN=1,ACK number= i+1 ,ACK=1,seq=随机生成的数字j。B进入SYN_RECV状态。
  3. A收到B发送的应答消息,发现SYN=1 ACK=1,则A向B发送ACK=1。A进入ESTABLISHED状态,三次握手完成。
使用Wireshark抓包三次握手进行分析

1.打开Wireshare,在黄色标签右侧输入http表示过滤http协议相关数据包,然后双击选中的网卡,我的电脑上网使用的是wlp3s0这个网卡。
在这里插入图片描述

2.在浏览器中输入www.baidu.com访问百度。

3.选择有GET请求这一行,右键—>追踪流->TCP流。

在这里插入图片描述

4.这个时候就可以看到TCP的三次握手了。
在这里插入图片描述

5.首先我们的主机向220.181.57.216发送包,可以看到FLAGS是SYN(SYN=1),Sequence Number=0(seq=0).
在这里插入图片描述

6.第二次握手220.181.57.216向我们发送FLAGS(SYN,ACK),Ack number=1 (也就是seqA+1),Seq=0

在这里插入图片描述

7.第三次握手 我们向220.181.57.216发送 FLAGS:ACK,ACK number=1,这样就建立TCP连接了。
在这里插入图片描述

TCP四次挥手过程

使用字母C代表客户端,使用字母S代表服务端。客户端和服务端都可以主动断开连接,这里我们假设客户端主动断开连接。

  1. C向S发送报文FIN(请求断开连接),然后进入FIN_WAIT1状态。(第一次挥手)
  2. S收到FIN报文之后首先向C发送ACK报文表示收到C发送的FIN,然后S进入CLOSE_WAIT状态(第二次挥手)。
  3. C收到S的ACK报文之后进入FIN_WAIT2状态。
  4. S继续把没有发送完的数据发送完之后向C发送FIN报文告诉C我准备好断开连接了,S进入LAST_ACK状态(第三次挥手)。
  5. C接收到S发送的FIN报文之后给S发送一个ACK报文(第四次挥手),S接收到ACK报文之后就进入CLOSE状态表示连接断开了,C进入TIME_WAIT状态等待一段时间后S没有打过来新的报文那么C也进入Close状态表示连接断开。

(四次挥手的过程中也使用了seq和ack number这里就不说了,只要知道它们是用来标明包循序的就可以。个人理解这里使用seq是为了使某个ACK和某个Seq一一对应)

使用Wireshark抓包四次挥手进行分析

还是用上面三次握手抓到的数据,滚动到最下面就可以看到四次挥手的包。

在这里插入图片描述

最后说一个从网上看到的面试题目:

为什么机那里连接使用三次握手,断开连接使用四次握手?

建立连接:

  1. A->B:发送SYN
  2. B->A:发送 SYN,ACK
  3. A->B:发送 ACK

断开连接:

  1. A->B:发送FIN
  2. B->A:发送 ACK
  3. B->A:发送 FIN
  4. A->B:发送 ACK

建立连接的2步骤被拆解为断开连接的2,3步骤,因为断开连接的时候有可能Server端还在发送数据所以Server端只能先回复ACK然后等发送完数据之后再发送FIN报文。

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP协议的连接过程主要分为三个阶段:建立连接阶段、数据传输阶段和释放连接阶段。下面是wireshark深入分析TCP协议的连接过程。 1. 建立连接阶段 在TCP协议中,建立连接需要进行“三次握手”。wireshark可以通过抓取网络数据包来分析这个过程。首先,客户端向服务器发送SYN包,表示请求连接。服务器接收到SYN包后,回复一个SYN+ACK包表示同意连接。最后,客户端再回复一个ACK包,表示确认连接已经建立。 在wireshark中,可以使用过滤器“tcp.flags.syn==1”来查找SYN包,使用过滤器“tcp.flags.syn==1 && tcp.flags.ack==1”来查找SYN+ACK包,使用过滤器“tcp.flags.ack==1”来查找ACK包。 2. 数据传输阶段 建立连接后,客户端和服务器就可以进行数据传输了。在TCP协议中,数据传输采用“面向连接”的方式,即每次发送数据前需要先建立连接wireshark可以通过抓取网络数据包来分析数据传输过程。在数据传输过程中,每个数据包都包含了序号和确认序号,用于保证数据的可靠传输。 在wireshark中,可以使用过滤器“tcp.stream eq X”(X代表TCP连接的编号)来查找某个TCP连接的数据包。 3. 释放连接阶段 在TCP协议中,释放连接需要进行“四次挥手”。wireshark可以通过抓取网络数据包来分析这个过程。首先,客户端向服务器发送FIN包,表示请求断开连接。服务器接收到FIN包后,回复一个ACK包表示已经收到请求。然后,服务器也向客户端发送FIN包,表示同意断开连接。最后,客户端回复一个ACK包,表示确认连接已经断开。 在wireshark中,可以使用过滤器“tcp.flags.fin==1”来查找FIN包,使用过滤器“tcp.flags.fin==1 && tcp.flags.ack==1”来查找ACK包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值