Blog

TCP断开连接的状态变化时序图

Content #

断开的时候,我们可以看到,当 A 说“不玩了”,就进入 FIN_WAIT_1 的状态, B 收到“A 不玩”的消息后,发送知道了,就进入 CLOSE_WAIT 的状态。

A 收到“B 说知道了”,就进入 FIN_WAIT_2 的状态,如果这个时候 B 直接跑路,则 A 将永远在这个状态。TCP 协议里面并没有对这个状态的处理,但是 Linux 有,可以调整 tcp_fin_timeout 这个参数,设置一个超时时间。

如果 B 没有跑路,发送了“B 也不玩了”的请求到达 A 时,A 发送“知道 B 也不玩了”的 ACK 后,从 FIN_WAIT_2 状态结束,按说 A 可以跑路了,但是最后的这个 ACK 万一 B 收不到呢?则 B 会重新发一个“B 不玩了”,这个时候 A 已经跑路了的话,B 就再也收不到 ACK 了,因而 TCP 协议要求 A 最后等待一段时间 TIME_WAIT,这个时间要足够长,长到如果 B 没收到 ACK 的话,“B 说不玩了”会重发的,A 会重新发一个 ACK 并且足够时间到达 B。

A 直接跑路还有一个问题是,A 的端口就直接空出来了,但是 B 不知道,B 原来发过的很多包很可能还在路上,如果 A 的端口被一个新的应用占用了,这个新的应用会收到上个连接中 B 发过来的包,虽然序列号是重新生成的,但是这里要上一个双保险,防止产生混乱,因而也需要等足够长的时间,等到原来 B 发送的所有的包都死翘翘,再空出端口来。等待的时间设为 2MSL。

...

toc:Algorithm

Content #

位运算 #

二进制中1的个数

异或的使用 #

只出现一次的数字(异或的妙用) 只出现一次的数字III(异或运算的更高级的用法)

字符串 #

Robin-Karp算法 坏字符规则 好后缀规则 用散列表找出坏字符在模式串的位置下标 如何表示模式串中不同的后缀子串 计算并填充suffix与prefix数组 计算模式串往后滑动的位数

toc:DataScience

Content #

辛普森悖论 均值与平均值 墨菲定律 幸存者偏差 直方图和柱状图 幂律分布 拉普拉斯分布 拉弗曲线 标准差和离散系数 标准差与标准误差 六希格玛(Six Sigma) 蓄水池算法的思路 蓄水池算法明细 韦克斯勒离差智商 虱子让人健康 母乳喂养应该多久 伯克松悖论 得克萨斯神枪手谬误 替代终点问题 六个因果陷阱 均值回归 支持度、置信度、提升度 Apriori算法思想 协同过滤算法的弊病 三个最常见的协同算法 创新扩散模型 同理心地图 五力分析模型 Will, Can, Must 商业模式画布

用户留存率 AARRR 用户增长模型

toc:GCC

选项 #

-fno-builtin -fno-common -ffunction-sections -fpic和-fPIC -fomit-frame-pointer -Wl,-export-dynamic rpath(GCC Option)

-S: 生成编译器产生的汇编代码。 -c: 编译或汇编源文件,但不链接(link)。生成的是对象文件(object file)。

attribute #

变量属性 #

GCC Manual: 6.34.1 Common Variable Attributes attribute((weak)) attribute((weakref)) aligned属性(GCC) packed属性(GCC)

函数属性 #

GCC Manual: 6.33.1 Common Function Attributes attribute((noreturn)) const属性会让编译器只调用该函数一次

sub:GNU C对标准C的扩展 sub:Shared Library

toc:kernel

Boot #

内核设置栈段选择符到SS寄存器 32位系统调用过程 64位系统调用过程 Linux系统调用表

进程管理 #

TASK_KILLABLE 两种睡眠状态 根据oom_badness()函数来选择被杀的进程 task_struct中real_parent与parent这两个指针有何区别 CPU使用率公式 节拍率HZ 进程组和会话 硬中断与软中断 查看软中断和内核线程 进程初始化后栈的结构 向进程发送一个信号 进程切换时load_sp0的原理

内存管理 #

Section与Segment IA-32机器上的Linux进程内存布局 malloc的实现原理 malloc与sbrk 批发商与零售商 mmap的用法 mmap用于父子进程之间的通信 用户态和内核态是怎么切换的 栈切换的核心 协程的要点 execve原理 oom_adj brk与mmap 磁盘与文件的区别 Buffer和Cache kswapd0定期回收内存 PSS(Proportional Set Size) 查看进程虚拟地址空间分布 mm_struct中的task_size mm_struct中控制内存区域位置的成员 mm_struct中控制内存区域属性的成员 vm_area_struct成员 vm_area_struct与mm_struct中内存区域的关联

