wireshark抓包及TCP协议三路握手与四次挥手的学习


最近在复习计算机网络时,了解到了Wireshark这个软件,今天以抓包tcp三路握手与四路挥手为例,开始学习使用。

1.wireshark的下载

Wireshark是一个功能强大且灵活的网络封包分析工具,可用于捕获、分析和理解网络流量。它是网络管理员、安全专家和开发人员的重要工具,帮助他们识别和解决网络问题,提高网络性能和安全性。
wireshark下载地址:wireshark官方下载地址
点击链接后,会跳转到以下界面:
在这里插入图片描述

根据自己的电脑配置,可以选择不同版本,其中:

  • Windows Intel Installer: 这是Wireshark的Windows平台版本,针对使用Intel处理器的Windows计算机进行了优化和适配。它是通过安装程序(Installer)进行安装,提供了用户友好的图形界面和各种功能。
  • Windows Intel PortableApps®: 这是Wireshark的Windows平台版本,针对使用Intel处理器的Windows计算机进行了优化和适配。它是一个可便携应用程序(PortableApps®),可以在不需要安装的情况下直接运行,方便携带和使用。

我选择的是Windows Intel Installer的版本安装使用。

2.TCP协议介绍

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

2.1 TCP报文结构

在这里插入图片描述
TCP的首部格式如图1所示:
Source Port是源端口,16位。
Destination Port是目的端口,16位。
Sequence Number是发送数据包中的第一个字节的序列号,32位。
Acknowledgment Number是确认序列号,32位。
Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。
标志位: 6位,URG表示Urgent Pointer字段有意义:

  • ACK表示Acknowledgment Number字段有意义
  • PSH表示Push功能,RST表示复位TCP连接
  • SYN表示SYN报文(在建立TCP连接的时候使用)
  • FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)

Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。
Checksum是校验和,16位。和UDP报文一样,有一个校验和,用于检查报文是否再传输过程中出现差错。
Urgent Pointers是紧急指针,16位,当URG = 1时有效,指出本报文段紧急数据的字节数。

2.2 TCP三路握手

在这里插入图片描述

为了确保客户端和服务端都能正常发送和接收数据。三次握手都是从客户端开始。

握手前状态:客户端和服务端都是处于连接关闭状态。服务端首先处于listen状态,等待客户端连接,然后就进入三次握手。

  1. 客户端向服务器端发送一个SYN(synchronize)包,随后客户端进入SYN-SENT阶段。
    • 标志位位SYN:表示请求建立连接;
    • 序列号位Seq = x(x一般为随机数);
  2. 服务端收到客户端发送SYN包后,对该包进行确认后结束LISTEN阶段,并返回一段TCP报文,随后服务器端进入SYN-RECV(同步接收)阶段。
    • 标志位为SYN和ACK:表示确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
    • 序号为Seq = y,将自己的初始序列号同步给客户端;
    • 确认号为Ack = x + 1,表示收到客户端的序列号Seq并将其值加1作为自己的确认号Ack的值,告诉客户端自己接收的Seq没错;
  3. 客户端接收到发送的SYN+ACK包后, 明确了从客户端到服务器的数据传输是正常的,从而结束SYN-SENT阶段。并返回最后一段报文,随后客户端进入ESTABLISHED状态。
    • 标志位为ACK,表示确认收到服务器端同意连接的信号;
    • 序号为Seq = x + 1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;
    • 确认号为Ack = y + 1,表示收到服务器端序号seq,并将其值加1作为自己的确认号Ack的值。
  4. 当服务器收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束SYN-RECV阶段,进入ESTABLISHED阶段,从而完成三路握手。

为什么进行三次握手?

确认客户端和服务器端都能正常的收发数据

  • 第一次握手:确认客户端可以正常发数据
  • 第二次握手:确认客户端可以正常发送数据,确认服务端可以正常接收数据
  • 第三次握手:客户端与服务器确认建立连接,双方准备开始传输数据

2.3 TCP四次挥手

在这里插入图片描述
为了告知客户端和服务端未发送的数据发送完毕,并且关闭连接,四次挥手都是从客户端开始的。

挥手前状态:客户端和服务端都处于连接状态(ESTAB-LISHEN),进入四次挥手。

  1. 首先客户端发送一段TCP报文表明想是否TCP连接,随后客户端进入FIN-WAIT-1阶段,即半关闭阶段,并且停止向服务端发送通信数据。

    • 标记位为FIN,表示请求释放连接;
    • 序号为Seq = u;
  2. 服务器接收到客户端请求断开连接的FIN报文后,结束ESTABLISHED阶段,进入CLOSE-WAIT阶段并返回一段TCP报文,随后服务器开始准备释放服务器端到客户端方向上的连接。客户端收到服务器发送过来的TCP报文后,确认服务器已经收到了客户端连接释放的请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段

    • 标记位为ACK,表示接收到客户端释放连接的请求;
    • 序号为Seq = v;
    • 确认号为Ack = u + 1,表示是在收到客户端报文的基础上,将其序号值加1作为本段报文确认号Ack的值。
  3. 服务器端在发出ACK确认报文后,服务器端会将遗留的待传数据传送给客户端,待传输完后即经过CLOSE-WAIT阶段,便做好了释放服务器端到客户端的连接准备,再次向客户端发出一段TCP报文,随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止向客户端发送数据。

    • 标记位为FIN和ACK,表示已经准备好释放连接了;
    • 序号为Seq = w;
    • 确认号Ack = u + 1,表示是在收到客户端报文的基础上,将其序列号Seq的值加1作为本段报文确认号Ack的值。
  4. 客户端收到从服务器发来的TCP报文,确认了服务器已经做好了释放连接的准备,于是结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器发送一段报文。

    • 标记位为ACK,表示接收到服务器准备好释放连接的信号;
    • 序号为Seq = u + 1,表示是在已收到服务器报文的基础上,将其确认号Ack值作为本段序列号的值;
    • 确认号为Ack = w + 1,表示是在收到了服务器报文的基础上,将其序号Seq的值作为本段报文确认号的值
  5. 随后客户端开始在 TIME-WAIT 阶段等待 2 MSL。服务器端收到从客户端发出的 TCP 报文之后结束 LAST-ACK 阶段,进入 CLOSED 阶段。由此正式确认关闭服务器端到客户端方向上的连接。客户端等待完 2 MSL 之后,结束 TIME-WAIT 阶段,进入 CLOSED 阶段,由此完成「四次挥手」。

