当前位置:   article > 正文

使用WireShark查看TCP连接和断开过程_server主动断开客户连接 fin抓包分析

server主动断开客户连接 fin抓包分析
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报文。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/158587?site
推荐阅读
相关标签
  

闽ICP备14008679号