网络
网络协议实现、内核网络栈分析、网络系统设计与测量研究。
-
raw套接字和隧道设备(tap/tun)的区别
今天遇到一个很有意思的问题:clash使用隧道设备(为了形式上一致起见,下文直接用tun代替),用以在用户态直接读取L3数据包;使用raw套接字的程序,例如libpcap,也可以直接读取L3数据包。那这两个东西有什么区别?
-
【Linux】网络专题(六)——网络栈重传时机梳理
在上一节中我们从tcp_ack自顶向下分析,找到了网络栈的重传入口——__tcp_transmit_skb,本节我们会尽可能全面地梳理该函数是从哪条路径被调用到的。
-
【Linux】网络专题(四)——核心数据结构sock族类和net_device
本篇介绍网络栈中使用的核心数据结构sock和net_device,从而帮助我们更快更透彻地理解网络栈的实现细节。
-
【Linux】网络专题(五)——TCP拥塞控制
一般而言,拥塞的时候会出现很多问题,其中尤为频发的是报文段丢失和乱序。丢失的可能原因有不少,例如路由器转发队列满时丢弃,甚至可能是随机早期丢弃(RED);乱序就是到达先后顺序颠倒,乱序的报文可能走过了不同的转发路径,其转发排队时间、链路传播时间等都可能不一样,进而抹平乃至逆转了发送的先后时差。
-
【Linux】网络专题(二)——核心数据结构sk_buff
本篇介绍网络栈中使用的核心数据结构sk_buff,从而帮助我们更快更透彻地理解网络栈的实现细节。
-
【Linux】网络专题(三)——L4/L3数据通路
有了对sk_buff、sock和net_device的了解,我们接着介绍传输层数据通路,这里将以TCP为例。本节只介绍数据通路,要讲协议本身又需要很大篇幅,需要另开一篇文章。
-
【Linux】网络专题(一)——应用层与套接字层数据通路
本篇是Linux网络专题的开篇,这一系列将会自上而下梳理清楚,当我们调用应用层的接口发送报文时,操作系统里到底发生了什么事情。其参考文献放在前面:[译] Linux 网络栈监控和调优:发送数据(2017),有时间和精力的读者可以参考阅读。
-
【Linux】内核学习笔记(八)——网络栈简介
本篇是《Linux内核学习笔记》系列的第八篇。