[dpdk] 使用pktgen生成tcp三次握手的测试流量
pktgen: http://dpdk.org/browse/apps/pktgen-dpdk/refs/
git clone git://dpdk.org/apps/pktgen-dpdk
pktgen doc:http://pktgen-dpdk.readthedocs.io/en/latest/
OS:Linux D128 3.10.0-693.el7.x86_64
OS2: Linux D129 3.10.0-327.el7.x86_64
dpdk: dpdk-stable-18.02.1/
pktgen: pktgen-3.5.0/
为了让彼此兼容,选了官网上最新的两个版本。
可以用:
lua脚本
或 seq命令
指定包序列,但是不能指定seq,ack等,所以还是无法模拟一个tcp握手过程。
http://pktgen-dpdk.readthedocs.io/en/latest/commands.html#runtime-options-and-commands
http://pktgen-dpdk.readthedocs.io/en/latest/lua.html#lua
tcpreplay:
http://tcpreplay.appneta.com/wiki/overview.html
可以用netmap驱动做高流量。
----------------------------------- update @ 20180602 ---------------------
Pktgen Ver: 3.5.1 (DPDK 18.05.0-rc6)
不指定core和端口map时,不好用
[root@D129 pktgen]# ./app/x86_64-native-linuxapp-gcc/pktgen -l1,, --master-lcore -- -m 2.0
查看seq:
Pktgen:/> page seq
加载seq,lua脚本
Pktgen:/> script /root/tong.lua
可以看见如下更新:
/ <Sequence Page> Copyright (c) <->, Intel Corporation
Port: , Sequence Count: of GTPu
Seq: Dst MAC Src MAC Dst IP Src IP Port S/D Protocol:VLAN CoS ToS Size TEID
* : ::::: ::::: 1.1.1.1 0.0.0.0/ / IPv4/TCP:
* : ::::: ::::: 2.2.2.2 0.0.0.0/ / IPv4/TCP:
tong.lua
[root@D129 ~]# cat tong.lua
-- Lua uses '--' as comment to end of line read the
-- manual for more comment options.
local seq_table_0 = { -- entries can be in any order
["eth_dst_addr"] = "0011:4455:6677",
["eth_src_addr"] = "0011:1234:5678",
["ip_dst_addr"] = "1.1.1.1",
["ip_src_addr"] = "2.2.2.2", -- the is the size of the mask value
["sport"] = , -- Standard port numbers
["dport"] = , -- Standard port numbers
["ethType"] = "ipv4", -- ipv4|ipv6|vlan
["ipProto"] = "tcp", -- udp|tcp|icmp
["vlanid"] = , -- -
["pktSize"] = , -- -
["teid"] = ,
["cos"] = ,
["tos"] =
};
pktgen.seqTable(, "", seq_table_0 ); local seq_table_1 = { -- entries can be in any order
["eth_dst_addr"] = "0011:1234:5678",
["eth_src_addr"] = "0011:4455:6677",
["ip_dst_addr"] = "2.2.2.2",
["ip_src_addr"] = "1.1.1.1", -- the is the size of the mask value
["sport"] = , -- Standard port numbers
["dport"] = , -- Standard port numbers
["ethType"] = "ipv4", -- ipv4|ipv6|vlan
["ipProto"] = "tcp", -- udp|tcp|icmp
["vlanid"] = , -- -
["pktSize"] = , -- -
["teid"] = ,
["cos"] = ,
["tos"] =
};
pktgen.seqTable(, "", seq_table_1 ); pktgen.set("", "seq_cnt", );
发包:
Pktgen:/> page main
Pktgen:/> start
正常情况下,能正常的发出了包。
::57.233082 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233088 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233094 IP 0.0.0.0. > 1.1.1.1.: Flags [.], seq :, ack , win , length : HTTP
::57.233100 IP 0.0.0.0. > 2.2.2.2.: Flags [.], seq :, ack , win , length : HTTP
目的IP,与预期不符。
--------------------- update @ 20180603 ----------------------
配置方法二:
创建文件cfg/tong.cfg
[root@D129 pktgen]# cat cfg/tong.cfg
setup = { 'devices' : ['00:04.0'],
'opts' : ['-b igb_uio']
} run = {
'app_name': 'pktgen',
'app_path': [
'./app/%(target)s/%(app_name)s',
'%(sdk)s/%(target)s/app/%(app_name)s',
],
'dpdk' : (
'-l 1,2',
'--master-lcore 1',
'-w 00:04.0'
),
'app' : (
'-T',
'-m 2.0',
'-f workspace/tong.lua'
),
}
使用 脚本启动:
[root@D129 pktgen]# ./tools/dpdk-run.py tong
-------------------- update @ 2018-08-23 --------------
dpdk: git::v18.08
pktgen: git::vpktgen-3.5.2
1. make dpdk
2. make pktgen
3. run:
[root@T9 pktgen-dpdk.git]# ./tools/run.py tong
4. 使用pcap
修改配置文件:
[root@T9 pktgen-dpdk.git]# cat cfg/tong.cfg
setup = { 'devices' : ['00:04.0'],
'opts' : ['-b igb_uio']
} run = {
'app_name': 'pktgen',
'app_path': [
'./app/%(target)s/%(app_name)s',
'%(sdk)s/%(target)s/app/%(app_name)s',
],
'dpdk' : (
'-l 1,2',
'--master-lcore 1',
'-w 00:04.0'
),
'app' : (
'-T',
'-m 2.0',
'-f tong.lua'
# '-s 0:/root/80-client.pcap'
),
'misc': (
'-f', 'themes/black-yellow2.theme'
)
}
这个时候,就可以把pcap中的包重放出来了.
5. random
执行命令:
Pktgen:/> enable random
Pktgen:/> set rnd 111111111111xxxx
源IP被修改为了 255.255.255.xxx, xxx为随机数.
查看输出结果:
但是, 不能做基于流的修改....
------------------- update @ 2018-08-04 ----------------------
[tcpreplay] tcpreplay高级用法--使用tcpreplay-edit进行循环动态发包
即使netmap + tcpreplay-edit 也不能满足需求. 因为 --unique-ip 参数的做法是源IP加一, 目的IP减一. 当时不能保证目的IP不变. 也不满足我们的LB测试需求.
看来... 只能自己写一个了...
[dpdk] 使用pktgen生成tcp三次握手的测试流量的更多相关文章
- 监听套接字描述字 已连接套接字描述字 和打电话的情形非常不一样的地方 完成了 TCP 三次握手,操作系统内核就为这个客户生成一个已连接套接字
1. accept: 电话铃响起了-- 当客户端的连接请求到达时,服务器端应答成功,连接建立,这个时候操作系统内核需要把这个事件通知到应用程序,并让应用程序感知到这个连接.这个过程,就好比电信运营商完 ...
- 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...
- TCP三次握手及其背后的缺陷
概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 [1]TCP三次握手 [2]SYN Flood 1.TCP连接建立--三次握手 几个概念: [1]seq:序号,占 ...
- TCP三次握手与四次分手超简单解析
关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...
- TCP‘三次握手’和‘四次挥手’(通俗易懂)
概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...
- [ 转载 ] Tcp三次握手和四次挥手详解
#TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...
- 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手
网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...
- Java网络编程学习A轮_02_抓包分析TCP三次握手过程
参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...
- TCP三次握手和四次挥手、HTTP协议
TCP三次握手和四次挥手 首先我们知道HTTP协议通常承载于TCP协议之上,HTTPS承载于TLS或SSL协议层之上 通过上面这张图我们能够知道. 在Http工作之前,Web浏览器通过网络和W ...
随机推荐
- Selenium Web 自动化 - Selenium(Java)环境搭建
Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...
- 一篇文全面了解DevOps:从概念、关键问题、兴起到实现需求
一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 转自:一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 2018-06-06 目前在国外,互联网巨头如Google.Faceb ...
- iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)
很久以前就想写这么一个无限滚动的Demo了,最近学习了下Swift,手中没有可以用来练手的Demo,所以才将它实现了. Github地址(由于使用了UIView+AutoLayout第三方进行布局,所 ...
- zookeeper 入门(一)
1 下载安装 wget http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.6.tar.gzcp zookeeper-3. ...
- 教你怎么上传本地代码到github
第一步:建立git仓库 cd到你的本地项目根目录下,执行git命令 git init 第二步:去github上创建自己的Repository,创建完成后拿到创建的仓库的https地址 第三步:将本地的 ...
- .net core读取json格式的配置文件
在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...
- SQLServer数据库降级方法详解
右击数据库,有一个任务选项--扩展里面有一个生成脚本 设置脚本选项 高级 最下方"要编写的脚本类型" 选择 框架及数据 完成
- 2 salt-masterless架构
minion无master的使用用法 需要更改minion配置文件的三个配置项 [root@linux-node2 ~]# vim /etc/salt/minion file_client: loca ...
- 11代理模式Proxy
一.什么是代理模式 Proxy模式又叫做代理模式,是构造型的设计 模式之一,它可以为其他对象提供一种代理(Proxy)以 控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有 相同的 ...
- Docker - Docker中搭建MySQL主从
1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/ ...