自定义博客皮肤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内核网络、虚拟化

  • 博客(536)
  • 资源 (5)
  • 论坛 (1)
  • 收藏
  • 关注

原创 邻居表项的unres_qlen_bytes长度

对于每个未解析的邻居地址,变量unres_qlen和unres_qlen_bytes分别控制可换成的报文数量和报文字节数量,其中前者unres_qlen在内核linux-3.3版本已经废弃,应使用后一个变量unres_qlen_bytes,其默认值为SK_WMEM_MAX(即net.core.wmem_default),内核建议此值的设置应能够容纳256个中型长度的报文。通过PROC文件unres_qlen和unres_qlen_bytes可查看和修改其值。$ cat /proc/sys/net/ipv

2020-11-19 20:04:14 28

原创 邻居表项的回收控制

内核中存在3个阈值控制邻居表项的回收:gc_thresh1 表示最小可保留的表项数量,如果表项数量小于此值GC(Garbage collector)不进行回收操作,默认为128;gc_thresh2 当表项数量超过此值时,GC将会清空大于5秒的表项,默认为512;gc_thresh3 最大可允许的非永久表项数量。如果系统拥有庞大的接口数量,或者直连了大量的设备,应增大此值。默认值为1024。另外,gc_interval不太清楚有什么用处,默认值为30秒钟。对于IPv4,可通过以下PROC

2020-11-14 07:08:35 34

原创 邻居表项的retrans_time时长

retrans_time控制在发送过邻居地址探测报文之后,经过多长时间检测邻居表项的变化,如果检测不成功,进行重新探测,对于arp协议,内核默认的retrans_time为1秒钟。通过PROC文件retrans_time可查看和修改其值,单位时USR_HZ(100),PROC文件的内容为毫秒值,这里为默认的1000ms。$ cat /proc/sys/net/ipv4/neigh/ens33/retrans_time100$ cat /proc/sys/net/ipv4/neigh/ens33/re

2020-11-12 20:15:49 20

原创 邻居表项的ucast_solicit数量

ucast_solicit控制使用单播发送邻居地址探测报文的次数,对于arp协议,内核默认的ucast_solicit为3。通过PROC文件app_solicit可查看和修改其值,如下,修改为1。$ cat /proc/sys/net/ipv4/neigh/ens33/ucast_solicit 3 $ echo 1 > /proc/sys/net/ipv4/neigh/ens33/ucast_resolicit在arp邻居表arp_tbl中将NEIGH_VAR_UCAST_PROBES索

2020-11-10 20:35:31 31

原创 邻居表项的mcast_solicit数量

mcast_solicit和mcast_resolicit控制使用多播发送邻居地址探测报文的次数,对于arp协议,内核默认的mcast_solicit为3。通过PROC文件app_solicit可查看和修改其值,如下,修改为1。$ cat /proc/sys/net/ipv4/neigh/ens33/mcast_solicit 3 $ cat /proc/sys/net/ipv4/neigh/ens33/mcast_resolicit 0在arp邻居表arp_tbl中将NEIGH_VAR_MC

2020-11-05 22:24:44 32 2

原创 邻居表项的app_solicit数量

app_solicit控制上层应用发送邻居地址探测报文的数量,对于arp协议,内核默认的app_solicit为零,在arp邻居表arp_tbl中没有对NEIGH_VAR_APP_PROBES索引所对应的表项赋值,即将app_solict对于的值设置为了零,如果上层应用可完成地址探测,可将app_solicit修改为非零。通过PROC文件app_solicit可查看和修改其值,如下,修改为1。$ cat /proc/sys/net/ipv4/neigh/ens33/app_solicit 0 $ e

2020-11-04 23:03:10 25

原创 邻居表项的delay_probe_time时长

