实践教你学习wireshark(六)

1,386 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第十二天,点击查看活动详情

实践教你学习wireshark(六)

数据分析--->TCP协议

什么是TCP

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。如果背过面试题的人对tcp应该都是比较了解的,毕竟tcp在网络上是十分常见的一种协议,不过还是得举个例子吧!!!当用户访问网站时,首先通过TCP协议建立连接,然后才发送HTTP请求以获取网站的内容。服务器响应客户端的信息,也都将通过TCP协议传输给客户端。

tcp的捕捉

首先我们可以在wireshark的启动页直接过滤tcp协议,让它只捕捉tcp相关的数据

image.png

image.png

这样我们就可以看到他只会捕捉tcp相关的数据了,我们可以通过端点分析查看捕获到的IP地址和端口号

image.png

image.png

在端点统计对话框中包括5个协议的选项卡,分别是Ethernet、IPv4、IPv6、TCP和UDP。通过选择不同的选项卡,即可分析对应协议的端点统计信息。其中,协议选项卡中的数字表示端点数.我们可以查看一下tcp相关的请求数据

image.png 可以看到列名总共有8列,分别为Address(IP地址)、Port(端口)、Packets(包数)、Bytes(字节数)、Tx Packets(发送的包数)、Tx Bytes(发送的字节数)、Rx Packets(接收的包数)和Rx Bytes(接收的字节数)。

会话分析(重要)

"三次握手,四次挥手"无疑是很多面试者背过或者看过想对较多的概念,接下来我们就来通过wireshark直接对其进行分析

首先

首先我们先打开会话,查看刚刚请求的一次tcp

image.png

image.png

会话统计对话框包括5个选项卡,分别为Ethernet(以太网协议)、IPv4(IPv4协议)、IPv6(IPv6协议)、TCP(TCP协议)和UDP(UDP协议)

image.png

分析

回到捕捉界面,我们能很清晰的看到一次tcp从连接到断开的流程

image.png

现在我们根据我平时看到的tcp连接的图来一步一步分析

image.png

第一次握手

客户端发送SYN(seq=x)报文给服务端,进入SYN_SEND状态。

image.png

在第一次建立TCP连接时,首先需要客户端向服务器发起建立连接的请求及第一次握手的报文。在该报文中,SYN字段值为1。由于之前的连接不存在,所以没有对之前接收进行确认,故ACK字段被置为0。同时,由于连接还没有建立,不能发送数据,所以序列号也为0。

image.png

第二次握手

服务器端收到SYN报文,回应一个SYN(seq=y)ACK(ack=x+1)报文,进入SYN_RCVD状态

image.png

第二次握手的报文由服务器发送,需要对第一次握手的报文进行回复确认,因此ACK字段应该置为1。同时,由于仍然是TCP连接建立的过程,所以SYN字段置为1;没有数据传输,故序列号为0。

image.png

第三次握手

客户端收到服务器端的SYN报文,将回应一个ACK(ack=y+1)报文,进入ESTABLISHED状态。此时三次握手完成,TCP客户端和服务器端成功地建立连接,就可以开始传输数据了。

image.png

客户端收到第二次握手的报文之后,对服务器发送第三次握手的报文。在该报文中,需要对第二次握手的报文进行确认,即ACK字段置为1。此时连接已经建立,SYN字段被置为0,同时可以发送数据,故序列号不再为0。

image.png

断开连接

image.png

image.png

第一次挥手

客户端发送一个FIN,用来关闭客户端到服务器的数据传送,此时客户端进入TIME_WAIT1状态。

image.png

客户端主动断开连接,所以向服务器发送FIN数据报。

image.png

第二次挥手

服务器收到这个FIN,它回应一个ACK给客户端,确认号为收到的序号加1(与SYN一样,一个FIN占用一个序号)。此时,服务器进入CLOSE_WAIT状态,客户端进入TIME_WAIT2状态。

image.png

服务器被动断开,所以发送ACK数据包,对主动断开数据包进行确认。

image.png

第三次挥手

当服务器端也没有要传送的数据时,服务器关闭与客户端的连接,发送一个FIN给客户端,服务器进入LAST_ACK状态。

image.png

服务器处理完自己的逻辑,发送FIN数据包到客户端。

image.png

第四次挥手

客户端收到FIN后,客户端进入TIME_WAIT状态。然后,发送一个ACK给服务器,并将确认号设置为收到序号加1。等待2MSL(120秒)后,服务器端进入CLOSED状态,完成四次挥手

image.png

客户端对服务器发送的端口数据包发送ACK数据包进行确认。

image.png