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

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

原创 Reno与RACK对丢失/重传报文的标记

主要涉及到两个变量,一是重传报文计数retrans_out;二是丢失报文计数lost_out。RACK丢失报文判断如下函数tcp_rack_detect_loss,如果报文具有丢失标志(TCPCB_LOST),但是没有重传标志(TCPCB_SACKED_RETRANS),表明丢失报文还未进行重传,不进行重复处理。否则,在RACK确认报文已经丢失之后,由函数tcp_mark_skb_lost进行...

2020-04-29 21:05:10 208

原创 TCP连接建立之后的SACK选项解析

这几天有点犯糊涂,搞不清楚连接建立之后,SACK选项的解析在什么地方处理。内核中唯一能解析SACK选项的函数就是tcp_parse_options,但是就找不到tcp_rcv_established函数在哪里调用它。这里犯了一个错误,一直以为tcp_validate_incoming函数仅是验证报文,其中的tcp_fast_parse_options只是快速解析timestamps选项。stat...

2020-04-28 19:22:28 160

原创 TCP报文丢失判断

主要介绍下RTO超时、NewReno、SACK以及RACK等情况下的报文丢失判断。RTO超时标记丢失报文在RTO超时处理中,套接口进入TCP_CA_Loss状态,由函数tcp_timeout_mark_lost标记套接口丢失报文。/* Enter Loss state. */void tcp_enter_loss(struct sock *sk){ tcp_timeout_mar...

2020-04-26 22:28:33 1014

原创 TCP零窗口探测

TCP零窗口探测用于获取触发对端的窗口更新报文,防止在窗口更新报文丢失之后,导致的死循环。其也有助于本端Qdisc满或者数据被发送节奏(Pacing)阻止导致的发送停滞。窗口探测开启在TCP报文发送函数tcp_write_xmit的处理中,如果最终未能发送任何报文,而且网络中报文为空(packets_out),套接口的发送队列中有数据,将返回true。造成此情况可能是由于惰性窗口综合征(SWS...

2020-04-22 19:55:24 1896

原创 TCP连接保活检测Keepalive

TCP连接的keepalive定时器用于定期检测连接是否正常。Keepalive初始化默认情况下Keepalive每两个小时触发一次,触发之后,最多发送9次探测报文,每个报文的间隔为75秒钟。即在9次探测都没有接收到对端的回复之后,认为连接已经断开。#define TCP_KEEPALIVE_TIME (120*60*HZ) /* two hours */#define TCP_KEEP...

2020-04-21 20:46:50 334

原创 TCP用户超时(UTO)

Linux内核提供了可设置的TCP用户超时时长(TCP User Timeout),其控制发送的未确认数据可保持多长时间,之后强制关闭连接。但是,内核不支持RFC5482定义的TCP UTO选项(User Timeout Option),不会将此设置通告给对端,其为本地超时时长。UTO用户接口应用层可通过setsockopt选项TCP_USER_TIMEOUT设置超时时长,内核将其保存在ics...

2020-04-18 23:32:58 358

原创 TCP Thin-Stream连接

Thin-stream属性,意味着应用程序以很低的速率发送数据,致使TCP等传输协议的重传机制不能有效的运行。一些场景(类似于在线游戏,控制系统,股票交易等)中,用户体验取决于数据的发送时延,报文丢失对于服务质量来说是灾难性的。极大的时延是由于TCP依赖于应用程序新的报文的发送,进而通过快速重传来启动丢失报文的重传,而不用等待较长时间的RTO超时。以上提到的时间敏感的交互应用,通常是会产生thi...

2020-04-16 22:47:56 314

原创 TCP的RTO值估算

大致介绍一下Linux内核实现的RTO值计算方式,以及与RFC6298的不同之处。RTT估算static void tcp_rtt_estimator(struct sock *sk, long mrtt_us){ struct tcp_sock *tp = tcp_sk(sk); long m = mrtt_us; /* RTT */ u32 srtt = tp-&...

2020-04-12 21:39:20 754

原创 TCP空闲连接的重启动

在TCP连接空闲一段时间之后,发送端再次开启发送时,可能导致大量的数据发送到网络中。由于一段空闲时间后,TCP发送端不能再使用ACK时钟发送新报文到网络中,所以,可能线速发送一整拥塞窗口的数据,容易造成网络拥塞,而且,网络状况可能已经改变。因此,内核中在空闲时间超过RTO之后,将使用慢启动恢复发送。空闲检查在空闲检查函数中,如果内核未打开在空闲之后启用慢启动的功能,即tcp_slow_star...

2020-04-09 21:39:58 450

原创 TCP拥塞窗口验证

如果在一个RTO时长内,拥塞窗口没有被完全的使用,TCP发送端将减小拥塞窗口。因为此时TCP发送端的拥塞窗口可能并非当前的网络状况,所以发送端应减小拥塞窗口。根据RFC2861,ssthresh应设置为其当前值与3/4倍的拥塞窗口值两者之间的最大值,而拥塞窗口设置为实际使用的量和当前拥塞窗口值之和的一半。在如下发送函数tcp_write_xmit中,如果实际执行了发送报文操作,即sent_pkt...

2020-04-08 21:20:36 319

原创 本地挂载openwrt镜像

以下编译了一个X86-64平台的openwrt镜像,完成之后在bin/targets/x86/64目录下文件,主要由内核文件,和两个根文件系统文件,格式分别为ext4和squashfs,还有两个内核与文件系统打包在一起的镜像文件(ext4和squashfs两种格式)。$: ~/openwrt/bin/targets/x86/64$ ls -ltotal 27360drwxr-xr-x 4 k...

2020-04-06 21:19:43 1751

原创 SACK Reneging

TCP发送端不能够清除SACK序号块确认的数据,因为接收端很可能由于内存压力等原因,删除乱序队列中SACK确认过的报文。发送端重传队列中的报文只有在接收到ACK报文的Acknowledge序号字段确认之后,才能移除队列和释放。接收端丢弃OFO报文如下在检测的已用接收缓存大于套接口总的接收缓存sk_rcvbuf时,并且接收缓存已不能够再扩大,最后的措施就是释放乱序报文队列,参见函数tcp_pru...

2020-04-04 10:28:43 287

原创 SACK选项及生成

SACK功能由两个TCP选项组成,分别为SACK_PERMITTED和SACK选项。前者用于协商SACK能力,仅可出现在设置了SYN标志的报文中,如下为其格式。 TCP Sack-Permitted Option: Kind: 4 +---------+---------+ | Kind=4 | Length=2| +---------+-------...

2020-04-02 21:31:42 442

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的粉丝

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