博客园 - lshs
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=173819
2021-01-15T01:28:22Z
lshs
https://www.cnblogs.com/lshs/
feed.cnblogs.com
https://www.cnblogs.com/lshs/p/14276541.html
工欲善其事,必先利其器-redis 6.0 RCMB集群协议wireshark解析插件 - lshs
先看效果 代码实现 需要修改适配相关的端口,或者wireshark设置强制解析 do -- 简单的认为单个tcp报文就是单个rcmb消息,假设不会拆包或者合包 local p_RCMB = Proto("RCMB","Redis Cluster message bus") --RCmb协议的基础字段
2020-10-05T04:24:00Z
2020-10-05T04:24:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】先看效果 代码实现 需要修改适配相关的端口,或者wireshark设置强制解析 do -- 简单的认为单个tcp报文就是单个rcmb消息,假设不会拆包或者合包 local p_RCMB = Proto("RCMB","Redis Cluster message bus") --RCmb协议的基础字段 <a href="https://www.cnblogs.com/lshs/p/14276541.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/14276466.html
netlink基础结构 - lshs
结构图netlink特点netlink socket创建流程代码流程关键函数关键变量相关函数netlink bind绑定流程代码流程相关函数/宏定义connect调用代码流程sendto & sendmsg关键函数wireshark 抓取netlink报文netlink_recvmsg关键函数其他资
2020-10-05T03:56:00Z
2020-10-05T03:56:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】结构图netlink特点netlink socket创建流程代码流程关键函数关键变量相关函数netlink bind绑定流程代码流程相关函数/宏定义connect调用代码流程sendto & sendmsg关键函数wireshark 抓取netlink报文netlink_recvmsg关键函数其他资 <a href="https://www.cnblogs.com/lshs/p/14276466.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6198327.html
Redis4.0模块子系统实现简述 - lshs
一、模块加载方法1、在配置文件或者启动参数里面通过指令加载2、Redis启动后,通过指令加载,另外可以查询当前所有已加载模块。可以卸载已经加载的模块,注意name为模块的注册名字,不一定和模块文件名相同。二、介绍Redis模块是一种动态库,可以用与Redis内核相似的运行速度和特性来扩展Redis内核的功能。作者认为lua脚本只是组合Redis内核的现有功能,但是Redis模块则可以扩展Redis...
2016-12-19T09:30:00Z
2016-12-19T09:30:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、模块加载方法1、在配置文件或者启动参数里面通过指令加载2、Redis启动后,通过指令加载,另外可以查询当前所有已加载模块。可以卸载已经加载的模块,注意name为模块的注册名字,不一定和模块文件名相同。二、介绍Redis模块是一种动态库,可以用与Redis内核相似的运行速度和特性来扩展Redis内核的功能。作者认为lua脚本只是组合Redis内核的现有功能,但是Redis模块则可以扩展Redis... <a href="https://www.cnblogs.com/lshs/p/6198327.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6195257.html
Redis4.0 主从复制(PSYN2.0) - lshs
Redis4.0版本相比原来3.x版本,增加了很多新特性,如模块化、PSYN2.0、非阻塞DEL和FLUSHALL/FLUSHDB、RDB-AOF混合持久化等功能。尤其是模块化功能,作者从七年前的redis1.0版本就开始谋划,终于在4.0版本发布了,所以版本号也就从3.x直接迭代到了4.0以表示版本变化之大。简单看了一下新版的PSYN2.0,虽然很多细节没搞清楚,但是大概流程倒是搞明白了。一、主...
2016-12-18T11:09:00Z
2016-12-18T11:09:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】Redis4.0版本相比原来3.x版本,增加了很多新特性,如模块化、PSYN2.0、非阻塞DEL和FLUSHALL/FLUSHDB、RDB-AOF混合持久化等功能。尤其是模块化功能,作者从七年前的redis1.0版本就开始谋划,终于在4.0版本发布了,所以版本号也就从3.x直接迭代到了4.0以表示版本变化之大。简单看了一下新版的PSYN2.0,虽然很多细节没搞清楚,但是大概流程倒是搞明白了。一、主... <a href="https://www.cnblogs.com/lshs/p/6195257.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6113061.html
13种细分类型的TCP重传小结(一张表总结4.4内核所有TCP重传场景) - lshs
具体每种重传类型的wireshark示例解说参考前文 来自为知笔记(Wiz)
2016-11-07T06:54:00Z
2016-11-07T06:54:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】具体每种重传类型的wireshark示例解说参考前文 来自为知笔记(Wiz) <a href="https://www.cnblogs.com/lshs/p/6113061.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038917.html
TCP/IP Illustrated Vol1 Second Edition即英文版第二版,TCP部分个人勘误 - lshs
目前已经有了英文版第二版的TCPIP详解,中文版暂时还没有,但是英文版还是有好几处错误,作者和官方竟然没有维护一个勘误表。 个人阅读过程中针对TCP部分可能有问题的地方简单勘误一下 P596:示意图中最后一条TCP消息,Seq=K+1,作者写成了Seq=K。 P600:TCP同关示意图中最后一条TC
2016-11-07T06:52:00Z
2016-11-07T06:52:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】目前已经有了英文版第二版的TCPIP详解,中文版暂时还没有,但是英文版还是有好几处错误,作者和官方竟然没有维护一个勘误表。 个人阅读过程中针对TCP部分可能有问题的地方简单勘误一下 P596:示意图中最后一条TCP消息,Seq=K+1,作者写成了Seq=K。 P600:TCP同关示意图中最后一条TC <a href="https://www.cnblogs.com/lshs/p/6038917.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038904.html
epoll源码及数据结构 - lshs
一、epoll_create & epoll_create1 SYSCALL_DEFINE1(epoll_create, int, size) sys_epoll_create->sys_epoll_create1 SYSCALL_DEFINE1(epoll_create1, int, flags)
2016-11-07T06:50:00Z
2016-11-07T06:50:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、epoll_create & epoll_create1 SYSCALL_DEFINE1(epoll_create, int, size) sys_epoll_create->sys_epoll_create1 SYSCALL_DEFINE1(epoll_create1, int, flags) <a href="https://www.cnblogs.com/lshs/p/6038904.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038843.html
TCP系列55—拥塞控制—18、其他拥塞控制算法及相关内容概述 - lshs
前面我们演示分析了100+个wireshark TCP实例,拥塞控制部分也介绍常见的拥塞处理场景以及4种拥塞撤销机制,但是我们一直使用的都是reno拥塞控制算法。实际上拥塞控制发展到今天已经有了各种各样的拥塞控制算法,而且普遍认为单纯基于丢包的reno拥塞控制算法已经不适应当前internet网络了,最近谷歌又折腾出了一个BBR拥塞控制算法,对比国内,还没有一个在TCP领域有突出贡献的公司,谷歌在...
2016-11-07T06:40:00Z
2016-11-07T06:40:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】前面我们演示分析了100+个wireshark TCP实例,拥塞控制部分也介绍常见的拥塞处理场景以及4种拥塞撤销机制,但是我们一直使用的都是reno拥塞控制算法。实际上拥塞控制发展到今天已经有了各种各样的拥塞控制算法,而且普遍认为单纯基于丢包的reno拥塞控制算法已经不适应当前internet网络了,最近谷歌又折腾出了一个BBR拥塞控制算法,对比国内,还没有一个在TCP领域有突出贡献的公司,谷歌在... <a href="https://www.cnblogs.com/lshs/p/6038843.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038839.html
TCP系列54—拥塞控制—17、AQM及ECN - lshs
一、概述 ECN的相关内容是在RFC3168中定义的,这里我简单描述一下RFC3168涉及的主要内容。 1、AQM和RED 目前TCP中多数的拥塞控制算法都是通过缓慢增加拥塞窗口直到检测到丢包来进行慢启动的,这就会导致数据包在路由器缓存队列堆积,当路由器没有复杂的调度和缓存管理策略的时候,路由器一般
2016-11-07T06:40:00Z
2016-11-07T06:40:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述 ECN的相关内容是在RFC3168中定义的,这里我简单描述一下RFC3168涉及的主要内容。 1、AQM和RED 目前TCP中多数的拥塞控制算法都是通过缓慢增加拥塞窗口直到检测到丢包来进行慢启动的,这就会导致数据包在路由器缓存队列堆积,当路由器没有复杂的调度和缓存管理策略的时候,路由器一般 <a href="https://www.cnblogs.com/lshs/p/6038839.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038823.html
TCP系列53—拥塞控制—16、Destination Metrics和Congestion Manager - lshs
一、概述我们之前介绍过rtt、ssthresh等变量,这些变量一般在TCP连接建立的时候有个初始值,然后随着TCP的数据交互逐渐调整到适应对应的网络状态的值。但是如果每次TCP建立连接都依靠默认初始值逐渐调整,那么可能需要一段时间才能调整到合适值,这显然会降低TCP性能,对于这种场景一种优化方案就是destination metrics。RFC2140中描述,如果新建立的连接从已经关闭的连接缓存的...
2016-11-07T06:37:00Z
2016-11-07T06:37:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述我们之前介绍过rtt、ssthresh等变量,这些变量一般在TCP连接建立的时候有个初始值,然后随着TCP的数据交互逐渐调整到适应对应的网络状态的值。但是如果每次TCP建立连接都依靠默认初始值逐渐调整,那么可能需要一段时间才能调整到合适值,这显然会降低TCP性能,对于这种场景一种优化方案就是destination metrics。RFC2140中描述,如果新建立的连接从已经关闭的连接缓存的... <a href="https://www.cnblogs.com/lshs/p/6038823.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038814.html
TCP系列52—拥塞控制—15、前向重传与RACK重传拥塞控制处理对比 - lshs
一、概述这里主要简单分析一个丢包重传并恢复的场景,通过不同的设置让这个相同的场景分别触发RACK重传和前向重传,通过对比说明以下问题:Forward Retransmit可以产生只有重传标记的数据包,也可以产生同时具有重传标记和SACK标记的数据包,注意这里说的这些数据包是没有Lost标记的,这是前向重传与之前介绍的快速重传及其变种的差异,进而会对in_flight的统计产生影响。Recovery...
2016-11-07T06:36:00Z
2016-11-07T06:36:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述这里主要简单分析一个丢包重传并恢复的场景,通过不同的设置让这个相同的场景分别触发RACK重传和前向重传,通过对比说明以下问题:Forward Retransmit可以产生只有重传标记的数据包,也可以产生同时具有重传标记和SACK标记的数据包,注意这里说的这些数据包是没有Lost标记的,这是前向重传与之前介绍的快速重传及其变种的差异,进而会对in_flight的统计产生影响。Recovery... <a href="https://www.cnblogs.com/lshs/p/6038814.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6113083.html
使用Crash工具查看一个TCP listen sock内存布局实例 - lshs
利用crash工具,我们可以很方便的查看正在运行内核的一些全局变量的数据结构,如TCP的ehash、bhash哈希桶,全局变量的查看比较简单。Crash工具还允许我们查看调用堆栈内部的局部变量,下面示例查看一个进程的listen sock结构(实际上从file->private_data中查看更为方
2016-11-07T06:36:00Z
2016-11-07T06:36:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】利用crash工具,我们可以很方便的查看正在运行内核的一些全局变量的数据结构,如TCP的ehash、bhash哈希桶,全局变量的查看比较简单。Crash工具还允许我们查看调用堆栈内部的局部变量,下面示例查看一个进程的listen sock结构(实际上从file->private_data中查看更为方 <a href="https://www.cnblogs.com/lshs/p/6113083.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038805.html
TCP系列51—拥塞控制—14、TLP、ER与拥塞控制 - lshs
一、概述这里的重点是介绍TLP、ER与拥塞控制并不是介绍TLP和ER本身,因此TLP和ER的详细内容请翻前文。在TLP与拥塞控制的交互中有几个点需要注意1、TLP触发的重传后,TCP仍然处于Open状态,TLP重传也不会更新lost_out等状态变量,TLP重传发出的是探测报文并不是因为当前确定丢包而重传。2、TLP与ER/FACK是相互组合的,TLP触发的FACK重传与之前介绍的FACK下快速恢...
2016-11-07T06:35:00Z
2016-11-07T06:35:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述这里的重点是介绍TLP、ER与拥塞控制并不是介绍TLP和ER本身,因此TLP和ER的详细内容请翻前文。在TLP与拥塞控制的交互中有几个点需要注意1、TLP触发的重传后,TCP仍然处于Open状态,TLP重传也不会更新lost_out等状态变量,TLP重传发出的是探测报文并不是因为当前确定丢包而重传。2、TLP与ER/FACK是相互组合的,TLP触发的FACK重传与之前介绍的FACK下快速恢... <a href="https://www.cnblogs.com/lshs/p/6038805.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038802.html
TCP系列50—拥塞控制—13、Eifel探测下的拥塞撤销 - lshs
一、概述我们之前在SACK关闭场景下的拥塞撤销那篇文章中提到过Eifel探测算法(Eifel Detection Algorithm),最早在介绍DSACK和FRTO的时候我们就有提到过Eifel探测算法。Eifel探测算法是基于TSopt选项中TSV的单调非减特性设计的。简单介绍一下Linux中Eifel探测算法的实现,Linux会在TCP进行第一次重传的时候把重传数据包的TSV记录在状态变量r...
2016-11-07T06:34:00Z
2016-11-07T06:34:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述我们之前在SACK关闭场景下的拥塞撤销那篇文章中提到过Eifel探测算法(Eifel Detection Algorithm),最早在介绍DSACK和FRTO的时候我们就有提到过Eifel探测算法。Eifel探测算法是基于TSopt选项中TSV的单调非减特性设计的。简单介绍一下Linux中Eifel探测算法的实现,Linux会在TCP进行第一次重传的时候把重传数据包的TSV记录在状态变量r... <a href="https://www.cnblogs.com/lshs/p/6038802.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038794.html
TCP系列49—拥塞控制—12、DSACK下的拥塞撤销 - lshs
一、概述DSACK下的虚假重传的检测我们之前重传部分的文章已经介绍过了,这里简单说一下拥塞控制部分的实现。linux内部会维护一个undo_retrans状态变量,其值为已经重传的次数减掉被DSACK检测到的虚假重传的次数,例如当前总共重传了5个数据包,DSACK检测到3个虚假重传,那么undo_retrans即为2。undo_retrans初始化为-1,当发生重传的时候,如果undo_retra...
2016-11-07T06:33:00Z
2016-11-07T06:33:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述DSACK下的虚假重传的检测我们之前重传部分的文章已经介绍过了,这里简单说一下拥塞控制部分的实现。linux内部会维护一个undo_retrans状态变量,其值为已经重传的次数减掉被DSACK检测到的虚假重传的次数,例如当前总共重传了5个数据包,DSACK检测到3个虚假重传,那么undo_retrans即为2。undo_retrans初始化为-1,当发生重传的时候,如果undo_retra... <a href="https://www.cnblogs.com/lshs/p/6038794.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038792.html
TCP系列48—拥塞控制—11、FRTO拥塞撤销 - lshs
一、概述FRTO虚假超时重传检测我们之前重传章节的文章已经介绍过了,这里不再重复介绍,针对后面的示例在说明两点1、FRTO只能用于虚假超时重传的探测,不能用于虚假快速重传的探测。2、延迟ER重传触发的进入Recovery状态时候,并不会立即更新cwnd。本篇在演示FRTO的同时,还会涉及到ER超时重传、TLP探测、SACK关闭场景下的拥塞撤销,后面或者前面都会有针对这些场景的专门介绍文章。一、wi...
2016-11-07T06:32:00Z
2016-11-07T06:32:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述FRTO虚假超时重传检测我们之前重传章节的文章已经介绍过了,这里不再重复介绍,针对后面的示例在说明两点1、FRTO只能用于虚假超时重传的探测,不能用于虚假快速重传的探测。2、延迟ER重传触发的进入Recovery状态时候,并不会立即更新cwnd。本篇在演示FRTO的同时,还会涉及到ER超时重传、TLP探测、SACK关闭场景下的拥塞撤销,后面或者前面都会有针对这些场景的专门介绍文章。一、wi... <a href="https://www.cnblogs.com/lshs/p/6038792.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038788.html
TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR - lshs
一、概述FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进。从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢复下当探测到丢包的时候,会设置ssthresh = max (FlightSize / 2, 2*MSS)、 cwnd=ssthresh+3*MSS,随后发送端收到dup ACK的时候进行cwnd的inf...
2016-11-07T06:31:00Z
2016-11-07T06:31:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进。从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢复下当探测到丢包的时候,会设置ssthresh = max (FlightSize / 2, 2*MSS)、 cwnd=ssthresh+3*MSS,随后发送端收到dup ACK的时候进行cwnd的inf... <a href="https://www.cnblogs.com/lshs/p/6038788.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038783.html
TCP系列46—拥塞控制—9、SACK下的快速恢复与Limited transmit - lshs
一、概述 1、SACK下的特殊处理过程 SACK下的拥塞控制处理是linux中拥塞控制的实现依据,再次强调一遍RFC6675的重要性,linux中拥塞控制主体框架的实现是与RFC6675一致的,所以如果要理解linux中拥塞控制的实现,强烈建议看一下RFC6675。我这里给出RFC6675中SACK
2016-11-07T06:31:00Z
2016-11-07T06:31:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述 1、SACK下的特殊处理过程 SACK下的拥塞控制处理是linux中拥塞控制的实现依据,再次强调一遍RFC6675的重要性,linux中拥塞控制主体框架的实现是与RFC6675一致的,所以如果要理解linux中拥塞控制的实现,强烈建议看一下RFC6675。我这里给出RFC6675中SACK <a href="https://www.cnblogs.com/lshs/p/6038783.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038780.html
TCP系列45—拥塞控制—8、SACK关闭的拥塞撤销与虚假快速重传 - lshs
一、概述这篇文章介绍一下TCP从Recovery状态恢复到Open状态的时候cwnd的更新。我们在tcp重传部分的文章中曾经介绍过虚假重传的概念,Linux在探测到虚假重传的时候就会执行拥塞撤销操作。所谓的拥塞撤销是指撤销虚假的快速重传或者RTO超时重传对拥塞窗口的影响。有多种方法可能会触发拥塞撤销如前面介绍的DSACK和FRTO以及后面要介绍的Eifel算法以及本文介绍的SACK关闭场景下的拥塞...
2016-11-07T06:30:00Z
2016-11-07T06:30:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】一、概述这篇文章介绍一下TCP从Recovery状态恢复到Open状态的时候cwnd的更新。我们在tcp重传部分的文章中曾经介绍过虚假重传的概念,Linux在探测到虚假重传的时候就会执行拥塞撤销操作。所谓的拥塞撤销是指撤销虚假的快速重传或者RTO超时重传对拥塞窗口的影响。有多种方法可能会触发拥塞撤销如前面介绍的DSACK和FRTO以及后面要介绍的Eifel算法以及本文介绍的SACK关闭场景下的拥塞... <a href="https://www.cnblogs.com/lshs/p/6038780.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/lshs/p/6038935.html
使用kdump内核调试工具遇到的问题及解决 - lshs
修改linux内核代码或者内核模块的时候,搞不好就会造成linux死机崩溃,crash死机后/var/log/kern.log里面不会有任何异常信息记录。这时候kdump就会派上用场了,网上kdump的中英文介绍资料很多,但是很多都是基于系统自带的linux进行说明的,这里记录一下在新编译的内核上使
2016-11-07T06:30:00Z
2016-11-07T06:30:00Z
lshs
https://www.cnblogs.com/lshs/
【摘要】修改linux内核代码或者内核模块的时候,搞不好就会造成linux死机崩溃,crash死机后/var/log/kern.log里面不会有任何异常信息记录。这时候kdump就会派上用场了,网上kdump的中英文介绍资料很多,但是很多都是基于系统自带的linux进行说明的,这里记录一下在新编译的内核上使 <a href="https://www.cnblogs.com/lshs/p/6038935.html" target="_blank">阅读全文</a>