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

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

原创 Scalable TCP拥塞算法

Scalable TCP(STCP)拥塞控制算法,在每个RTT周期内,如果没有发生拥塞,将在接收到每个ACK报文后,将拥塞窗口增加0.01(a值)。cwnd = cwnd + 0.01如果在一个RTT周期内第一次检测到拥塞发生,将拥塞窗口减低1/8倍(b值),在同一个RTT周期仅降低一次拥塞窗口。cwnd = cwnd − [0.125 * cwnd]使用STCP算法的发送端在任一发送速率下,经过大约70个RTT可实现速率的翻倍,其窗口更新算法具有可扩展性。如下,以窗口减半为例,即1/2cw

2020-05-30 23:52:47 240

原创 DPDK在testpmd中修改队列数量

一是可以在启动testpmd时,通过命令参数txq和rxq分别制定发送和接收队列的数量。# ./build/app/testpmd -l 0-3 -n 4 -- -i --txq=8 --rxq=8 ... testpmd> show port info allDriver name: net_i40e...Current number of RX queues: 8Max possible RX queues: 192Current number of TX queues: 8

2020-05-28 19:45:14 765

原创 使用DPDK应用示例l2fwd进行性能测试

系统环境,处理器为:Intel® Core™ i7-4790K CPU @ 4.00GHz。# cat /etc/issueUbuntu 20.04 LTS \n \l# # uname -aLinux flyingshark 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux# BIOS需要开启VT-x、VT-d支持,并且内核启动参数增加:"iommu=pt

2020-05-26 20:46:55 1570 1

原创 TCP-BIC Binary Increase Congestion算法

具体算法参见文档:Binary Increase Congestion Control for Fast,Long Distance Networks。BIC预设参数fast_convergence - 是否启用快速收敛。启用的话将会修正选择的最大拥塞窗口,尽快达到合理的窗口值。low_window - 只有当拥塞窗口大于此值时,BIC算法才开始生效。默认值为14,拥塞窗口小于此值时,采用传统的Reno TCP拥塞算法控制窗口。max_increment - 在二分查找增长拥塞窗口时,可增长的最大限

2020-05-25 23:41:23 245

原创 SlowStart阶段拥塞窗口增长

慢启动阶段的拥塞窗口增长函数tcp_slow_start如下,拥塞窗口以报文数量表示,参数acked表示当前ACK报文确认的数据包数量。如果拥塞窗口增加acked数量之后小于慢启动阈值ssthresh,使用二者相加结果作为新的拥塞窗口值。内核没有使用RFC3465中定义的ABC(Appropriate Byte Counting)算法,其最初设计的是针对按照字节表示拥塞窗口的系统。内核中规定了对数据报文的确认必须是对整个报文的确认,也可抵御ACK Division攻击。u32 tcp_slow_start

2020-05-20 23:42:48 291

原创 TCP快速恢复算法PRR

PRR算法(Proportional Rate Reduction)决定在丢包恢复(Loss Recovery)期间,对应于每个ACK报文,可发送的报文数量。目的是:1)快速平稳的从Loss中恢复;2)恢复之后拥塞窗口收敛与ssthresh。主要是为了解决Linux内核之前采用的恢复算法Rate-halving存在的一些弊端:在恢复阶段,为防止burst发送,内核将拥塞窗口设置为pipe+1,然而,如果由于应用程序没有数据可发送,最早将导致拥塞窗口降低为1,即使仅丢失了一个报文。在恢复之后,将拥塞窗口

2020-05-19 22:57:32 809

原创 TCP混合慢启动

混合慢启动(Hybrid Slow Start)使用二个信息来决定SlowStart阶段到拥塞避免阶段(Congestion Avoidance)的转换,一是ACK Train的长度;二是报文延迟的增长。ACK Train的长度为在一个RTT周期内,紧密相邻的ACK报文到达的时间间隔之和,内核默认间隔不大于2ms的一系列ACK报文为ACK Train。每个RTT周期,计算一次ACK Train长度,与估算的最小路径发送延迟进行对比,SlowStart阶段报文延迟的增长也可能意味着路径中的瓶颈路由器已经发生

2020-05-18 22:42:20 570 2

原创 忽略设置linkdown标志的路由表项

