• 0
  • 1
分享
  • TCP与UDP的一些心得——软件测试圈
  • 恬恬圈 2021-01-26 14:27:36 字数 2754 阅读 1518 收藏 1

      1:CC攻击是正常的业务逻辑,大并发让你处理不过来,处理XP SP2,以上的系统都封了RAW格式协议封包自定义,除了基于应用层改协议,之外都是模拟或请求来测试传输

      2:UDP不会粘包,不会少包,除非缓存区满

      3:TCP主要特征有:

  1. 3次握手连接

  2. 4次挥手断开

  3. 拥塞控制

  4. 重传控制

  5. 流传输方式,服务端需要额外解析方面有:协议粘包,协议少包,协议丢包、异常协议响应、正常协议响应

      UDP主要特征有:

  1. 包传输方式

  2. 无粘包错包

  3. 且无连接,无拥塞控制,无重传机制

      4:TCP主要特征有:

  • 3次握手连接:

      一测试用例:压力机在请求大量握手链接后迅速关闭,需要大并发操作

      一测试逻辑点:测试服务端底层逻辑关闭socket的同时,又来新的socket链接请求,服务端底层逻辑这部分是否处理正常

      我测试的项目BUG:创建ID为5000的socket端口后,由于压力机关闭socket,导致服务端回收这个ID为5000的SOCKET,新来的TCP连接请求,由于5000的释放又使用上这个SOCEKT,这时服务端报错:新的SOCKET无法使用

      二测试用例:压力机在请求大量握手链接,需要大并发操作

      二测试逻辑点:测试服务端最大连接SOCKET数量,以保证服务端有可用的SOCKET资源分配,

      我测试的项目BUG:服务端创建5000个SOCKET后无法创建成功,因配置的JAVA内存不够及系统开放的端口数不够

      上述两点的测试工具实现:只有IOCP和AIO底层测试验证最有效,测试同时观察在 N并发/秒 得出瓶颈拐点

      5:4次挥手断开:

      测试用例:压力机设置SOCKET选项,在请求大量握手链接后迅速关闭,需要大并发操作

//快速关闭socket

::setsockopt(pUsoc, SOL_SOCKET, SO_REUSEADDR, (const char*)&on, sizeof(bool));//复用端口
::setsockopt(pUsoc, SOL_SOCKET, SO_DONTLINGER, (const char*)&off, sizeof(bool));//打开LINGER
::setsockopt(pUsoc, SOL_SOCKET, SO_LINGER, (const char*)&m_sLinger, sizeof(linger));//设置强制关闭SOCKET

      测试逻辑点:测试因压力机器人修改Socket配置,客户端主动断开,服务端无法得到4次挥手的通知包,导致需要N时间节点才关闭Socket/不关闭Socket

      项目测试BUG:因无法得到4次挥手包,服务端存在大量异常长连接,导致拒绝服务

      6:拥塞控制-简单理解为,堵死汽车排气孔,同时踩油门

      测试用例:压力机客户端设置1字节接受协议或1字节缓存区,同时请求需要响应的大数据:例如排行榜

      测试逻辑点:由于拥塞控制特殊性,TCP会开辟内存缓存这部分数据,简单说,服务端产生的协议多,但有效发出的少,系统缓存剩余协议越来越多,硬件监控服务端内存暴涨

      项目测试BUG:同上,设置好SOCKET参数后,请求排行榜数据,服务端内存暴涨,直接崩溃

      7:重传控制

      测试用例:搭建测试代理工具,对包传输顺序/丢包进行参数配置转发

      测试逻辑点:由于重传的特殊性是传输层控制,所以在应用层模拟丢包和乱序请求

      大家常用的kugou音乐的APP通过工具模拟重传控制,在试听音乐的时候,进行丢包和乱序测试,APP崩溃

      8:流传输方式,内容比较多,慢慢看

      测试用例:协议粘包 - 通过代理工具自动*N倍,既123变123123123123123123

      测试逻辑点:1)测试服务端最大可分割的数据包上限,2)测试服务端是否并发执行协议,如领取任务、购买物品、创建角色等等

      项目BUG:创建N个123角色在数据库中,且完整协议分割最大上限为4,后期调至20份/Max缓存区

      测试用例:协议少包 - 通过工具1字节发送,1)高速、2)慢速

      测试逻辑点:1)高速发送1字节,服务端读取处理协议,来消耗CPU资源,2)占用服务端缓存区长时间消耗资源,以上2点测试服务端对协议读取健壮性

      9:测试用例:服务端私有协议 - 构造异常数据及有效数据进行测试

      测试逻辑点:

      1)有效数据

  • 包体 - 这里用的有效数据既为超大包体,如喊话等可变协议,超过服务端缓存器上限

  • 协议接口 - 对于已知的服务端协议响应接口遍历,遍历测试是否有未开放的或频繁调用

  • 协议参数 - A使用B的参数如用户ID、数值类的:0 负数 边界值 正数溢出

      2)异常数据

  • 包体 - 修改包体边界值或自定义数据,既包体过短或超长数值

  • 协议接口 - 遍历服务端接口,既不存在的接口,自动+N修改

  • 协议参数 - 遍历字节既协议自动+N修改

  • 特殊协议 - 及发送非正常的协议如1字节 00 11 22 33 - FF

      项目BUG:

