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

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

主要涉及到两个变量,一是重传报文计数retrans_out;二是丢失报文计数lost_out。 RACK丢失报文判断 如下函数tcp_rack_detect_loss,如果报文具有丢失标志(TCPCB_LOST),但是没有重传标志(TCPCB_SACKED_RETRANS),表明丢失报文还未进行重...

2020-04-29 21:05:10 134 0

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

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

2020-04-28 19:22:28 104 0

原创 TCP报文丢失判断

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

2020-04-26 22:28:33 573 0

原创 TCP零窗口探测

TCP零窗口探测用于获取触发对端的窗口更新报文,防止在窗口更新报文丢失之后,导致的死循环。其也有助于本端Qdisc满或者数据被发送节奏(Pacing)阻止导致的发送停滞。 窗口探测开启 在TCP报文发送函数tcp_write_xmit的处理中,如果最终未能发送任何报文,而且网络中报文为空(pack...

2020-04-22 19:55:24 937 0

原创 TCP连接保活检测Keepalive

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

2020-04-21 20:46:50 220 0

原创 TCP用户超时(UTO)

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

2020-04-18 23:32:58 179 0

原创 TCP Thin-Stream连接

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

2020-04-16 22:47:56 175 0

原创 TCP的RTO值估算

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

2020-04-12 21:39:20 460 0

原创 TCP空闲连接的重启动

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

2020-04-09 21:39:58 278 0

原创 TCP拥塞窗口验证

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

2020-04-08 21:20:36 151 0

原创 本地挂载openwrt镜像

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

2020-04-06 21:19:43 1028 0

原创 SACK Reneging

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

2020-04-04 10:28:43 210 0

原创 SACK选项及生成

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

2020-04-02 21:31:42 212 0

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