tcpCopy 1.0 的最新架构分为三个角色:

  • Online Server(OS):上面要部署 TCPCopy,从数据链路层(pcap 接口)抓请求数据包,发包是从IP层发出去;
  • Test Server(TS):最新的架构调整把 intercept 的工作从 TS 中 offload 出来。TS 设置路由信息,把 被测应用 的需要被捕获的响应数据包信息路由到 AS;
  • Assistant Server(AS):这是一台独立的辅助服务器,原则上一定要用同网段的一台闲置服务器来充当辅助服务器。AS 在数据链路层截获到响应包,从中抽取出有用的信息,再返回给相应的 OS 上的 tcpcopy 进程。

 

如上图所示,假设我们需要导入Apache的80端口流量, 部署图如上。

具体部署方法请参考: 浅谈压测之一Tcpcopy流量导入 http://jixing.blog.51cto.com/821242/1674329

 

tcpcopy从线上服务器的IP层抓取在线请求的数据包,修改相关属性,利用raw socket output技术(packet injection 技术之一)将其发送给测试服务器进行测试。

发送到测试服务器的数据包会在TCP/IP协议栈被识别,其中带有payload(tcp data)的数据包最终进入到测试服务器的上层应用(如nginx),上层应用在处理完请求之后,将响应传递给测试服务器的TCP/IP协议栈。

在测试服务器上启用ip_queue模块,并使用iptables在IP层将响应结果数据包发往QUEUE(ip_queue)。

测试服务器上运行在用户空间的拦截程序(intercept进程),通过打开netlink的socket接受内核通过ip_queue所传递来的网络数据包(即上层应用的响应内容)进行裁定,将结果返回内核,进行出队列的操作。intercept进程默认会丢弃上层应用的响应内容,返回ip header,以释放tcp连接。

intercept进程也可以通过-x(passlist)参数,不drop指定ip lists发出请求的响应内容。默认drop是为了:

1 减少出口带宽占用,节约成本
2 不影响客户端(线上服务)的`TCP/IP`协议栈
3 不会在互联网上产生ghost数据包

 

参考资料:

TCPCOPY 1.0 使用案例
http://blog.51web.net/9

真刀真枪压测:基于TCPCopy的仿真压测方案
http://www.cnblogs.com/zhengyun_ustc/p/tcpcopy.html

最新文章

  1. xss篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
  2. php查询文件扩展名
  3. lecture16-联合模型、分层坐标系、超参数优化及本课未来的探讨
  4. nginx实现http反向代理+负载均衡
  5. ORACLE清除某一字段重复的数据(选取重复数据中另一个字段时期最大值)
  6. Xtreme Toolkit Pro 免费下载地址
  7. insertAdjacentHTML
  8. MongoDB 的分组操作 In C#
  9. 当winform窗体的Bordestyle设置为None时,鼠标可以拖动窗体的办法
  10. javascript的框架演化
  11. Android 使用 RemoteViews 发送自定义通知 ,遇到 Couldn't expand RemoteViews问题总结
  12. Android : Activity 和 TabActivity 共用一个OptionMenu
  13. perl 改变对象属性
  14. 促销R语言应用性能
  15. Certificates does not conform to algorithm constraints
  16. Luogu P4643 【模板】动态dp
  17. XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)--J.Cave
  18. 【repost】Python正则表达式
  19. JavaScript基础二
  20. CICD 基础

热门文章

  1. python+pcap+dpkt 抓包小实例
  2. IDEA批量修改变量名操作
  3. oh-my-zsh 安装及使用
  4. JVM中的对象生命周期
  5. Java零基础教程(一)环境搭建
  6. php7 改为从栈上分配内在的思路
  7. 【学习笔记】linux bash script
  8. CAS优缺点
  9. (转)Python标准库:内置函数print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
  10. (转) centos7下创建mysql5.6多实例