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. Selenium Web 自动化 - Selenium(Java)环境搭建

    Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/j ...

  2. 一篇文全面了解DevOps:从概念、关键问题、兴起到实现需求

    一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 转自:一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 2018-06-06 目前在国外,互联网巨头如Google.Faceb ...

  3. iOS开发:一个无限滚动自动播放图片的Demo(Swift语言编码)

    很久以前就想写这么一个无限滚动的Demo了,最近学习了下Swift,手中没有可以用来练手的Demo,所以才将它实现了. Github地址(由于使用了UIView+AutoLayout第三方进行布局,所 ...

  4. zookeeper 入门(一)

    1 下载安装 wget http://mirrors.hust.edu.cn/apache/zookeeper/stable/zookeeper-3.4.6.tar.gzcp zookeeper-3. ...

  5. 教你怎么上传本地代码到github

    第一步:建立git仓库 cd到你的本地项目根目录下,执行git命令 git init 第二步:去github上创建自己的Repository,创建完成后拿到创建的仓库的https地址 第三步:将本地的 ...

  6. .net core读取json格式的配置文件

    在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用j ...

  7. SQLServer数据库降级方法详解

    右击数据库,有一个任务选项--扩展里面有一个生成脚本 设置脚本选项 高级 最下方"要编写的脚本类型" 选择 框架及数据 完成

  8. 2 salt-masterless架构

    minion无master的使用用法 需要更改minion配置文件的三个配置项 [root@linux-node2 ~]# vim /etc/salt/minion file_client: loca ...

  9. 11代理模式Proxy

    一.什么是代理模式 Proxy模式又叫做代理模式,是构造型的设计 模式之一,它可以为其他对象提供一种代理(Proxy)以 控制对这个对象的访问. 所谓代理,是指具有与代理元(被代理的对象)具有 相同的 ...

  10. Docker - Docker中搭建MySQL主从

    1.pull完centos7纯净版的镜像后,创建容器,然后将宿主机上下载的MySQL文件 (MySQL下载地址:http://mysql.mirror.kangaroot.net/Downloads/ ...