自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

redwingz的博客

Linux内核网络、虚拟化

  • 博客(24)
  • 资源 (5)
  • 收藏
  • 关注

原创 TCP_CORK选项

用户层可通过setsockopt系统调用设置TCP套接口的TCP_CORK选项。开启时,内核将阻塞不完整的报文,当关闭此选项时,发送阻塞的报文。此处的不完整指的是应用层发送的数据长度不足一个MSS长度。使用场景是在调用sendfile发送文件内容之前,提前发送一个描述文件信息的头部数据段,并且阻塞住此头部数据,与之后的sendfile数据一同发送。或者用于优化吞吐性能。但是,TCP_CORK最多...

2019-04-29 21:02:22 4305

原创 DPDK的flow_filtering示例

主函数初始化EAL,分配存储mbuf的内存池mempool,初始化接口init_port,DPDK的此示例仅支持一个port接口运行。随后调用完成流控制的generate_ipv4_flow函数。int main(int argc, char **argv){ ret = rte_eal_init(argc, argv); nr_ports = rte_eth_dev_c...

2019-04-29 19:59:09 3355

原创 DPDK的示例程序Makefile

以helloworld为例,其makefile位于目录: dpdk-19.02/examples/helloworld/Makefile。 文件中真正必须的为两个变量APP和SRCS-y,前者为示例程序编译生成的目标文件名称,后者为要编译的源文件,helloworld程序仅有一个main.c文件。# binary nameAPP = helloworld# all source are...

2019-04-28 20:29:46 3175

原创 UDP的套接口阻塞选项UDP_CORK

用户层通过setsockopt设置UDP_CORK选项的值,当其使能的时候,此套接口所有发送的数据将汇聚到一个报文中,当UDP_CORK选项的值禁用后,执行发送操作。此选项为Linux内核自有选项,据此实现的应用程序在其他平台系统上可能无法工作。UDP_CORK配置内核的处理函数为udp_lib_setsockopt。只要用户层传入的值不为0,置位corkflag变量,意味着CORK功...

2019-04-26 18:32:59 1811

原创 DPDK install安装配置

在DPDK编译完成之后,默认情况下执行make install会将目标文件安装到系统的/usr/local目录下。通过查看DPDK的安装Makefile文件mk/rte.sdkinstall.mk,可知其将prefix指向了/usr/local目录。ifdef T # defaults with T= will install an almost flat staging treeexpo...

2019-04-26 17:47:17 2935

原创 Radysis ATCA-PP50板交换芯片配置

PP50板的大致框图如下,两个XLR732的处理器的万兆接口连接在内部的FM3112交换芯片上,FM3112外接的RTM版,对外提供2个万兆接口P2和P4,和10个1G的网络接口,分别为P10,P12,P14,P16,P17,P18,P20,P22,P23和P24。当前的需求是,RTM板的10个1G接口数据包要送到XLR732网络处理器,这10个接口对NP要可见,但是NP这一端在接...

2019-04-25 21:18:55 884

原创 TCP自动阻塞CORK控制

当应用程序在使用write或者sendmsg系统调用连续的发送少量数据包时,内核试图将这些小包尽可能的合并在一起发送,以降低总得数据包量。得以实现的前提是,至少有一个同数据流的之前数据包正在Qdisc队列或者网络设备的队列中等待发送。以下详细解释这一点。初始化在TCP协议的初始化函数tcp_sk_init中,将网络命名空间的sysctl_tcp_autocorking设置为1,打开...

2019-04-25 20:25:23 1549

原创 TCP挑战ACK报文限速

PROC文件tcp_challenge_ack_limit控制每秒钟发送挑战ACK报文的数量。避免遭受Blind In-Window Attacks,包括reset,sync或者数据注入攻击等,详解RFC5961。初始化在TCP协议初始化函数tcp_sk_init中赋值为1000。通过PROC文件tcp_challenge_ack_limit可查看此值,并可进行修改。stati...

2019-04-24 20:32:58 3786

原创 多核网络处理器启动流程

以下主要针对RMI的多核处理器,例如XLR732,其由八个核心,每个核心由4个硬线程组成。上电之后,第一个核心的第一个线程启动(Core0/Thread0),从复位向量地址开始执行。假设使用的bootloader是Uboot,此线程负责初始化当前核心的cache缓存,内存初始化等。之后负责启动其它核心的首线程,即Core1/Thread0一直到Core7/Thread0。这些线程启动之后,进行本核...

2019-04-24 20:27:19 810

原创 TCP Out-Of-Window报文限速

当TCP接收到数据报文的序列号不在窗口之内,或者确认序列号不在窗口内,又或者PAWS(Protection Against Wrapped Sequence numbers)检查未通过,TCP将会使用正确的序列号和确认序号回复一个ACK报文,以纠正对端的序列号错误问题。如果对端一直发送以上三种类型的数据包(无论是由于错误或者恶意),将造成本端一直回复ACK报文,类似一种ACK的DoS攻击。P...

2019-04-23 21:30:17 2369

原创 DPDK的hugetlb配置

前提是内核需要使能hugetlbfs配置:CONFIG_HUGETLBFS参考DPDK配置文件usertools/dpdk-setup.sh的第二步,第22和第23项分别设置hugepage的映射。---------------------------------------------------------- Step 2: Setup linuxapp environmen...

2019-04-22 20:33:26 1563

原创 TCP Pacing功能

TCP Pacing功能控制TCP的发包速率。Pacing的初始化TCP协议初始函数tcp_sk_init中,赋值了两个Pacing相关的参数,分别为sysctl_tcp_pacing_ss_ratio和sysctl_tcp_pacing_ca_ratio,都是控制pacing速率的倍数值。前者应用中慢启动阶段,默认值为200,即将速率提升200%;后者应用在拥塞避免阶段,默认值...

2019-04-18 22:42:17 6736 6

原创 DPDK的dpdk-devbind.py文件解释

文件dpdk-devbind.py位于DPDK代码的usertools目录下,旨在操作设备与其驱动程序的绑定关系,如下为其帮助信息中的典型使用示例,分别为设备与驱动绑定关系查询status;绑定设备驱动和解绑设备驱动:# ./dpdk-devbind.py --helpUsage:Options:Examples:---------To display current devi...

2019-04-17 21:40:05 7593

原创 TCP TSQ控制

TCP Small Queues的目的是限制每个TCP连接在Qdisc和device队列中的skb数量,以达到降低RTT(Round-Trip Time)和避免bufferbloat的目的。TSQ初始化内核定义了静态的每处理器变量tsq_tasklet结构,初始化函数tcp_tasklet_init,为定义的每处理器结构变量初始化一个单独的tasklet,并且每个tasklet有其自身独...

2019-04-16 20:38:27 1839

原创 ARM架构生成uImage过程

内核编译完成之后首先在顶层目录中生成vmlinux名称的原始ELF文件,接着在arch/arm/boot/Makefile文件中,使用objcopy工具,将vmlinux转化为Image镜像,用到的参数由变量OBJCOPYFLAGS和$(OBJCOPYFLAGS_$(@F)指定,makefile编译目标位于scripts/Makefile.lib文件中。arch/arm/boot/Makef...

2019-04-16 20:22:53 2390 1

原创 DPDK配置裁剪

DPDK标准配置命令如下:make config T=$(TARGET)以上配置将在代码目录生成build/.config配置文件和build/rte_config.h头文件。不过,DPDK没有类似Linux内核的make menuconfig配置菜单。如果想要去掉一些不需要的模块,可在编译时,将其设置为no,如下:$ make CONFIG_RTE_KNI_KMOD=n \ ...

2019-04-16 20:12:12 1185

原创 TCP数据与控制流程交叉时的延迟处理

TCP协议的数据流程在遇到控制流程正在进行之时,需要暂停当前的执行流程,延时处理。等到控制流程(例如用户层的相关系统调用退出后)结束,再继续之前的数据流程。如下宏定义TCP_DEFERRED_ALL,内核中存在四种延时处理的情况:TSQ、重传超时、延时ACK和ICMP分片消息处理。#define TCP_DEFERRED_ALL (TCPF_TSQ_DEFERRED | \ ...

2019-04-15 21:09:43 782

原创 TCP的TSQ限值tcp_limit_output_bytes

TCP在发送大量的数据时,倾向于尽可能多的进行发送直到检测到丢包。这将导致发送设备或者Qdisc流控队列(例如pfifo_fast)中填充大量数据包,势必增大其它流量的延迟时间。tcp_limit_output_bytes参数限制了Qdisc队列或者设备队列中的数据量,以缓解此状况,达到减低队列的内存膨胀bufferbloat和由其所导致的异常RTT时间的作用。默认值为262144。参见PRO...

2019-04-12 22:56:56 2153

原创 TCP对端MSS值估算

由于没有直接的信息可以获得对端的MSS值,内核中的代码实际上是估算以得到对端MSS值。RCV_MSS初始化初始化对端的MSS值,首先起始值取自本地通告advmss值与当前发送MSS缓存值两者之中的较小值,在TCP的三次握手建立连接过程中,双方协商了MSS的钳制值即最大值,其值介于通告advmss与MSS缓存值mss_cache之间。其次,如果此接收MSS值大于对端发送窗口的二分之一,取...

2019-04-11 21:12:00 3102 1

原创 TCP发送MSS值

涉及到通过MSS值mss_clamp,用户设置MSS值user_mss和当前使用的MSS值mss_cache。客户端通告MSS协商内核依照RFC1122, RFC2581中的规定,将默认的MSS钳制值定义为536,见宏TCP_MSS_DEFAULT。#define TCP_MSS_DEFAULT 536U客户端在发送SYN请求报文前,设置MSS钳制值为TCP_MSS_DE...

2019-04-10 21:43:59 4416

原创 TCP的MTU探测功能

Linux内核默认情况下未开启TCP的MTU探测功能。$ cat /proc/sys/net/ipv4/tcp_mtu_probing0当TCP客户端发起连接建立请求时,在函数tcp_connect_init中调用TCP的MTU探测初始化函数tcp_mtup_init。如上所述默认情况下enabled为零,使用MSS最大限制值mss_clamp加上TCP头部长度和网络层头部长度作为MT...

2019-04-09 21:58:41 8579

原创 TCP发送缓存控制tcp_notsent_lowat

PROC文件tcp_notsent_lowat控制发送缓存队列中的未发送数据量。低于此值可发送,超出此值停止发送,。初始化内核在TCP初始化函数tcp_sk_init中,将sysctl_tcp_notsent_lowat设置为无符号整数的最大值,此值为TCP套接口全局的tcp_notsent_lowat控制值。如果用户层针对特定套接口使用setsockopt的设置选项TCP_NOTSEN...

2019-04-08 20:00:50 2951

原创 TCP接收通告窗口

一些TCP协议栈将TCP头部16bit的窗口字段解释为有符号的整数,为了兼容这些系统,Linux内核定义了在没有窗口扩展系数选项的情况下,最大的窗口值为宏MAX_TCP_WINDOW,其为最大的16bit的有符号数。但是默认情况下,内核未开启此功能。PROC文件tcp_workaround_signed_windows默认为0,用户可置1开启此兼容功能。如果接收到对端系统发送的TCP窗口扩张系数选...

2019-04-05 00:22:38 4608

原创 使用自制的工具链编译DPDK

本文使用的工具链是根据LFS指南编译而来,路径位于系统的/opt/lfs_toolchain/bin目录下,其中gcc为x86_64-lfs-linux-gcc,编译工具的前缀为x86_64-lfs-linux-。其它工具如ar、ld等加上前缀即为自制工具链的工具名称。按照交叉编译的步骤编译DPDK。首先export工具链的目录:export PATH=$(PATH):/opt/lfs_...

2019-04-02 21:11:35 690

botan-ed25519.pcap

IKEv2协议交互报文,认证方式选用Ed25519算法的证书方式。

2019-10-28

IKEv2-rw-cert2.pcap

strongswan使用linux内核的af_alg加密接口配置,IKEv2协议交互报文。

2019-10-28

IKEv2-camellia.pcap

IKEv2协议使用camellia加密算法的协商报文,交互流程。

2019-10-28

libssh2-1.8.0 and ssh2_batch example

ssh2_batch可执行程序,用于非交互式的ssh命令执行。源代码和libssh2

2018-06-13

WEB Portal 认证完整的交互报文

web认证交互报文,包括WLAN controller与portal server的认证与注销,AC与radius 服务器的认证报文。

2018-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除