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三次握手的测试流量的更多相关文章

  1. 监听套接字描述字 已连接套接字描述字 和打电话的情形非常不一样的地方 完成了 TCP 三次握手,操作系统内核就为这个客户生成一个已连接套接字

    1. accept: 电话铃响起了-- 当客户端的连接请求到达时,服务器端应答成功,连接建立,这个时候操作系统内核需要把这个事件通知到应用程序,并让应用程序感知到这个连接.这个过程,就好比电信运营商完 ...

  2. 对TCP三次握手四次分手还不清楚的速度进,超简单解析,明白了就很好记!

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...

  3. TCP三次握手及其背后的缺陷

    概述 总结一下TCP中3次握手过程,以及其原生的缺陷 引起的SYN Flood的介绍 [1]TCP三次握手 [2]SYN Flood 1.TCP连接建立--三次握手 几个概念: [1]seq:序号,占 ...

  4. TCP三次握手与四次分手超简单解析

    关于TCP三次握手四次分手,之前看资料解释的都很笼统,很多地方都不是很明白,所以很难记,前几天看的一个博客豁然开朗,可惜现在找不到了.现在把之前的疑惑总结起来,方便一下大家. 先上个TCP三次握手和四 ...

  5. TCP‘三次握手’和‘四次挥手’(通俗易懂)

      概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手. 三次握手 下图为三次握手的流程图 下面通 ...

  6. [ 转载 ] Tcp三次握手和四次挥手详解

    #TCP的报头: 源端口号:表示发送端端口号,字段长为16位.目标端口号:表示接收端口号,字段长为16位.序列号:表示发送数据的位置,字段长为32位.每发送一次数据,就累加一次该数据字节数的大小.注意 ...

  7. 网络协议-网络分层、TCP/UDP、TCP三次握手和四次挥手

    网络的五层划分是什么? 应用层,常见协议:HTTP.FTP 传输层,常见协议:TCP.UDP 网络层,常见协议:IP 链路层 物理层 TCP 和 UDP 的区别是什么 TCP/UDP 都属于传输层的协 ...

  8. Java网络编程学习A轮_02_抓包分析TCP三次握手过程

    参考资料: https://huoding.com/2013/11/21/299 https://hpbn.co/building-blocks-of-tcp/#three-way-handshake ...

  9. TCP三次握手和四次挥手、HTTP协议

    TCP三次握手和四次挥手 首先我们知道HTTP协议通常承载于TCP协议之上,HTTPS承载于TLS或SSL协议层之上 通过上面这张图我们能够知道.     在Http工作之前,Web浏览器通过网络和W ...

随机推荐

  1. hdu2588 GCD (欧拉函数)

    GCD 题意:输入N,M(2<=N<=1000000000, 1<=M<=N), 设1<=X<=N,求使gcd(X,N)>=M的X的个数.  (文末有题) 知 ...

  2. Redis 发布订阅用法

    一.发布订阅模型发布订阅其作用是为了减少依赖关系,通常也叫观察者模式.主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方. 发送方:只负责向第三方发送消息.(杂志社把读者杂志交给邮局)接 ...

  3. OGNL相关代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. 防止SQL注入的,网站安全的一些常用解决方案

    --------------------------------------------------------过滤URL中的一些特殊字符,动态SQL语句使用PrepareStatement.. -- ...

  5. C# 32位程序访问64位系统注册表

    原文:C# 32位程序访问64位系统注册表 我的上一篇文章已经阐述了“32位程序和64位程序在64位平台上读\写注册表的区别”,那么接下来将要回答上篇所留下来的一个问题:32位程序如何访问64位系统注 ...

  6. [LeetCode] Closest Leaf in a Binary Tree 二叉树中最近的叶结点

    Given a binary tree where every node has a unique value, and a target key k, find the value of the n ...

  7. javaScript(7)---函数

    学习要点: 1.函数声明 2.return返回值 3.arguments对象 函数是定义一次但却可以调用或执行任意多次的一段JS代码.函数有时会有参数,即函数被调用时指定了值的局部变量.函数常常使用这 ...

  8. python3 正则表达式学习笔记

    re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none. ~匹配成功re.match方法返回一个匹配的对象,否则返回No ...

  9. 修改Maven仓库路径

    我自己新建的地址:D:\apache-maven-3.6.0\repository 找到:localRepository,修改为自定义的位置 在IDEA里面进行配置 这样项目的maven仓库地址就修改 ...

  10. (79)Wangdao.com第十五天_JavaScript 对象的继承_prototype原型对象_封装_函数式编程

    javascript 内置了许多 function 函数(){...} js 执行首先就会执行自己内置的函数定义 (function Function.function Object) 对象的继承 大 ...