使用wireshark抓取Tcp三次握手

Posted Ischanged

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用wireshark抓取Tcp三次握手相关的知识,希望对你有一定的参考价值。

文章目录

wireshark的下载安装

软件的下载可以直接去官网下载 wireshark,选择自己电脑适合的版本就行。

但是不咋推荐,原因是国外网站访问速度太慢,写博文的时候我去官方下载安装包还下不下来,之后去搜狗下载了一个安装包,进行安装,点击安装包一路next进行安装,其中安装过程中需要注意的我会单独说明下。
阅读许可:

勾选下面几个选项,有些默认没有勾选:

TCP协议段格式简单介绍

TCP,即Transmission Control Protocol,传输控制协议。人如其名,要对数据的传输进行一个详细的控制。
TCP协议的特点

  • 有连接

  • 面向字节流(数据传输工程中是以一个一个字节为基本单位的)

  • 可靠传输(发送方向接收方发送数据后,发送方给以回应,告诉接收方已经收到数据了)

  • 全双工(收发双发可以同时发数据,也可已接收数据)
    TCP协议段格式

  • 源/目的端口号:表示数据从一台主机的哪个程序来,要到另一台主机的哪一个程序去。

  • 32位序号,对要传输的数据进行编号,每一个字节对应一个序号,依次进行累加

  • 32位确认序号,接收方收到数据后,返回一个确认应答数据报,里面就包含一个确认序号,表示确认序号之前的数据接收方都收到了,TCP数据报里面的序号和确认序号是保证TCP可靠传输的一种重要方式。

  • 4位首部长度,单位是4个字节,那么TCP报头的最大数据大小就是60个字节。

  • 保留位留作他用,用于之后TCP协议的迭代更新。

  • 6位标志位:
    URG:紧急指针是否有效
    ACK:带有ACK标识的数据报称为确认报文段
    PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走
    RST:对方要求重新建立连接;我们把携带RST标识的称为复位报文段
    SYN:请求建立连接;我们把携带SYN标识的报文称为同步报文段
    FIN:通知对方,本端要关闭了,我们称携带FIN标识的为结束报文段
    上面六个标志位就是TCP报头里面的六个比特位,默认情况下是0,当被使用的时候就变为1了。
    其他字段本篇博客不做介绍。

确认应答机制介绍

TCP协议的核心特性就是可靠性,而保证可靠性的核心机制就是确认应答机制,TCP在保证可靠和效率的时候引用了很多机制来实现,有确认应答,超时重传,连接管理(三次握手,四次挥手),滑动窗口(保证效率)等。下面就介绍一下确认应答有助于理解连接管理。**由于网络传输环境复杂多样,导致数据传输的不可靠性,如后发先至就是一种情况,**如下图:我分别给我的朋友小明发送了,两个数据报,先后到达表达的意思完全不一样,

本来小明想表达的是,我请他喝奶茶ok,做作业滚,但由于网络环境的复杂多样,导致它发送给我的数据报先发后至,造成了,我请他喝奶茶滚,做作业ok,这样发送双方要表达的意思就全变了,**因此我们可以在发送数据报的时候,就给每个数据报的每一个字节编一个号,这个编号叫序号,接收方收到数据后发送确认报文段,确认报文段里面也有一个针对发送方发送序号的确认序号,通过这确认序号对收到的数据进行确认,这个确认序号也是TCP报头里面的一个字段,**这样就可以避免这种混乱的情况了。
上面我已经介绍了tcp传输的数据的基本单位是字节,而不是像上面我随意画的那样传输一条一条的数据。tcp针对每一个字节的数据进行编号。编号的最大范围是32个比特位表示的最大范围,如下面的图可以简单看一下

上面的数据报的编号范围是从1开始编号,但也不一定,也可以以其他数字进行初始编号。TCP的确认应答机制大致如下图:

