使用Wireshark抓包分析TCP协议:三次握手和四次挥手

01 介绍

在我的上篇文章提及TCP通信:TCP通信及基于OpenSSL实现TLS

为了更好的学习和理解TCP协议的连接和断开连接的过程,我们来引入一个非常适合用来学习网络协议的抓包工具Wireshark。这个抓包工具可以详细看到每一层网络报文的详细信息。

在这里插入图片描述
客户端ip为10.0.65.1,服务端ip为10.0.65.0,端口为23

02 TCP协议的三次握手过程

三次握手
Wireshark抓包为灰色: TCP连接建立和断开数据包,表示TCP连接的建立和断开过程。

No.5:客户端向服务器发送一个SYN段(表示发起连接请求)

No.6:服务端返回一个ACK(对客户端连接请求的应答)+SYN(表示服务端发起连接请求)

No.7:客户端给服务端返回一个ACK(对服务端连接请求的应答)

到此,TCP三次握手就结束了。客户端与服务端之间已经成功建立起连接。

这里未对Seq和Ack进行说明,可参见下文解释。

03 TCP协议的数据传输过程

数据传输
TELNET协议是基于文本的,通常使用TCP作为传输层协议,其端口号为23。

No.8:客户端向服务器发送消息。
hello
客户端向服务端发送了一个字符串“hello”,初始序列号是1,TCP段长度为5,则下一个序列号(next sequence number)将是6。TCP协议中的序列号表示数据流中下一个数据字节的序号,因此在这种情况下,下一个序列号将是当前序列号加上TCP段长度。

No.9:服务端作了一个应答,序列号是1,Ack是6,在TCP连接中,接收方发送的ACK(确认号)通常是对发送方下一个期望接收的序列号(即发送方的下一个序列号)进行确认,这个逻辑确保了数据包的顺序和完整性,表示接受到了客户端的信息。

N0.10:服务端向客户端发送消息。
alive
服务端向客户端发送了一个字符串,初始序列号是1,TCP段长度为29,则下一个序列号(next sequence number)将是30。

到此,TCP数据传输就结束了,吗?客户端对服务端的应答呢?在04挥手过程会提及。

要注意的是:客户端和服务端各自维护着自己的序列号和确认号。

04 TCP协议的四次挥手过程

四次挥手
当最后一次数据传输,发送方发送一个带有FIN标志的数据包给接收方,表示数据传输结束,然后等待接收方的确认。接收方收到该数据包后,会发送一个带有ACK标志和FIN标志的数据包给发送方,表示接收方已经接收到了数据,并且也要开始关闭连接。最后,发送方收到接收方的确认后,会发送一个带有ACK标志的数据包给接收方,表示发送方也已经关闭连接。这样,整个连接就完成了关闭过程。

No.11:当数据传输首先结束的端(服务端),会率先发起结束断开连接的请求,序列号Seq是30,next sequence number是31。

No.12:客户端对上一个断开连接请求的报文进行确认。并同时,停止接受数据,序列号Seq是6,Ack是31。

No.13:客户端也结束数据发送了,所以也会发起一个断开连接的请求,这里序列号和Ack保持不变,但是这里的next sequence number是7,即比之前多一位。

No.14:是服务端对客户端断开连接请求的进行确认,序列号是31,Ack是7。

至此,服务器和客户端都停止发送和接受数据了!四次挥手就完成了。

05 拓展

拓展
最后两行是我通过SSH访问远程服务器抓包的信息,这里也提及一下,通过putty访问,Putty是一个用于远程登录和管理计算机系统的免费开源软件。它支持多种网络协议,包括SSH、Telnet、Rlogin等,可以在Windows平台上使用。

SSH: SSH(Secure Shell)和TELNET都是基于TCP的协议,用于远程访问计算机系统。SSH是一种安全的远程登录协议,它通过使用加密技术来保护传输的数据。SSH协议可以为用户提供身份验证、加密通信和数据完整性验证等安全功能,因此在安全性上优于TELNET。SSH通常使用TCP端口22。

No.15 | No.16:当我通过本机访问SSH远程服务器时,ip10.0.65.0也自然作为服务端,但是端口跟先前23不同,这里22是SSH协议的端口,这里的序列号为1,是因为当我连接上远程服务器的时候,就会进行一次SSH握手,既然SSH是基于TCP,也会有个握手过程,与02一致。

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值