您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
使用JMeter测试TCP协议
 
作者: jmeter相关技术交流
   次浏览      
2022-3-11
 
编辑推荐:
本文主要介绍如何使用JMeter对TCP协议进行测试 ,希望对您的学习有所帮助。
本文来自CSDN,由火龙果软件Alice编辑推荐。

本文主要介绍如何使用JMeter对TCP协议进行测试

1、TCP概念

2、TCP协议的三次握手

3、TCP取样器参数介绍

4、Wireshark抓包和开发TCP脚本

一、TCP概念

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。数据传输时,应用程序向TCP层发送数据流,TCP就会将接受到的数据流切分成报文段(会根据当前网络环境来调整报文段的大小),然后经过下面的层层传递,最终传递给目标节点的TCP层。为了防止丢包,TCP协议会在数据包上标有序号,对方收到则发送ACK确认,未收到则重传。这个步骤就是我们通常所说的TCP建立连接的三次握手。同时TCP会通过奇偶校验和的方式来校验数据传输过程中是否出现错误。

二、TCP协议的三次握手

第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

实际抓包验证:在16734 -> 808中,16734是本地(客户端)端口,808是服务器的端口。808端口和16734端口之间的三次来回就是"三次握手"过程。

注意到”第一次握手”客户端发送的TCP报文中以[SYN]作为标志位,并且客户端序号Seq=0;

接下来”第二次握手”服务器返回的TCP报文中以[SYN,ACK]作为标志位;并且服务器端序号Seq=0;确认号Ack=1(“第一次握手”中客户端序号Seq的值+1);

最后”第三次握手”客户端再向服务器端发送的TCP报文中以[ACK]作为标志位;

三、TCP取样器参数介绍

打开jmeter,点击测试计划》添加》配置元件》TCP取样器配置

TCP Sampler提供了3个报文编码类型的实现,分别是

1.org.apache.jmeter.protocol.tcp.sampler. TCPClientImp

2.org.apache.jmeter.protocol.tcp.sampler. BinaryTCPClientImpl

3.org.apache.jmeter.protocol.tcp.sampler. LengthPrefixedBinaryTCPClientImpl

1)TCPClientImpl以文本编辑器中所编辑的纯文本为内容进行发送。

2)BinaryTCPClientImpl以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的

字节内容进行发送。

3)LengthPrefixedBinaryTCPClientImpl在BinaryTCPClientImpl基础上默认以发送内容的长度为

字节前缀进行填充。

1)Re-use connection: 如果选中,连接会一直处于打开状态,否则读取到数据之后就关闭。

2)Close connection: 如果选中,在TCP Sampler运行完毕之后就会被关闭。

3)SO_LINGER:该配置项用于控制在关闭连接之前是否要等待缓冲区中的数据发送完成。如果SO_LINGER选项指定了

值,则在得到关闭连接的请求之后还会等待指定的秒数以完成缓冲区中数据的发送,在指定的SO_LINGER秒数完成后,

关闭连接。因此,如果你把该选项设置成0,那么所有连接在收到关闭连接的时候都会立即关闭,避免产生很多处于

TIME_WAIT状态的套接字。

4)End of line(EOL) byte value:响应数据的最后2位,转换为10进制的值。取值区间[-128,127]

5)Connect Timeout:与服务器套接字应用连接超时时间(毫秒)。

6)Response Timeout:响应超时时间(毫秒),这个值的设置跟End of line(EOL) byte value有

关系,如果End of line(EOL) byte value中的值设置不正确,会导致JMeter一直在等待无法结束,

但是如果指定了Response Timeout这个值的话,在到达这个值的时候就关闭连接。

7)设置无延迟:是否需要使用该选项,需要跟实际的业务情况结合。

四、Wireshark抓包和开发TCP脚本

打开Wireshark,然后双击网络为Microsoft:WLAN wifi网络

然后打开需要抓包的系统,执行登录、查询操作,抓包的请求如下

1)显示过滤器:用于过滤,可以依据IP和TCP流来做过滤需要的请求;

2)封包列表:显示抓取到的封包,显示有源地址和目标地址,端口号。 列表颜色不同,代表不同协议;

3)封包详细信息: 显示选取行封包中的字段;

4)16进制数据:显示选取行封包详细信息对应的16进制数据;

可以在抓包页面添加过滤器,点击+按钮,输入标签、过滤器,点击OK,该过滤器就会显示在过滤器右侧,方便下次使用,下图ip.dst==10.16.24.165,代表过滤目标服务器ip为10.16.24.165的请求数据

选中过滤好的TCP请求,右键点击》追踪流》TCP流

追踪TCP流,显示和保存数据选择原始数据(16进制请求)

首先在Jmeter TCP取样器配置公共信息,由抓包信息可知,TCPClient 需要填写BinaryTCPClientImpl 服务器ip为10.16.24.165,端口为808,End of line为01

追踪TCP流,左下角选择从客户端(本地ip)发送到服务器的请求进行过滤,这样显示的请求就是TCP发送的请求,把请求一条条复制到TCP取样器即可

线程组》添加》Sample》TCP取样器,将请求复制到要发送的文本即可,因为系统特殊性,第一条TCP请求信息的响应结尾与其他不同,故第一个TCP取样器的EOL值不同,需要单独申明,下图只截图2条TCP请求

可以根据返回的结果,通过在线转换得到End of line,转换地址https://tool.oschina.net/hexconvert/

全部的请求添加完毕,执行结果如下,经过和实际抓包的响应结果对比,结果一致

也可以添加断言,从抓包的查询结果中copy一段进行断言即可,如下图

如果需要对查询TCP请求进行参数化,只需要提前把请求参数转换成16进制,然后使用CSV参数化即可

[声明]本站文章版权归原作者所有 如涉及作品内容、版权和其它问题,请与我们联系,我们将在第一时间删除内容!

 

 

   
次浏览       
相关文章

HTTP协议详解
nginx架构模型分析
SD-WAN那些事
5G与边缘计算
 
相关文档

无线技术之物联网概论
IPv6应用和实现技术
物联网应用范围及实例
物联网应用技术
相关课程

无线传感网络技术
物联网与边缘计算
物联网关键技术、安全与边缘计算
物联网技术架构与应用

最新活动计划
SysML和EA系统设计与建模 7-26[特惠]
Python、数据分析与机器学习 8-23[特惠]
软件架构设计方法、案例与实践 8-23[特惠]
嵌入式软件架构设计 8-22[线上]
Linux内核编程及设备驱动 7-25[北京]
 
 
最新文章
云原生架构概述
K8S高可用集群架构实现
容器云管理之K8S集群概述
k8s-整体概述和架构
十分钟学会用docker部署微服务
最新课程
云计算、微服务与分布式架构
企业私有云原理与构建
基于Kubernetes的DevOps实践
云平台架构与应用(阿里云)
Docker部署被测系统与自动化框架实践
更多...   
成功案例
北京 云平台与微服务架构设计
通用公司GE Docker原理与实践培训
某军工研究单位 MDA(模型驱动架构)
知名消费金融公司 领域驱动设计
深圳某汽车企业 模型驱动的分析设计
更多...