[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测试需求.
看来... 只能自己写一个了...
最新文章
- SVNKit支持SSH连接
- jQuery extend扩展String原型
- 剖析width、height继承
- Jquery中each的三种遍历方法
- linux设备模型
- [转载]python gevent
- GDC2016【彩虹六号:围攻 】使丰富的“突破”成为可能的破坏系统
- 事件详解<;一>;
- Exploit-Exercises nebule 旅行日志(一)
- 学习笔记TF030:实现AlexNet
- CXF之";@XmlType.name 和 @XmlType.namespace 为类分配不同的名称";错误
- mybatis_SQL映射(1)
- hive -- 分区,分桶(创建,修改,删除)
- 性能测试LR学习笔录2am pm -3
- [Solution] 985. Sum of Even Numbers After Queries
- windows与mac下安装nginx
- hdu多校第3场A.Ascending Rating
- Java+opencv实现人脸检测
- 《centos系列》ubuntu终端链接centos服务器
- jQuery二维码
热门文章
- 【读书笔记】Data_Mining_with_R---Chapter_2_Predicting Algae Blooms
- Features Download Pricing Mind Maps Blog XMind的快捷键
- tensorflow笔记6:tf.nn.dynamic_rnn 和 bidirectional_dynamic_rnn:的输出,output和state,以及如何作为decoder 的输入
- C艹目录
- Java如何替换所有指定(出现)的字符串?
- 网络编程 -- RPC实现原理 -- NIO单线程
- U3D 垂直同步
- 【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore
- scala 模式匹配详解 2 scala里是怎么实现的?
- css3整理--background-origin