经过上面的简单了解了TCP的相关知识后我们就可以进行抓包了。

使用wireshark抓取TCP的三次握手

首先三次握手的流程我们应该清楚,大致如下图。

点击WLAN选择我们的的网卡,我们的主机就是通过这一块网卡和其他主机进行数据交互的,抓取通过这一块网卡的数据进行TCP三次握手分析。

我以抓取LeetCode网站为例,首先我在dos窗口,通过ping命令,来获取LeetCode网站的ip地址之后用于在wireshark里面进行数据的过滤分析。

打开wireshark点击那个蓝色的鲨鱼鳍,开始捕获新的分组并清空之前的分组,开始博捕获

之后快速在浏览器中访问LeetCode网站,之后在wireshark中停止捕获分组进行数据分析,停止捕获分组就点击开始捕获分组的右边的那个正方形,未停止捕获前是红色的,停止捕获后就是灰色的了。之后进行数据过滤,因为我们这台主机同一时刻可能在和不同主机的许多进程间进行数据传输也会和相同主机的不同进程进行数据交互,过滤数据后有助于数据的分析。
捕获暂停后,我在wireshark上面的过滤框里面输入ip.addr == 203.107.53.81 and tcp进行过滤,过滤出tcp协议,ip地址和203.107.53.81相关的数据包,过滤如图。

从图中看到,TCP好像建立了好几次握手,但是那是我的主机的不同进程和LeetCode网站的服务器端口号为443的进程进行通信,我只选取其中一个进程进行分析就行。选取端口号为51175的进程进行分析。TCP三次握手的一个重要目的就是确定通信双发的收发能力良好和进行一些参数的约定,如初始序列号的确定,序列号和确认序列号的讲解就在TCP协议段格式介绍那里。
第一次握手:Seq=0,初始序号为0,也就是要传输的数据第一个字节的编号为0,其实不是为0,只是wireshark这个软件帮我们设置的相对序列号,客户端首先向服务器发送一个SYN报文段请求建立连接,这时这个字段的值就变成了1,之后我们也可以在wireshark中观察下。对于传输的数据,数据报头里面的字段SYN,ACK和值也可以在wireshark里面看到,如果相应的字段后面标识了Set表示设置的该值,否则该值没有设置。如看第一次握手的SYN值,点击tcp协议,再点击Flags就可以查看了。


第二次握手:服务器向客户端发送SYN(同步报文段),ACK(确认报文段)并且值都被激活为1,同步报文段表示服务器要和客户端建立连接,确认报文段,表示服务器收到客户端的请求,告诉客户端。这样第二次握手的初始序号Seq=0也是一个相对序号,服务器返回一个确认序列号Ack=0+1,表示客户端发来数据编号为0的数据服务器已经收到了,并且向客户端要下一个数据包.wireshark截图分析如下:

第三次握手,客户端返回一个ACK确认报文段 ,表示确认收到客户端发来的数据,里面的确认序Ack=0+1的值也变成了1,表示收到服务器发来的序号为0的数据,wireshark数据分析图如下:
(说明上面TCP建立连接的图里面的ack和我这里说的Ack其实都是指一个东西,就是确认序号,Ack这是wireshark里面的东西,seq,Seq就是初始的数据序号,只是表示不同而已,不同的资料,文章说法不一样)
至此TCP的三次握手完成,可以进行后续的数据传输了。使用抓包工具抓取tcp的三次握手,可以加深我们对协议格式的理解,和tcp的一些机制的理解。

以上是关于使用wireshark抓取Tcp三次握手的主要内容,如果未能解决你的问题,请参考以下文章

使用wireshark抓取Tcp三次握手

使用wireshark 抓取 http https tcp ip 协议进行学习

基于 Wireshark 学习 TCP 三次握手

TCP三次握手四次挥手

Wireshark浅析Tcp三次握手

使用 WireShark 分析 TCP/IP 三次握手 和 四次挥手