遇到一个路由转发问题,如下路由表,在ens40网卡链路断开的时候,目的地址为192.168.3.0/24网段的报文,还是走ens40网卡,而不是默认路由,导致报文被丢弃。$ ip routedefault via 192.168.9.1 dev ens39 192.168.3.0/24 dev ens40 proto kernel scope link src 192.168.3.248 192.168.9.0/24 dev ens39 proto kernel scope link src 192

2020-05-17 22:32:40 729

原创 TCP传输速率估算

如下公式,带宽取值为计算得出的数据发送速率与接收ACK速率两者之间的较小值。通常情况下,发送速率(send_rate)将大于ACK接收速率(ack_rate),但是,在面对ACK压缩等的情况下,将导致ACK接收速率意外的增大,此时,带宽应选取发送速率(send_rate)。 send_rate = #pkts_delivered/(last_snd_time - first_snd_time) ack_rate = #pkts_delivered/(last_ack_time - firs

2020-05-13 23:22:10 2202

原创 RACK与重复ACK

默认情况下sysctl_tcp_recovery的值为1(TCP_RACK_LOSS_DETECTION),也可通过PROC文件:/proc/sys/net/ipv4/tcp_recovery进行修改,如果设置了标志位TCP_RACK_NO_DUPTHRESH,表明RACK不使用重复ACK阈值(DupAck Threshold),默认未设置此标志。#define TCP_RACK_LOSS_DETECTION 0x1 /* Use RACK to detect losses */#define TCP

2020-05-11 20:45:25 219

原创 Reno报文乱序与快速重传

基础内容参见上一篇: SACK报文乱序级别reorderingReno乱序调整首先看一下,在Reno算法中,对重复ACK数量的修正。如果sacked_out表示的DupAck数量与丢失报文数量之和,大于发出去的总报文数量,可能是因为网络自身的报文复制所导致,包括对数据报文的复制或者对ACK报文的复制,这时候需要调整DupAck数量值。static bool tcp_limit_reno_sacked(struct tcp_sock *tp){ u32 holes; holes =

2020-05-09 23:28:59 190

原创 SACK报文乱序级别reordering

内核默认的初始乱序级别为TCP_FASTRETRANS_THRESH(3),最大值为300。即当接收到三个重复ACK报文时,触发快速重传。#define TCP_FASTRETRANS_THRESH 3static int __net_init tcp_sk_init(struct net *net){ net->ipv4.sysctl_tcp_reordering = TCP_FASTRETRANS_THRESH; net->ipv4.sysctl_tcp_retra

2020-05-08 20:45:30 330

原创 TCP套接口丢失与重传报文线索

TCP套接口丢失与重传报文线索由变量lost_skb_hint与retransmit_skb_hint所表示。丢失报文线索变量lost_skb_hint记录重传队列中上一次标记丢失报文的位置,其自身对应的skb不一定为丢失报文,也可能是SACK确认报文。如下函数tcp_mark_head_lost,其仅在sack恢复算法中使用,用于将重传队列中的相应报文标记为丢失状态,标记为丢失状态的报文数量...

2020-05-06 20:54:32 308

原创 TCP回撤拥塞状态

由于网络路径的变化或者延时的突然增加等,引发乱序并触发快速恢复或者RTO超时,TCP将进入TCP_CA_Recovery或者TCP_CA_Loss拥塞状态,如果随后检测到报文并没有丢失,TCP将撤销拥塞状态,恢复到之前的拥塞状态。拥塞撤销初始化其一,在进入快速恢复阶段时,不管是基于Reno或者SACK的快速恢复,还是RACK触发的快速恢复,都将使用函数tcp_enter_recovery进入T...

2020-05-02 21:35:50 337

原创 时间排序的SACK未确认报文链表

内核实现的时间排序的未确认报文链表(time-sorted sent but un-SACKed skbs),用于加速RACK算法的处理。tsorted链表初始化首先是位于套接口的初始化函数tcp_init_sock中,初始化此链表tsorted_sent_queue。void tcp_init_sock(struct sock *sk){ struct inet_connecti...

2020-05-01 23:53:32 190

WEB Portal 认证完整的交互报文

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

2018-04-24

IKEv2-camellia.pcap

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

2019-10-28

IKEv2-rw-cert2.pcap

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

2019-10-28

libssh2-1.8.0 and ssh2_batch example

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

2018-06-13

botan-ed25519.pcap

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

2019-10-28

redwingz的留言板

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

空空如也

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

TA关注的人 TA的粉丝

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