如何禁止Linux组合TCP小包

如何禁止Linux组合TCP小包,第1张

如何禁止Linux组合TCP小包,关于这个问题有以下解释:注册账号,与客服交流

killcx可以关闭一个linux上的tcp连接,而不管连接的状态是怎么样的(半开,已建立,等待或关闭状态)。

它是一个Perl的脚本程序,在linux上使用需要安装一下它的依赖的包。

它依赖三个包:Net::RawIP,Net::Pcap和Net::Pcap。

安装命令如下:

apt-getinstalllibnet-rawip-perl

apt-getinstalllibnet-pcap-perl

cpanNetPacket::Ethernet

安装完成就可以使用了,使用语法为:killcxip:port

注意如果关闭半开状态的连接(即只有一端有连接,另外一端没有连接),killcx需要运行在还有连接存在的主机上才可以关闭连接。

killcx官方文档

如何干掉一条tcp连接(活跃/非活跃)

能提升40倍。

DPDK只是单纯的从驱动拿数据,然后组织成数据块给人用,跑在用户态。功能相当于linux的设备无关接口层,处于socket之下,驱动之上。只不过linux协议栈的这部分在核心态。包处理器,很多时候是不用linux内核协议栈的,而是用专用包处理程序,类似于DPDK加上层应用处理。通常会有些硬件加速,包处理效率更高些。缺点是一旦用不上某些功能,那些加速就白费了。而纯软件处理就非常灵活,不过代价就是功耗和性能。

纯DPDK性能非常高,intel自己给出的数据是,处理一个包80时钟周期。一个3.6Ghz的单核双线程至强,64字节小包,纯转发能力超过90Mpps,也就是每秒9千万包。如果加上linux

socket协议栈,比如跑个纯http包反d,那么根据测量,会掉到3000-4000周期处理一个包,单核双线程在2.4Mpps,每秒两百四十万包,性能差40倍。

编写helloworld.c及其对应的Makefile。

helloworld.c:

#include <linux/module.h>#include <linux/kernel.h>int init_hello_module(void)

{

printk("***************Start***************\n")

printk("Hello World! Start of hello world module!\n") return 0

}void exit_hello_module(void)

{

printk("***************End***************\n")

printk("Hello World! End of hello world module!\n")

}

MODULE_LICENSE("Dual BSD/GPL")

module_init(init_hello_module)

module_exit(exit_hello_module)1234567891011121314151617181920

Makefile:

# To build modules outside of the kernel tree, we run "make"# in the kernel source treethe Makefile these then includes this# Makefile once again.# This conditional selects whether we are being included from the# kernel Makefile or not.# called from kernel build system: just declare what our modules areobj-m := helloworld.oCROSS_COMPILE =

CC= gcc# Assume the source tree is where the running kernel was built

# You should set KERNELDIR in the environment if it's elsewhere

KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)# The current directory is passed to sub-makes as argument

PWD := $(shell pwd)all: modulesmodules:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:

rm -rf *.o *~ core .depend *.symvers .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)

在Makefile中,在obj-m := helloworld.o这句中,.o的文件名要与编译的.c文件名一致。

KERNELDIR ?= /usr/src/linux-headers-$(shell uname -r)指示当前linux系统内核的源码位置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7327151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存