tcpcopy简介
2015-12-15 19:44
585 查看
本文内容是整理自 王斌的博客(http://blog.csdn.net/wangbin579)和郑钧的博客(http://www.cnblogs.com/zhengyun_ustc),以便让自己可以有个宏观的认识。
Tcpcopy是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现bug,增加上线信心。
Tcpcopy是由网易技术部王斌(http://weibo.com/tcpcopy)在王波的工作基础上开发的,2011年9月开源的项目(https://github.com/session-replay-tools/tcpcopy https://github.com/wangbin579/tcpcopy ),目前最新版本 1.0.0 ,后续相关内容都是基于 1.0.0 的。
tcpcopy 不是基于应用层的复制,而是基于底层数据包的请求复制,这么做的好处是:可以做到无需穿透整个协议栈,路程最短的,可以从数据链路层抓请求包,从数据链路层发包,路程一般的,可以在IP层抓请求包,从IP层发出去,不管怎么走,只要不走TCP,对在线的影响就会小得多。
七层网络模型如下图:
tcpcopy 经历了三次架构调整,参考:http://blog.csdn.net/wangbin579/article/details/8949315
这三次架构的基本原理都一样,本质是利用在线数据包信息,模拟tcp客户端协议栈,欺骗测试服务器的上层应用服务。由于tcp交互是相互的,一般情况下需要知道测试服务器的响应数据包信息,才能利用在线请求数据包,构造出适合测试服务器的请求数据包,因此只要基于数据包的方式,无论怎么实现(除非是tcp协议改的面目全非),都需要返回响应包的相关信息。
三种架构的差别就在于在什么地方截获响应包。
具体这三种架构的差别请看上面文章,简单差别如下:
方案一:tcpcopy是从数据链路层(pcap接口)抓请求数据包,发包是从IP层发出去
方案二:tcpcopy默认从IP层抓包,从IP层发包
方案三:跟方案一一样,不过引入了独立的 intercept(assistant server)
后面的内容我们以第三套方案来展开。
它的数据流转和部署架构如下图:
tcpcopy代码下载地址:
git clone http://github.com/session-replay-tools/tcpcopy
configure:
./configure (默认raw socket方式抓包)
或者
./configure --pcap-capture (pcap方式抓包,在某些场景下,丢包率会高于raw socket方式抓包,这时候需要类似pf_ring的支持)
对于intercept:
代码下载地址:
git clone http://github.com/session-replay-tools/intercept
configure方式:
./configure
参考: http://blog.csdn.net/wangbin579/article/details/8950282
具体的生产环境和镜像环境数据传递流程图如下:
TCPcopy 从数据链路层 copy 端口请求,然后更改目的 ip 和目的端口。
将修改过的数据包传送给数据链路层,并且保持 tcp 连接请求。
通过数据链路层从 online server 发送到 test server。
在数据链路层解封装后到达 nginx 响应的服务端口。
等用户请求的数据返回结果后,回包走数据链路层。
通过数据链路层将返回的结果从 test server 发送到 assistant server。注:test server 只有一条默认路由指向 assistant server。
数据到达 assistant server 后被 intercept 进程截获。
过滤相关信息将请求状态发送给 online server 的 tcpcopy,关闭 tcp 连接。
最新的1.0版本如何使用离线模式
https://github.com/session-replay-tools/tcpcopy/issues/215
对于tcpcopy,configure的时候加上--offline
--offline replay TCP streams from the pcap file
执行的时候,加上-i参数,用来指定pcap文件地址
对于intercept,不用变化
参考资料:
真刀真枪压测:基于TCPCopy的仿真压测方案
/article/4595112.html
如何利用pcap接口从数据链路层发包?
http://blog.csdn.net/wangbin579/article/details/10148247
利用tcpcopy引流做模拟在线测试
http://www.searchtb.com/2012/05/using-tcpcopy-to-simulate-traffic.html
Tcpcopy是一个分布式在线压力测试工具,可以将线上流量拷贝到测试机器,实时的模拟线上环境,达到在程序不上线的情况下实时承担线上流量的效果,尽早发现bug,增加上线信心。
Tcpcopy是由网易技术部王斌(http://weibo.com/tcpcopy)在王波的工作基础上开发的,2011年9月开源的项目(https://github.com/session-replay-tools/tcpcopy https://github.com/wangbin579/tcpcopy ),目前最新版本 1.0.0 ,后续相关内容都是基于 1.0.0 的。
tcpcopy的工作原理
TCPCopy 是一种请求复制(复制基于 TCP 的 packets)工具 ,通过复制在线数据包,修改 TCP/IP 头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。tcpcopy 不是基于应用层的复制,而是基于底层数据包的请求复制,这么做的好处是:可以做到无需穿透整个协议栈,路程最短的,可以从数据链路层抓请求包,从数据链路层发包,路程一般的,可以在IP层抓请求包,从IP层发出去,不管怎么走,只要不走TCP,对在线的影响就会小得多。
七层网络模型如下图:
tcpcopy 经历了三次架构调整,参考:http://blog.csdn.net/wangbin579/article/details/8949315
这三次架构的基本原理都一样,本质是利用在线数据包信息,模拟tcp客户端协议栈,欺骗测试服务器的上层应用服务。由于tcp交互是相互的,一般情况下需要知道测试服务器的响应数据包信息,才能利用在线请求数据包,构造出适合测试服务器的请求数据包,因此只要基于数据包的方式,无论怎么实现(除非是tcp协议改的面目全非),都需要返回响应包的相关信息。
三种架构的差别就在于在什么地方截获响应包。
具体这三种架构的差别请看上面文章,简单差别如下:
方案一:tcpcopy是从数据链路层(pcap接口)抓请求数据包,发包是从IP层发出去
方案二:tcpcopy默认从IP层抓包,从IP层发包
方案三:跟方案一一样,不过引入了独立的 intercept(assistant server)
后面的内容我们以第三套方案来展开。
tcpcopy 架构
tcpcopy运行需要intercept的支持,tcpcopy负责抓包和发包工作,而intercept负责截获应答包它的数据流转和部署架构如下图:
tcpcopy代码下载地址:
git clone http://github.com/session-replay-tools/tcpcopy
configure:
./configure (默认raw socket方式抓包)
或者
./configure --pcap-capture (pcap方式抓包,在某些场景下,丢包率会高于raw socket方式抓包,这时候需要类似pf_ring的支持)
对于intercept:
代码下载地址:
git clone http://github.com/session-replay-tools/intercept
configure方式:
./configure
参考: http://blog.csdn.net/wangbin579/article/details/8950282
具体的生产环境和镜像环境数据传递流程图如下:
TCPcopy 从数据链路层 copy 端口请求,然后更改目的 ip 和目的端口。
将修改过的数据包传送给数据链路层,并且保持 tcp 连接请求。
通过数据链路层从 online server 发送到 test server。
在数据链路层解封装后到达 nginx 响应的服务端口。
等用户请求的数据返回结果后,回包走数据链路层。
通过数据链路层将返回的结果从 test server 发送到 assistant server。注:test server 只有一条默认路由指向 assistant server。
数据到达 assistant server 后被 intercept 进程截获。
过滤相关信息将请求状态发送给 online server 的 tcpcopy,关闭 tcp 连接。
最新的1.0版本如何使用离线模式
https://github.com/session-replay-tools/tcpcopy/issues/215
对于tcpcopy,configure的时候加上--offline
--offline replay TCP streams from the pcap file
执行的时候,加上-i参数,用来指定pcap文件地址
对于intercept,不用变化
参考资料:
真刀真枪压测:基于TCPCopy的仿真压测方案
/article/4595112.html
如何利用pcap接口从数据链路层发包?
http://blog.csdn.net/wangbin579/article/details/10148247
利用tcpcopy引流做模拟在线测试
http://www.searchtb.com/2012/05/using-tcpcopy-to-simulate-traffic.html
相关文章推荐
- 搭建测试环境_连不上网络时处理总结
- 虚表 http://www.cnblogs.com/dsky/archive/2012/02/07/2340984.html
- HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法 血的教训
- DNS隧道之DNS2TCP实现
- 网络系统开发 20151215
- 网络包分析--tcp数据发送不出去
- JAVA HTTPS请求 HttpsURLConnection
- 搭建一个简单的基于web的网络流量监控可视化系统
- tomcat实现https安全访问
- TCP/IP, WebSocket 和 MQTT
- HTTP全部报文首部字段
- HTTP全部报文首部字段
- 理解HTTP幂等性
- 西门子s7200+cp243-1网络通信断电重启不能自恢复问题解决
- angularjs中$http、$location、$watch及双向数据绑定学习实现简单登陆验证
- angularjs中$http、$location、$watch及双向数据绑定学习实现简单登陆验证
- redhat下网络的配置
- Siege 一个用于Http, 但不能用于Https的负载测试工具 我操。。。。
- 关于网络层的封装的一点想法
- Android 加载网络图片并下载至本地SdCard