前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >F-Stack IPv6 的支持与使用

F-Stack IPv6 的支持与使用

作者头像
F-Stack
发布于 2019-08-16 10:40:02
发布于 2019-08-16 10:40:02
5.3K10
代码可运行
举报
文章被收录于专栏:F-Stack的专栏F-Stack的专栏
运行总次数:0
代码可运行

      限于某些原因 F-Stack 项目之前是未对 IPv6 进行支持的,随着 IPv6 需求的增多,近期对 IPv6 进行了支持。本文将简单介绍 F-Stack 支持 IPv6 所做的修改,如何使用以及相关注意事项。

F-Stack 如何支持 IPv6

以下所列为 F-Stack 支持 IPv6 所进行的修改,具体改动细节可查看 github 相关 commits。

  1. F-Stack 框架支持
    1. Makefile 中定义 IPv6 相关的宏INET6及需要包含编译的文件NETINET6_SRCS
    2. opt/opt_inet6.h中定义#define INET6 1
    3. FreeBSD 代码中部分在 Linux 中不兼容的代码进行修改
    4. ff_api.h中将 AF_INET6重新定义为 FreeBSD 中的值 28, 增加 AF_INET6_LINUX宏定义供应用调用 Linux 系统函数时使用,如inet_pton
    5. 将 F-Stack 胶水代码中的 struct sockaddr相关的所有结构体全部使用struct sockaddr_storage替换并对相关的参数和代码进行修改
    6. 在 F-Stack 胶水代码中 kni 功能的 protocol_filter_ip函数进行修改,支持对 IPv6 包进行匹配,需跳过 IPv6 不同的扩展头,支持 IPv4 over IPv6、IPv6 over IPv4、ICMPv6 等包类型的匹配。
    7. 对于 ICMPv6 包类型中的 ND(邻居发现协议) 相关报文进行深拷贝,并分发到所有进程和 kni 队列
    8. 配置文件config.ini中增加部分 IPv6 相关参数,如配置net.inet6.ip6.auto_linklocal, net.inet6.ip6.accept_rtadv等参数默认开启 IPv6,并接受 RA 组播等
  2. 工具支持 对ifconfigroutenetstat工具进行了修改,以支持 IPv6 相关操作
    1. tools/opts.mk中修改MK_INET6_SUPPORT="yes"开启 IPv6 编译选项
    2. 复制 IPv6 模块缺少的相关头文件到tools/compat/include下相关目录
    3. 修改部分 IPv6 相关系统调用为 hook 过的兼容接口
    4. 工具与 F-Stack 的 IPC 工具及系统调用增加 IPv6 支持
  3. Nginx 支持

因为 Nginx 本身即支持 IPv6, 所以改动较少,仅改动 ff_module模块ngx_ff_module.c下的fstack_territory函数,增加对 AF_INET6的支持即可。

Nginx 并未对绑定到系统 Host 进行 IPv6 的支持,如有需要可自行修改,需在全部判断AF_INET6代码处增加AF_INET6_LINUX的支持,或其他更多修改。

  1. helloworld 支持

example/main.c修改了增加了 IPv6 的服务端 DEMO,自行定义INET6即可开启

F-Stack 在 AWS EC2 运行 IPv6 服务演示

本节给出在 AWS EC2 运行 helloworld的简单演示,及部分相关配置命令

  1. 运行一台 AWS EC2 实例,并在控制台附加额外网络接口和开启 IPv6,配置相关路由和安全组
  2. 在实例中启用 IPv6,并测试可以正常进行 IPv6 通信
  3. 通过以下命令查看和记录系统默认的 IPv4 地址、掩码、广播地址、路由、IPv6 地址及 prefix 等信息 ifconfig route -n route -n6
  4. 按照 F-Stack 教程进行 DPDK、F-Stack、examle的编译和配置,并启动helloworld程序。需注意以下两点:
    1. 因 AWS EC2 主要使用 ixgbevfena两种网卡,而 F-Stack 包含的 dpdk 18.11.2 LTS版本的此两种网卡驱动均不完善(如均不支持设置网卡混杂模式,无法收到 RA 组播;ena网卡驱动无法正常运行多进程模式等),需在 DPDK 官网下载 DPDK 19.05或以上版本替换 F-Stack目录下的 dpdk目录,再行编译。如 EC2 实例使用了ena网卡,且需使用 kni 功能,还需参照 issue #401 对相关代码进行修改。
    2. example/Makefile或相关文件中定义INET6开启helloworld的 IPv6 支持,编译支持 IPv6 的helloworld程序
  5. tools目录下执行make;make install命令编译并安装 F-Stack 相关系统工具
  6. 参考以下命令配置和查看 IPv6 的相关地址和路由信息
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 为 f-stack-0 配置 IPv6 地址
ff_ifconfig f-stack-0 inet6 <记录的IPv6 地址>/<prifixlen> auto_linklocal accept_rtadv autoconf defaultif