1)协议包体:移动协议修改包体数据,包体修改为8字节,既无协议接口的参数,服务端报错崩溃

2)协议参数:1、A用户使用B用户ID登陆,强制踢B下线、2、购买数量*金额超服务端变量上限,数值溢出倒贴钱给玩家、3、负数不用多说,卖东西-1,多送一件给玩家、4、有除法计算的地方使用0数值,服务端崩溃

3)协议接口:1、副本调用怪自爆协议,秒杀所有怪、2、角色在监狱中调用传送接口越狱

4)攻击类,并发N/秒请求大数据的协议接口,服务端内存Cpu暴涨,后期限制请求频率

      10:UDP主要特征有:包传输、无粘包、错包、无连接,无拥塞控制、无重传机制

      测试用例:应用层 - 1)协议测试同TCP 、2)大并发请求(性能测试同TCP)

      测试逻辑点:

      1)由于传输层无特殊处理,即传输层在协议测试上只有丢包、乱序、延迟等3项,测试方案同TCP的测试用例、

      2)应用层的方案延用TCP中测试用例:

  • 有效数据、

  • 异常数据

      1)有效数据

      包体 - 这里用的有效数据既为超大包体,如喊话等可变协议,超过服务端缓存器上限

      2)异常数据

      包体 - 修改包体边界值或自定义数据,既包体过短或超长数值


作者:咯咯老嫖客

原文链接:https://www.cnblogs.com/gegelaopiaoke/p/10610159.html


  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 登录、添加、删除、查询模块是我们经常遇到的,这些模块的测试点该如何考虑1)登录用户名和密码都符合要求(格式上的要求);用户名和密码都不符合要求(格式上的要求);用户名符合要求,密码不符合要求(格式上的要求);密码符合要求,用户名不符合要求(格式上的要求);用户名或密码为空;数据库中不存在的用户名,不存在的密码;数据库中存在的用户名,错误的密码;数据库中不存在的用户名,存在的密码;输入的数据前存在空格;输入正确的用户名密码以后按[enter]是否能登陆。2)添加要添加的数据项均合理,检查数据库中是否添加了相应的数据;留出一个必填数据为空;按照边界值等价类设计测试用例的原则设计其他输入项的测试用例...
            0 0 953
            分享
          •   HBase主要性能压力测试有两个,一个是 HBase 自带的 PE,另一个是 YCSB,先简单说一个两者的区别。PE 是 HBase 自带的工具,开箱即用,使用起来非常简单,但是 PE 只能按单个线程统计压测结果,不能汇总整体压测数据,更重要的是,PE 没有 YCSB 的 预设模板(Workload) 功能,测试场景单一,相较而言,YCSB 要强大的多,它的 Workload 功能非常实用,可以模拟更贴近实际使用场景的压力状况。下面分解介绍一下两款工具的使用方法。  1. YCSB  官方文档: https://github.com/brianfrankcooper/YCSB/blob/m...
            0 0 282
            分享
          •   当IT变得越来越敏捷,商业上的变化率需要更快地采用敏捷技术。  IT行业不止是有软件开发。我们不仅为我们的投资商创建基于软件的解决方案,也将解决问题的方案发行到生产环境中,一旦发布到生产环境里以后,我们还在生产环境里操作和维护那些方法。也有如企业架构,原型管理,数据管理还有其他跨解决问题方案的结构功能点并行发生在软件开发和运行中。最近,我决定研究这个问题:这些IT功能有多有效?我发现这其中有很多改进的空间。  从2014年的9月份到11月,我做了一个线上的调查,探寻几个常见的IT功能的有效性。该调查有117个回应者,其中大概一半的人在IT行业有20年或20年以上的经验(88%的人有10年或...
            1 1 1910
            分享
          •   (一)什么是敏捷测试  首先敏捷测试(Agile testing)是测试的一种,敏捷测试的理念是,和编码一样,测试是开发的一个关键部分。在敏捷中,测试被直接集成到软件开发过程中,以便尽早、频繁地发现bug。因此,测试人员可以在开发过程的每一个节点上发现问题,从而使产品快速走向发布。  (二)敏捷测试的特点  敏捷测试的特点有以下几点:  1) 高度迭代  2) 有周期性  3) 重点关注持续迭代地测试新开发的功能  4) 测试介入的时间特别早。  5) 强调从客户的角度,即从使用系统的用户角度,来测试系统。  (三)传统的瀑布模型  传统测试即基于瀑布模型开发的测试,瀑布模型将软件生命周期...
            0 0 577
            分享
          •   微软已经宣布结束对Windows 10 21H2版本的支持。该操作系统的特定版本将不再收到带有安全改进、错误修复和其他必要变化的每月更新。因此,那些使用Windows 10 21H2版本的人应该尽快更新到一个较新的版本,以保持他们的系统得到保护和更新。  Windows 10 21H2版在2021年下半年到来,变化清单不大。微软随产品对家庭版、专业版、专业教育版和工作站专业版SKU的18个月的技术支持。以商业为重点的版本,企业版、教育版、物联网企业版和企业多会话版将继续接受一年的更新 - 微软计划在2024年6月11日放弃对它们的支持。  微软在发布Windows 11原始版本的同时,还发...
            0 0 1262
            分享
      • 51testing软件测试圈微信