1:CC攻击是正常的业务逻辑,大并发让你处理不过来,处理XP SP2,以上的系统都封了RAW格式协议封包自定义,除了基于应用层改协议,之外都是模拟或请求来测试传输层
2:UDP不会粘包,不会少包,除非缓存区满
3:TCP主要特征有:
1、3次握手连接
2、4次挥手断开
3、拥塞控制
4、重传控制
5、流传输方式,服务端需要额外解析方面有:协议粘包,协议少包,协议丢包、异常协议响应、正常协议响应

UDP主要特征有:
1、包传输方式
2、无粘包错包
3、且无连接,无拥塞控制,无重传机制

4:TCP主要特征有:
1、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)异常数据
1)有效数据
包体 - 这里用的有效数据既为超大包体,如喊话等可变协议,超过服务端缓存器上限

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

TCP与UDP的一些心得的更多相关文章

  1. 实现TCP、UDP相互通信及应用

    实验名称  Socket编程综合实验(1) 一.实验目的: 1.理解进程通信的原理及通信过程 2.掌握基于TCP和UDP的工作原理 3.掌握基本的Socket网络编程原理及方法 二.实验内容 1.掌握 ...

  2. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  3. 【校验】TCP和UDP的校验和

    一开始,私以为校验和只是简单的求和得到的结果,后来在TCP和UDP里面看到使用的校验和方式有点奇怪--二进制反码(循环进位)求和. 人类的认知过程必将从简单到复杂,看下这个二进制反码循环求和是啥子意思 ...

  4. 初入网络系列笔记(2)TCP和UDP

    一.借鉴说明,本博文借鉴以下博文 1.BlueTzar,TCP/IP四层模型, http://www.cnblogs.com/BlueTzar/articles/811160.html 2.叶剑峰,漫 ...

  5. 传输层协议TCP和UDP

    本文力图简洁,让读者对TCP和UDP有个初步的认知.闲话少说,现在开始吧.TCP和UDP都是传输层的协议.TCP通过三次握手建立可靠连接,对未送达的消息重新进行发送.UDP不建立连接而直接发送,对未送 ...

  6. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  7. http、tcp、udp、OAUTH2.0网络协议区别

                    一.先来一个讲TCP.UDP和HTTP关系的 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RAR ...

  8. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  9. OSI参考模型及各层功能,TCP与UDP的区别

    OSI参考模型:ISO/IEC 7498标准定义了网络互联的7层结构模型,即开放系统互连参考模型. OSI参考模型定义了开放系统的层次结构.层次之间的相互关系,以及各层所包括的可能的服务.OSI的服务 ...

随机推荐

  1. Python 语言规范(Google)

    Python语言规范 Lint tip 对你的代码运行pylint 定义: pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dy ...

  2. [redis读书笔记] 第二部分 集群

    1. 一个集群会包含多个节点(一个节点就是一个reid是服务器),CLUST MEET <ip><port>可以添加一个node到集群,命令执行后,两个node之间就会进行握手 ...

  3. pytorch之 classification

    import torch import torch.nn.functional as F import matplotlib.pyplot as plt # torch.manual_seed(1) ...

  4. 普通台式机装centos7系统

    一.环境 台式机配置如下: 配置:CPU -i5-7400 内存:8G 硬盘:1T 原装系统: win7 64x 使用软碟通刻录U盘做系统启动盘,教程: 教你用UltraISO+U盘制作启动盘和安装各 ...

  5. IntelliJ 更改项目使用的 JDK 版本

    在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改. 选择 File 后,然后选择 ...

  6. MySQL命令随手记之alter

    修改表名 alter table 表名 rename 新表名; //修改table名 添加.删除.修改字段 alter table 表名 add [column] 列名 数据类型; //添加colum ...

  7. Redis入门(介绍、搭建)——Windows、Centos环境

    一.介绍 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cac ...

  8. 少量代码设计一个登录界面(二) – .NET CORE(C#) WPF开发

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 阅读导航 本文背景 代码实现 本文参考 源码 1. 本文背景 同上篇文章<少量代码设计一 ...

  9. 网易MuMu模拟器不显示Menu(菜单)键的解决办法

    解决方法一: 前提:需要一个键盘 步骤: 1.直接按下键盘上的Menu键. 解决方法二: 前提:需要Root之后的文件浏览器 步骤: 1.在文件管理器中打开 /System 文件夹: 2.复制 bui ...

  10. 「Flink」事件时间与水印

    我们先来以滚动时间窗口为例,来看一下窗口的几个时间参数与Flink流处理系统时间特性的关系. 获取窗口开始时间Flink源代码 获取窗口的开始时间为以下代码: org.apache.flink.str ...