# 查看 f-statck-0 网卡的相关信息
ff_ifconfig

# 查看 IPv6 路由信息
ff_route -6 show ::/0

# 查看本机端口监听和连接信息
ff_netstat -na

在 F-Stack 配置了 IPv6 地址后,F-Stack 会发送 MLD 组播侦听报文加入广播组接收路由组播 RA 信息,并且会发送相关 NS 信息,接收路由的 NA 响应信息,所以如果本网络环境支持 MLD 组播(如AWS EC2),则可无需手工配置 IPv6 路由,如在其他环境使用可以使用如下命令配置 IPv6 路由信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ff_route -6 add ::/0 <网关 IPv6 地址>
  1. 可以从其他 IPv6 客户端访问 F-Stack 服务端进行测试

需要注意的是,在 AWS EC2 环境中使用 F-Stack 的 IPv6 功能,运行一段时间后无法 F-Stack 会收不到网关应发送的 RA 组播信息,且向网关发送 NS 请求,网关也不再回应 NA 应答,IPv6 连接会因无有效的邻居和路由信息而中断,原因尚未明确,但在其他环境运行未发现此问题。

其他在F-Stack 使用 IPv6 的注意事项

  1. F-Stack 当前支持 ICMPv6,包括邻居发现协议(ND)和组播侦听发现协议(MLD),但不支持 DHCPv6,主要是 FreeBSD 本身对 DHCPv6 支持不够好,需要额外使用第三方 dhcpclient 工具进行支持,所以需手工配置指定 IPv6 地址信息
  2. DPDK kni 无法接收 MLD 组播信息,所以如果在 MLD(如AWS EC2) 环境使用 IPv6 时可能无法正常使用 kni 功能
  3. 当 IPv6 测试客户端和服务端的 IPv6 地址在同一 prefixlen 范围内时,需在配置文件或使用ff_sysctl工具配置net.inet.tcp.nolocaltimewait参数的值为0(当前版本已默认配置为0), 否则在 F-Stack 应用程序主动关闭连接时,在接收到对方应答的 fin+ack包后不会发送 last ack包,可能影响对端进行性能测试
  4. 在双栈环境下,F-Stack IPv6 的性能约为 IPv4 的 75% 左右,Linux系统协议栈 IPv6 的性能则为 IPv4 的 87% 左右,但 F-Stack 的性能依然领先
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问一台启动了fstack的helloworld demo,称为R,另外两台分别称为pc1 pc2,组成一个pc1------------------------------R--------------------------------pc2 的ipv6环境,并在pc1和pc2上加上静态路由后,pc1能直接和pc2通信吗?
请问一台启动了fstack的helloworld demo,称为R,另外两台分别称为pc1 pc2,组成一个pc1------------------------------R--------------------------------pc2 的ipv6环境,并在pc1和pc2上加上静态路由后,pc1能直接和pc2通信吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
F-Stack 1.20 Roadmap
    F-Stack 1.20 将于 2019Q3 发布, 同步 Roadmap。 已支持: 支持在 docker 中运行 支持客户端 bind/connect 移除发送数据包时协议栈到 DPDK mbuf 的 mcopy 该功能需在 Makefile 开启 FF_USE_PAGE_ARRAY 选项。 支持 IPv6 F-Stack 框架支持 IPv6。 ifconfig、route、netstat 工具支持 IPv6 相关配置。 支持ICMPv6(NUD和MLD), 不支持DHCPv6。 在 AW