缓存 #

PageCache及RSS内存与swap空间 什么是Page Cache file-backed and anonymous 脏页写入磁盘的两种方式 查看使用Swap最多的进程 观察/proc/zoneinfo

#

Linux宏READ_ONCE和WRITE_ONCE RCU(Read-Copy Update)

文件系统 #

索引节点和目录项和磁盘 inode与iblock ext4引入了Extents open调用创建inode的过程 块组(block groups) ext4文件系统格式 Meta Block Groups 特性 软链接和硬链接的存储格式 目录的存储格式(ext4)

缓冲IO与非缓冲IO 直接IO与非直接IO 阻塞IO与非阻塞IO 同步IO与异步IO 通用块层 四种IO调度算法 衡量磁盘性能的五个指标 iostat指标解读 pidstat查看进程IO情况 Linux Storage Stack Diagram

Build #

kernel build system

toc:Learning

主题 #

Content #

思考的技术 #

思考与言语

认知 #

知识诅咒

学习之道 #

学习自相矛盾的本质。迁移是把所学的知识从一个知识背景应用到别处的能力。 从抽象角度学数学能更好地将知识迁移到各种应用。 费曼的方法 十个好的学习法则 十个坏的学习法则

究竟什么是学习 #

专家的直觉只在环境友好的领域才可能有效 乔丹对失败的痛恨 钢琴大师的启蒙老师的共同特点 真正有效的学习方法 秘密项目 泰德与文化自觉 儿童早教领域有个现象叫 凋零效应(fadeout effect)。各种各样的人生攻略,其实可称为 标准偏误(Normative Bias)

技能水平的成长,其实有两种不同的类型。

  1. 对数增长( 引以为傲的儿时经历是对数增长的)
  2. 指数增长( 学术研究是指数增长的)

我们对科学的理解到达 当前科学理解(current scientific understanding)这个水准就足够了。

用思维导图做决策和判断 无为状态的科学解释 内隐学习(implicit learning)

book:练习的心态

toc:Media

娱乐至死 #

在看美国电视的时候,我们经常会想到萧伯纳第一次看见百老汇和四十二大街上夜间闪烁的霓虹灯时发表的精彩评论。他说,如果你不识字,这些灯光无疑是美丽的。

电视就是奥尔德斯·赫胥黎《美丽新世界》中的“解忧丸”。控制人们的不是“老大哥”,而是电视上的“好迪都迪”。

只有深刻而持久地意识到信息的结构和效应,消除对媒介的神秘感,我们才有可能对电视,或电脑,或任何其他媒介获得某种程度的控制。

钟表把时间从人类的活动中分离开来 媒介即隐喻 把媒介称作隐喻的道理 阅读过程能促进理性思维 电报会创造一种新的话语定义 失去语境的信息环境 信息和行动之间的关系变得抽象而疏远起来了 电报只适合于传播转瞬即逝的信息 摄影是一种只描述特例的语言 照片无法同这个世界理论 为了让无用的信息派上用场而制造问题 躲躲猫的世界 思考无法在电视上得到很好的表现 把更多的注意力转向了如何让自己变得更上镜 好…现在 报道的真实性要取决于新闻播音员的被接受程度 新闻节目是一种为了娱乐观众而上演的表演 紧跟着播放的广告会在瞬间消解新闻的重要性 掩藏在电视新闻节目超现实外壳下的是反交流的理论 只有娱乐才是新闻 电视教育的三条戒律

幻象 #

sub:伪事件(pseudo-events) travel-tour-sightseeing 畅销书倒映了读者的体验,而没有任何扩充 镜像效应(幻象) 艺术家是唯一能够制造非具象艺术的工具

toc:Network

底层网络 #

环路问题 STP的四个基本概念 ICMP终点不可达的场景 网关和路由器 两个运营商的路由配置示例

Socket #

常用的网络 I/O 模型包括下面这几种:

HTTP2能否替换WebSocket

Network #

带宽、吞吐量、延时、PPS TX和RX相关指标 查看发送队列与接收队列 全连接队列与半连接队列 水平触发和边缘触发 DPDK XDP(eXpress Data Path) 惊群问题 MAC地址的唯一性 网络设备的状态标识 前向纠错与后向纠错 增大半连接的容量

sub:IP sub:TCP sub:TLS sub:HTTP sub:NetworkTools sub:Route sub:DNS sub:DHCP