前言 checksum(校验和)是一种错误检测机制。它确保,数据包在传输过程中,没有被意外篡改或损坏。 IP、TCP、UDP 等互联网协议,依赖校验和来保证数据的完整性。 日常应用层的开发过程中,不关心,也看不到,checksum 字段。 但是,一旦我们想修改/构造 raw packet,checksum 的计算和校验,就是一个绕不开的问题。 本文…
注:我没在参与过,生产场景下,交换机的开发和维护,所以有点纸上谈兵。当年的计算机网络课程,也学的稀烂,就当补补课吧。 交换机简介 二层交换机 找 AI,抄抄答案。 二层交换机是工作在OSI模型第二层(数据链路层)的网络设备,其核心功能是基于MAC地址,在局域网内进行以太网帧的快速交换。其工作原理可以概括为三个核心机制:学习、转发/过滤、泛洪,并辅以…
RSS 是什么 RSS(Receive side scaling) 是一种网络驱动技术,它能高效地将网络接收处理任务分配到多处理器系统中的多个 CPU 上。 下图是它的一般处理逻辑:图片来源(Toeplitz Hash Library) 网卡驱动程序,提取数据包信息,可以是四元组{src_ip, dst_ip, src_port, dst_port…
前言 最近看了 dpdk-dumpcap和 dpdk-pdump的实现过程。写篇文档总结下~ 把大象放在冰箱里面分为三步:打开冰箱、放进大象,关上冰箱。 网络抓包的流程也是如下: 先在数据包上执行 bpf filter,判断数据包匹配。 将匹配的数据包,发送给应用层程序。 应用层,将数据包保存到 pcap/pcapng 文件中。 dpdk-dump…
前言 在DPDK中,通常使用 dpdk-devbind Application 来 bind/unbind 设备。 在vpp中,vpp/src/plugins/dpdk/device/init.c at master · FDio/vpp 在程序启动的时候,自动bind设备。 本文,将探究下,DPDK场景下,网卡设备的bind/ubind过程。 P…
前言 vpp 的线程类型,可以分为控制面线程(vpp_main),和数据面线程(vpp_wk) root@localhost ~/w/3/vpp-upstream (master)# pidof vpp 2284230 root@localhost ~/w/3/vpp-upstream (master)# pidstat -t -p 2284230…
前言 我们在校园或者图书馆,会连接一些公共网络。在连接后,初次访问访问网络时,浏览器会自动跳转到一个登陆页面。这背后的原理嘛,不知道。 本文,将有个类似的实现。当访问任意一个地址的 80 端口时,这个访问将被劫持,并返回一个自定义的界面。这里,是为了感受下 tproxy(transparent proxy,透明代理) 的使用。 接着,我们将从内核源…
原理介绍 相关链接: 2.2.11. Reverse Path Forwarding Red Hat Documentation RFC 3704 - Ingress Filtering for Multihomed Networks Linux内核参数之rp_filter - 知乎 rp_filter,即 Reverse Path fi…
前言 有时候 ebpf 程序不好写。因为想要写好ebpf,需要对内核中的处理流程有些了解。 照葫芦画瓢是程序员的强项。可是有时候没有合适的葫芦参考,不好画瓢。比如,在 nftables 的 output 链 上,挂载 hook 函数,提取四元组。这并不好做,至少我还没写出来。写 ebpf 是一个痛苦的过程:程序可能会加载到内核失败;加载成功了,运行…
前言 参考自:VPN 原理以及实现 TUN/TAP 是操作系统内核中的虚拟网络设备,由软件进行实现,向操作系统和应用程序提供与硬件网络设备完全相同的功能。其中 TAP 是以太网设备(二层设备),操作和封装以太网数据帧,TUN 则是网络层设备(三层设备),操作和封装网络层数据包。 工作中不写vpn,但是得了解tun/tap的使用,要不然有的代码看不明…