为什么进行四次挥手?

为什么需要四次挥手 ?
确认双方都得知双方都没有要传输的数据。

第一次挥手:客户端向服务端请求关闭连接。

  • 客户端:客户端无数据传输。
  • 服务端:无感知。

第二次挥手:服务端收到客户端的请求,并且告知客户端等我处理完毕数据。

  • 客户端:客户端无数据传输。
  • 服务端:客户端无数据传输。

第三次挥手:服务端处理完毕数据,告知客户端,服务端数据处理完毕。

  • 客户端:客户端无数据传输,服务端无数据传输。
  • 服务端:客户端无数据传输,服务端无数据传输。

第四次挥手:客户端得知服务端数据处理完毕,双方数据都处理完毕,可断开连接。

  • 客户端:客户端无数据传输,服务端无数据传输。
  • 服务端:客户端无数据传输,服务端无数据传输,得知客户端知道服务端无数据传输。

3.wireshark抓包TCP三路握手与四次挥手

3.1MobaXterm与虚拟机连接

在这里插入图片描述

3.2MobaXterm与虚拟机断开

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: TCP三次握手四次挥手TCP协议建立和关闭连接时所采用的步骤。 三次握手是在客户端和服务器之间建立TCP连接时的过程。首先,客户端向服务器发送一个请求连接的数据包,该数据包包含一个随机生成的序列号(SYN),表示客户端希望建立连接。服务器接收到该请求后,向客户端回复一个确认连接的数据包,该数据包包含其自己生成的一个随机序列号(SYN-ACK),表示服务器同意建立连接。最后,客户端再次向服务器发送一个确认连接的数据包,该数据包中包含服务器的序列号加一(ACK),表示客户端接受服务器的连接请求。这样,TCP连接就建立起来了。 四次挥手是在客户端和服务器关闭TCP连接时的过程。首先,客户端发送一个关闭连接的请求数据包(FIN),表示客户端想要关闭连接。服务器收到该请求后,向客户端回复一个确认关闭连接的数据包(ACK),但自己的数据可能没有发送完毕。服务器等到自己的数据发送完毕后,发送一个自己的关闭连接请求数据包(FIN),表示服务器也希望关闭连接。客户端收到服务器的请求后,回复一个确认关闭连接的数据包(ACK),然后等待一段时间,确保服务器收到了该数据包。最后,客户端和服务器都关闭连接,四次挥手过程完成。 通过Wireshark抓包分析TCP三次握手四次挥手可以观察到每个数据包的源地址、目标地址、序列号、确认号等信息。可以通过Wireshark的过滤功能筛选出TCP协议相关的数据包进行分析。通过分析数据包的交互过程,可以确认连接建立和关闭的状态是否符合预期,并可以进一步分析网络延迟、丢包等问题。 综上所述,Wireshark抓包分析TCP三次握手四次挥手可以帮助我们深入理解TCP连接的建立和关闭过程,以及发现网络故障的根源。 ### 回答2: TCP是一种常用的传输层协议,它通过进行三次握手来建立连接,并进行四次挥手来终止连接。 三次握手的过程如下: 1. 客户端发送一个SYN标志位的TCP报文段给服务器,表示请求建立连接; 2. 服务器收到请求后,回复一个带有SYN和ACK标志位的TCP报文段给客户端,表示同意建立连接; 3. 客户端收到服务器的回复后,再次发送一个带有ACK标志位的TCP报文段给服务器,表示连接建立成功。 四次挥手的过程如下: 1. 客户端发送一个FIN标志位的TCP报文段给服务器,表示希望断开连接; 2. 服务器收到请求后,回复一个带有ACK标志位的TCP报文段给客户端,表示确认收到断开请求; 3. 服务器完成数据的发送后,发送一个带有FIN标志位的TCP报文段给客户端,表示自己也要断开连接; 4. 客户端收到服务器的断开请求后,发送一个带有ACK标志位的TCP报文段给服务器,表示确认断开,并进入TIME_WAIT状态。 在三次握手的过程中,第一次握手是客户端发起的,第二次握手是服务器回复同意建立连接,第三次握手是客户端回复确认连接。这个过程是为了确保双方都同意建立连接,以保证数据传输的可靠性。 在四次挥手的过程中,首先客户端发送断开请求,服务器回复确认,然后服务器发送断开请求,客户端回复确认。这个过程是为了保证双方都断开连接,并确保数据完整性。 Wireshark是一款网络抓包分析工具。使用Wireshark可以捕获网络数据包,并对数据包进行解析和分析。通过Wireshark,我们可以看到每个TCP报文段的具体内容,并对三次握手四次挥手的过程进行详细分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗朗克21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值