delay_probe_time控制首次发送邻居请求报文的等待时长,对于arp协议,内核默认的delay_probe_time时长为5秒钟。struct neigh_table arp_tbl = { .family = AF_INET, .key_len = 4, .protocol = cpu_to_be16(ETH_P_IP), .hash = arp_hash, .key_eq = arp_key_eq, .co

2020-11-03 22:39:41 35 1

原创 GARP(Gratuitous ARP)

内核函数arp_is_garp判断ARP报文是否为GARP,先决条件是发送者IP和目标IP地址相同,另外,对于ARP回复(REPLAY)报文,要求如果目标硬件地址存在,需要与发送者硬件地址相等。最后,要求ARP报文的发送者IP为单播地址,否则,判定报文不是garp。static bool arp_is_garp(struct net *net, struct net_device *dev, int *addr_type, __be16 ar_op, __b

2020-10-29 20:30:47 31

原创 邻居表项的locktime时长

如果内核在locktime时间内接收到多个ARP报文,仅首个报文生效。对于arp协议,内核默认的locktime时长为1秒钟,可通过PROC文件或者ip命令进行修改。struct neigh_table arp_tbl = { .family = AF_INET, .key_len = 4, .protocol = cpu_to_be16(ETH_P_IP), .hash = arp_hash, .key_eq = arp_ke

2020-10-28 20:31:30 34

原创 邻居表项的STALE状态超时时间

对于arp协议,内核默认的STALE状态超时时长为60秒钟。struct neigh_table arp_tbl = { .family = AF_INET, .key_len = 4, .protocol = cpu_to_be16(ETH_P_IP), ... .id = "arp_cache", .parms = { ... .data = { ...

2020-10-21 19:36:45 61

原创 内核的中断分布

对于x86架构,定义位于arch/x86/include/asm/irq_vectors.h文件中,linux每可使用的有256个IDT(Interrupt Descriptor Table)表项,64位架构每个CPU有一个IDT表,32位架构共享一个IDT表,其分布如下: * Vectors 0 ... 31 : system traps and exceptions - hardcoded events 系统陷阱和异常中断向量 * V

2020-10-20 20:06:06 46

原创 FQ队列detached流管理

对于FQ中的流结构,如果其没有任何要发送的报文,即其为空,将其设置为detached状态,这样的流结构即不在new_flow链表,也不在old_flow链表。在detach设置函数中,不仅将其next指向固定的地址(静态变量detached的地址),而且,记录下其进入detached状态的时间戳。/* special value to mark a detached flow (not on old/new list) */static struct fq_flow detached, throttle

2020-10-19 20:23:30 26

原创 FQ队列throttled流管理

FQ队列中对发送时间未到的流结构单独存放在delayed红黑树中,这样的流结构即不在new_flow链表,也不在old_flow链表,其next指针执行一个特定的值:throttled。内核函数通过检查流结构的next指针,来判断流是否处于throttled状态。new_flow链表中的流结构的优先级高于old_flows中的流。/* special value to mark a detached flow (not on old/new list) */static struct fq_flow

2020-10-17 23:06:18 31

原创 X710网卡接收丢包

通过ethtool命令看到是rx_dropped一项有数值。/ # ethtool -S eth0 | moreNIC statistics: rx_packets: 88037562 tx_packets: 66028257 rx_bytes: 7461153935 tx_bytes: 5612351710 rx_errors: 0 tx_errors: 0 rx_dropped: 372 tx_dropped: 0

2020-10-16 21:30:43 73

原创 使用git sendmail发送补丁

这里使用iproute2工程为例,以下命令安装git-email工具。$ sudo apt-get install git-emailiproute2当前版本是5.8.0,其中文件tc/q_fq.c中有一处笔误。修改完成之后,使用如下命令生成patch文件:$ git format-patch HEAD^0001-tc-fq-clarify-the-length-of-orphan_mask.patch$ 接下来设置git-email相关配置,这里以126邮箱为例:$ git config

2020-10-14 21:09:35 24

原创 FQ队列对quantum的处理

quantum 表示每次出队列轮询的信用值(credit),例如,每个流每次可允许出队列的字节数量。此值设置的较大意味值下一个流等待服务的时间更长,默认为2倍的接口MTU值。static int fq_init(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack){ struct fq_sched_data *q = qdisc_priv(sch); int err; sch->lim

2020-10-12 20:09:53 33

原创 内核红黑树-II

还是先列一下红黑树的5个准则。A node is either red or black节点的颜色非红即黑The root is black根节点为黑色All leaves (NULL) are black所有的叶子(NULL)节点都为黑色Both children of every red node are black红色节点的子节点都为黑色Every simple path from root to leaves contains the same number of black n

2020-09-23 20:30:48 22

原创 内核红黑树-I

内核中许多部分使用到红黑树,比如tcp的乱序队列out_of_order_queue,TC中fq公平队列的流表等。以下为红黑树的5个准则:A node is either red or black节点的颜色非红即黑The root is black根节点为黑色All leaves (NULL) are black所有的叶子(NULL)节点都为黑色Both children of every red node are black红色节点的子节点都为黑色Every simple path f

2020-09-19 06:37:35 42

原创 FQ队列流结构回收

在FQ队列中,如果流结构队列为空,并且超过3秒(FQ_GC_AGE)没有接收到相应的报文,系统将其进行回收,如下判断函数fq_gc_candidate。但是在每次fq_gc回收函数执行时,最大释放8个(FQ_GC_MAX)流结构。/* limit number of collected flows per round */#define FQ_GC_MAX 8#define FQ_GC_AGE (3*HZ)static bool fq_gc_candidate(const struct fq_fl

2020-09-17 19:34:32 41

原创 Linux FQ队列操作

在介绍FQ入队列操作之前,先看一下流量的识别部分。1 流量识别对于一些协议报文,比如HSR(High-availability Seamless Redundancy)、IGMP和HDLC等,其将priority字段设置为了TC_PRIO_CONTROL,对于此类报文,FQ使用一个内部特定的流处理(q->internal)。static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q){

2020-09-12 22:51:26 75

原创 DPDK下X710网卡丢包

环境 -处理器:Intel® Xeon® Gold 5122 CPU @ 3.60GHz 4核8线程DPDK: v20.05测试: 4对接口双向对打流量,报文长度1518字节。发现有接口丢包,打印出来接口的统计信息,其中rte_eth_stats->imissed字段有数值,查看获取统计的函数i40e_dev_stats_get,可见imissed由两部分组成:static inti40e_dev_stats_get(struct rte_eth_dev *dev, struct rte_

2020-09-10 08:15:25 242

原创 Linux公平队列FQ接口实现

用户层面的tc配置命令如下:$ sudo tc qdisc add dev ens38 root fq$ $ sudo tc -s qdisc show dev ens38 qdisc fq 8001: root refcnt 2 limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 low_rate_threshold 550Kbit refill_delay 40

2020-09-08 19:19:01 63

原创 Max-Min公平性

Max-Min公平性由Hayden在文章(Round-Robin Scheduling for Max-Min Fairness in Data Networks)中提出,旨在评估队列调度机制的公平性。This section describes the max-min flow criterion, our definition of throughput fairness. The version presented herewas developed by Hayden [9]. Similar

2020-09-07 19:48:42 73

原创 Linux公平队列FQ配置

FQ (Fair Queue)是一个无类别(classless)的报文调度器,其主意用于本地产生的流量。设计为控制每个流的发送节奏(pacing)。FQ完成流的区分,并且可完成TCP层要求的发送节奏。所有的属于一个套接口的报文认为属于一个流(flow)。对于非本地生成的报文(如对于路由器设备),可使用sk_buff结构中的成员hash作为区分流的备选项。应用程序可使用setsockopt系统调用的选项SO_MAX_PACING_RATE指定最大的pacing速率。FQ调度器可在发送报文之间增加延时以达到T

2020-09-04 21:43:32 141

原创 按位实现的队列轮询算法

由于Nagle所提出的队列轮询算法,实际上是以报文为单位进行公平轮询,进而发送报文,但是没有考虑报文大小不同带来的不公平性,导致使用大报文的连接占用较多的网络带宽。来看一下为解决此问题,理想的按照比特位为单位进行的轮询算法。首先,假设一个理论上的队列服务机制,其可以按照比特位轮询方式(bit-by-bit round robin)进行数据发送,这样,此服务机制可保证在任意时刻每个连接队列都可获得公平的带宽服务。使用R(t)表示在t时刻已进行的轮询次数,R(t)为连续函数,分数结果表示当前存在一次还没有完成

2020-08-28 21:59:47 73

原创 Nagle公平队列

为保护正常行为(well-behaved)的源主机流量,免受异常(badly-behaved)主机的影响,或者是在两种流量混合的网络中,确保正常行为的主机获得优于异常主机的流量服务,在RFC970中,Nagle提出了一种公平队列。我们假设一个高带宽的LAN通过网关(交换设备)与WAN相连,LAN网络中的没有流量控制。任何主机如果发送到WAN网络的报文速率超过网关可处理的极限,将会在网关处造成拥塞。如果网关采用先入先出队列(First-In-First-Out),异常行为的主机将严重干扰正常主机的流量。网

2020-08-27 19:22:58 32

原创 snort3安装测试

环境为Ubuntu:$ cat /etc/issueUbuntu 20.04 LTS \n \l首先由github下载源码,这里使用3.0.2版本。~/ips$ wget https://github.com/snort3/snort3/archive/3.0.2-5.tar.gz~/ips$~/ips$ tar -xf 3.0.2-5.tar.gz~/ips$~/ips$ cd snort3-3.0.2-5/~/ips/snort3-3.0.2-5$其次,安装所需的依赖包:~/i

2020-08-19 19:37:29 221 2

原创 Linux内核Adaptive-RED实现

ARED在RED的基础上实现了最大报文标记概率max_P的自动调整,以便将平均队列长度控制在目标区间内。1 ARED初始化在RED初始化函数red_init中,设置ARED定时器adapt_timer用于定期执行ARED算法,定时处理函数为red_adaptative_timer。static int red_init(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack){ struct red_sche

2020-08-11 21:34:27 97

原创 内核文件句柄数量

涉及三个文件file-max,file-nr和nr-open。file-maxfile-max定义了Linux内核可分配的最大数量的文件句柄,当检测到文件句柄耗尽时,需要增加file-max值。/ # cat /proc/sys/fs/file-max1597700内核函数files_maxfiles_init计算系统默认的最大文件数量,依据是每个文件及与其关联的inode和dcache结构,总的大小约为1K。默认文件占用的空间不超出内存的10%,file-max的最小值为NR_FILE,即81

2020-08-10 19:43:21 115

原创 RED硬件卸载支持

在RED参数处理的最后,调用red_offload设置RED卸载功能。static int red_change(struct Qdisc *sch, struct nlattr *opt, struct netlink_ext_ack *extack){ struct Qdisc *old_child = NULL, *child = NULL; struct red_sched_data *q = qdisc_priv(sch); struct n

2020-08-06 19:35:00 98

原创 RED统计信息

使用TC命令查看网络设备ens40的队列统计信息,对于RED队列,显示如下,首先是RED配置参数的显示,其次,为统计信息:$ tc -d -s qdisc show dev ens40 qdisc red 8005: root refcnt 2 limit 400000b min 30000b max 100000b ecn harddrop adaptive ewma 5 probability 0.00956593 Scell_log 8 Sent 0 bytes 0 pkt (dropped

2020-08-06 19:11:09 58

原创 Linux内核RED队列实现

关于RED队列的TC配置命令,参见:RED队列tc设置。1 RED入队列首先计算平均队列长度qavg,参见之后函数red_calc_qavg的介绍。如果队列处于空闲状态,退出空闲状态,清空空闲开始时间戳。static int red_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct sk_buff **to_free){ struct red_sched_data *q = qdisc_priv(sch); struct Q

2020-08-05 19:41:03 98

原创 RED队列tc设置

如下tc命令配置RED(Random Early Detection)队列。$ sudo tc qdisc add dev ens40 root red limit 400000 min 30000 max 100000 avpkt 1000 probability 0.02 burst 55 ecn adaptive harddrop bandwidth 1000Mbit $ $ tc -d -s qdisc show dev ens40 qdisc red 8005: ro

2020-08-04 19:36:40 147

原创 Adaptive-RED队列

RED通过平均队列长度的增长,增加报文的随机丢弃(或标记)概率,来实现主动队列管理(AQM)。当平均队列长度avg由设置的最小阈值(minth)向最大阈值(maxth)增长时,报文的丢弃概率由零增长到最大概率值maxp。RED的一个主要目的就是使用平均队列长度(容许突发流量)和拥塞预先通知(减低平均队列长度)来达到高吞吐和较低的平均队列时延。但是,RED的一个缺陷是,平均队列长度随着拥塞程度和RED参数的设置而变化。当链路轻度拥塞,或者maxp设置的较大时,平均队列长度接近minth。反之,当链路严重拥塞

2020-07-28 22:15:25 75

原创 DPDK示例l3fwd性能测试

测试环境CPU: Intel® Xeon® Gold 5122 CPU @ 3.60GHzCache: 16896 KBMemory: 16GX710 driver: i40e-2.11.29X710 expansion-rom-version: 4.53 0x80001cdf 0.0.0DPDK: dpdk-20.05BIOS设置CPU Power and Performance Policy CPU C-state Disabled

2020-07-27 19:19:24 256

原创 RED队列算法 - 实现

RED算法的大部分工作都可以与报文的转发处理并行进行,两个主要算法包括平均队列长度avg和报文标记概率pb计算,也可以按照低优先级任务执行,因此,RED完全可使用在高速网络中。如果RED标记报文的方式不是丢弃报文,而是设置报文头部中的拥塞标志位(ECN方式),后者将影响报文的转发。但是,因为RED的随机算法被设计用来标记尽量少的报文,从而对转发的影响并不大。对于每个接收到的报文,RED计算平均队列长度avg,如下实现:avg←(1−wq)avg+wqq=avg+wq(q−avg)avg \lefta

2020-07-25 20:37:13 213

原创 fuchsia编译

fuchsia代码主要在搜索网站的源码站,本地开发环境为Ubuntu 16.04.3,如下:$ cat /etc/issueUbuntu 16.04.3 LTS \n \l以下命令下载fuchsia工程代码,curl的-s选项开启静默模式,减少打印信息:$ curl -s "https://fuchsia.googlesource.com/fuchsia/+/master/scripts/bootstrap?format=TEXT" | base64 --decode | bash.

2020-07-24 10:19:07 1487

原创 RED队列

RED(Random Early Detection)算法旨在将队列的平均长度保持在较低的值,同时,允许一定量的突发报文。在发生拥塞期间,RED以一定的概率通知(丢包或者ECN机制)某个连接减低窗口值,此概率大致上与该连接占用的带宽份额成比例。RED设计用来与传输层协议如TCP等一起使用。另外,RED还可避免过多的连接同时减低窗口的现象发生。RED使用一个带有EWMA(Exponential Weighted Moving Average)的LPF(Low-Pass Filter)低通滤波器来计算平均队列

2020-07-24 09:50:15 121

原创 rtnetlink消息解析遇到的问题记录

折腾了两天一个解析rtnetlink消息的程序,总是莫名其妙的crash,最终发现是rtattr数组定的时候忘记了加一。之后,查看了一下iproute2中的代码,如下解析IP地址的函数,rta_tb数组的个数为:IFA_MAX+1,进行了加一操作。int print_addrinfo(const struct sockaddr_nl *who, struct nlmsghdr *n, void *arg){ struct ifaddrmsg *ifa = NLMSG_DATA(n); i

2020-07-15 22:07:58 80

原创 SFB队列

SFB(Stochastic Fair Blue)是一个FIFO类型的队列算法,基于类似于BLUE算法的记账机制,来标识非响应性质的流,并且限制其速率(这类流不处理ECN或者丢包事件)。SFB的记账系统由L*N个桶(bin)组成,其中L表示级别,N表示每个级别的桶的数量。Linux内核中使用8个级别,每个级别16个桶用于记账。 37 #define SFB_BUCKET_SHIFT 4 38 #define SFB_NUMBUCKETS (1 << SFB_BUCKET_SHIFT) /*

2020-07-13 23:06:54 122

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

redwingz的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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