F-Stack
2019/08/07
1.5K0
F-Stack KNI 配置注意事项
[image.png] KNI介绍 KNI(Kernel NIC Interface)内核网卡接口,是DPDK中用于与内核通信的模块,在主要的业务流程中可能并不需要,但在部分场景下,如服务器所有网卡都
F-Stack
2017/06/07
4.4K0
F-Stack KNI 配置注意事项
F-Stack常用配置参数介绍
目前F-Stack的配置文件中包含有以下8个部分,下面将分别进行简单的介绍: [dpdk]、[pcap]、[portN]、[vdevN]、[bondN]、[kni]、[freebsd.boot]、[freebsd.sysctl] [DPDK] 设置运行DPDK的相关参数,如果是DPDK也有的参数,则含义和使用方法同DPDK参数。 lcore_mask 16进制位掩码,用于设置进程运行在哪些CPU核心上。如fc表示使用CPU第2-7个核,不使用第0和1核。 建议优先使用物理核,数据尽量不要跨NUMA节点交互,
F-Stack
2022/04/11
5.2K2
F-Stack Q&A 第二期
Q1:请问再视频领域,媒体服务器,使用F-Stack是否合适? A1:F-Stack在纯推流的模式上是支持且合适的,如果有转码服务等计算密集型服务,需要等我们支持中断+轮询模式之后更合适。 Q2:请问,安装F-Stack对网卡有没有要求? A2:F-Stack使用了DPDK作为网络模块,网卡要求与DPDK相同,具体支持网卡列表请参考《list of supported NICs》(http://dpdk.org/doc/nics)。 Q3:基于 F-Stack 的分布式文件系统是怎么样的,效率提高的明显
F-Stack
2018/01/31
3.1K0
F-Stack 1.22 & 1.21.2(LTS) 发布
F-Stack 1.22 & 1.21.2(LTS) 版本已发布,其中1.22的最重要变化有以下两个:1. FreeBSD 升级至 FreeBSD-releng-13.0, 已经可以支持 BBR, 在特定场景下性能比 cubic 可以提高 10 倍以上。 2. DPDK 升级至 20.11, 编译方式相比 19.11 去除了常规 make 编译方式,使用上会有较大变化。 具体变更内容如下所示。 2022.09 F-Stack v1.22 1. FreeBSD Upgrade to FreeBSD-rel
F-Stack
2022/09/06
1.1K3
F-Stack Q&A 第三期
Q1:如果在一个阻塞型的socket上执行recv,会不会把相应的线程卡死,调用recv时该socket中没有数据包,导致sleep,sleep导致该线程没办法进行收包的过程,感觉会死锁了? A1:F-Stack中的socket接口在不设置nonblock确实会卡死。如有需要可以使用异步编程接口kqueue/epoll或微线程接口。 Q2:在Windows上解压F-Stack后传到linux上进行编译,编译失败? A2:Windows将 lib/include/machine 软链接转换成了文件,需要重
F-Stack
2018/01/31
4.2K1
F-Stack LD_PRELOAD 测试版介绍
跳票许久许久的LD_PRELOAD功能模块(后续以 libff_syscall.so 代替)在 F-Stack dev 分支的 adapter/sysctall 目录下已经提交,支持 hook 系统内核 socket 相关接口的代码,降低已有应用迁移到 F-Stack 的门槛。下面将分进行具体介绍, 主要包括libff_syscall.so 相关的架构涉及其中的一些思考,支持的几种模式以及如何使用等内容。 总体结论: 原有应用程序的接入门槛比原本的 F-Stack 有所降低,大部分情况下可以不修改原有的用户
F-Stack
2023/05/04
1.1K0
F-Stack LD_PRELOAD 测试版介绍
F-Stack Q&A 第一期
Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+轮询模式,避免与计算密集型业务抢占CPU及节省能源。 Q2:F-Stack如何实现zerco copy? A2:目前F-Stack尚未做到完全零拷贝。在收包时使用FreeBSD的mbuf ext add可以避免拷贝。在发包时尚存在拷贝,后续会优化为无拷贝,主要的方案是自己实现内存管理,完全使用hugepage。 Q3:F-Stack的运行环境有何
F-Stack
2018/01/31
3.1K0
F-Stack vlan 的支持与使用
       限于 Vlan 测试环境的缺失, F-Stack 项目初期未对 Vlan 进行完全的支持,仅支持配置是否进行 Vlan 的硬件卸载,当交换机配置了服务器返回的包无需打 Vlan tag 时可以正常使用,但如果交换机要求回报需要打 Vlan tag 则无法正常工作。       近期收到了网易 dragonorloong 同学关于 Vlan 的 Pull request,并且找到了 Vlan 测试环境对 Vlan 进行了完整的支持和测试,对以上问题进行了修复。本文将简单介绍 F-Stack
F-Stack
2019/09/06
2.2K1
如何在腾讯云主机上快速部署 F-Stack HTTP 服务
本文介绍如何在腾讯云主机上快速部署 F-Stack HTTP 服务。首先,介绍了 F-Stack 的基本概念和架构。然后,详细说明了如何在腾讯云主机上安装和配置 F-Stack,包括编译和安装 DPDK、配置网络、编译和安装 Nginx、配置和启动 F-Stack 等步骤。最后,介绍了如何配置和启动 Nginx,以及如何进行性能优化和调试。
F-Stack
2017/06/02
4.5K0
【IPv6】ICMPv6那些被考官疯狂针对的点
1、工作环境区别:ICMPv4运行于ipv4网络中,而ICMPv6运行在ipv6网络中;
Ponnie
2021/04/29
3.3K0
【IPv6】ICMPv6那些被考官疯狂针对的点
IPv6 实用教程
在Windows 和Linux 下均可以使用 ping 命令直接接IPv6 地址(与IPv4相同)
为为为什么
2022/08/06
6.6K0
IPv6 实用教程
IPV6精髓浅析
IPV6关键特性有哪些? IPV6的路由表是如何生成的,与IPV4有何区别?SLAAC工作流程及哪些字段协作生成了IPV6地址?DAD为什么能实现重复地址检测?IPV6包头设计精要有哪些?DHCPv6自动获取IPV6地址工作过程是怎样的?希望本文能给您带来一点帮助!
锅总
2024/10/09
2720
IPV6精髓浅析
F-Stack与Seastar对比
本文是将知乎网友的提问 《如何评价腾讯开源的基于 DPDK 和 BSD 协议栈的网络框架 f-stack?》,将回答讨论内容和我们的一些想法进行了整理。 项目背景 F-Stack 这个项目起始于DNSPod的授权DNS项目,当时是12年,DPDK还未开源的时候,我们就基于DPDK做了授权DNS,做完的时候正好DPDK也开源了,正式上线后10GE单网卡性能达到1100万qps,后面又实现了一个简易的TCP协议栈用于支持TCP DNS。 后来DNSPod合并进入腾讯云,腾讯云有大量业务需要高性能的接入服务,而D
F-Stack
2018/01/31
3.4K3
KIMSUFI使用proxmox开【IPv4nat+IPv6】小鸡
昨天跟风入手了KIMSUFI-LE独服,配置和价格都很不错。唯一槽点是机器只有下行是G口,上行被限制在了100M。听说有几率中奖开到上下都是G口,还听说有几率IPV6的上下行都是G口(仅IPV4限速)。结果我开的机器2个奖都没中(′⌒`)。
用户2135432
2024/10/03
5790
KIMSUFI使用proxmox开【IPv4nat+IPv6】小鸡
数据通信网络之IPv6基础
如图 1 所示,路由器 R1 通过两个物理接口分别连接物联网终端 R4(通过一台路由器 模拟)及计算机 PC1。其中,路由器 R1 和 R4 推荐使用 AR2220 及以上设备。
timerring
2023/10/13
6960
数据通信网络之IPv6基础
IPv6组播技术
作为 IPv4协议的替代,IPv6协议使用 128位的地址结构解决了 IP地址不足的问题,同时对一些特 性进行了优化处理。出现于 IPv4时代的组播技术,由于其有效解决了单点发送、多点接收的问题, 实现了网络中点到多点的高效数据传送,能够大量节约网络带宽、降低网络负载,因此在 IPv6 中 的应用得到了进一步的丰富和加强。
网络技术联盟站
2020/07/10
4.8K0
腾讯云 cvm 开启 IPv6
目前 IPv6/IPv4 双栈 VPC 功能处于内测中,如有需要,请提交 内测申请。
SRE扫地僧
2021/10/24
9.9K0
腾讯云 cvm 开启 IPv6
Linux系统查看网络配置信息的命令
网络是一个很重要的概念,对于今天来说没有网络寸步难行。那么作为系统管理员在管理服务器时最首先需要了解的东西就是网络配置相关信息了,我们来一块回忆一下,说到网络配置都可以想到什么东西?IP 地址、子网验码、网关、路由表、DNS 服务器等等这些都是跟网络相关的配置,那么在 Linux 系统中该如何查看这些信息呢?其实通过命令就可以。
用户4988085
2021/07/29
3.2K0
IPv4 与 IPv6 的比较
全球 IPv4 地址数已于2011年2月分配完毕,全球IPv4总地址 2^32 大约40亿个,
阳光岛主
2019/02/18
1.7K0
IPv4 与 IPv6 的比较
相关推荐
F-Stack 1.20 Roadmap
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档