使用JMeter测试TCP协议

本文主要介绍如何使用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协议的三次握手
  1. 第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;

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

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

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


    image
  5. 实际抓包验证:在16734 -> 808中,16734是本地(客户端)端口,808是服务器的端口。808端口和16734端口之间的三次来回就是"三次握手"过程。
    注意到”第一次握手”客户端发送的TCP报文中以[SYN]作为标志位,并且客户端序号Seq=0;
    接下来”第二次握手”服务器返回的TCP报文中以[SYN,ACK]作为标志位;并且服务器端序号Seq=0;确认号Ack=1(“第一次握手”中客户端序号Seq的值+1);
    最后”第三次握手”客户端再向服务器端发送的TCP报文中以[ACK]作为标志位;


    image
  • 三、TCP取样器参数介绍
  1. 打开jmeter,点击测试计划》添加》配置元件》TCP取样器配置


    image
  2. TCP Sampler提供了3个报文编码类型的实现,分别是
    org.apache.jmeter.protocol.tcp.sampler. TCPClientImp
    org.apache.jmeter.protocol.tcp.sampler. BinaryTCPClientImpl
    org.apache.jmeter.protocol.tcp.sampler. LengthPrefixedBinaryTCPClientImpl
    1)TCPClientImpl以文本编辑器中所编辑的纯文本为内容进行发送。
    2)BinaryTCPClientImpl以文本编辑器中所编辑的16进制字符(hex)内容为基础转换为二进制的
    字节内容进行发送。
    3)LengthPrefixedBinaryTCPClientImpl在BinaryTCPClientImpl基础上默认以发送内容的长度为
    字节前缀进行填充。


    image
  3. 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)设置无延迟:是否需要使用该选项,需要跟实际的业务情况结合。


    image
  • 四、Wireshark抓包和开发TCP脚本
  1. 打开Wireshark,然后双击网络为Microsoft:WLAN wifi网络


    image
  2. 然后打开需要抓包的系统,执行登录、查询操作,抓包的请求如下
    1)显示过滤器:用于过滤,可以依据IP和TCP流来做过滤需要的请求;
    2)封包列表:显示抓取到的封包,显示有源地址和目标地址,端口号。 列表颜色不同,代表不同协议;
    3)封包详细信息: 显示选取行封包中的字段;
    4)16进制数据:显示选取行封包详细信息对应的16进制数据;


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


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


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


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


    image

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


    image

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


    image

    image

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

    image

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


    image

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


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

如果文章对你有帮助,欢迎关注本人公众号,公众号与本平台文章同步,方便大家查阅,本人会持续推出与测试有关的文章,与大家分享测试技术,每一篇原创文章都是用心编写,杜绝抄袭复制


QQ技术交流群:加群请输入验证信息 简书
              

在这里插入图片描述


微信二维码关注公众号:

在这里插入图片描述

关注之后,回复资源下载,即可获取本人共享的各种资源下载地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dkyHNY2D-1569554485737)(https://s1.51cto.com/images/blog/201908/06/2e62f8806e1dc1c391c4332ac7fd70b1.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341