kayoch1n's blog

「願いは誰にも 撃ち落とせない」

关于IP包长度超过MTU这件事

IPパケットのサイズがMTUを超えた件

缘起 某日想看一下 tls handshake 的过程 sudo tcpdump -n -v -i eth0 'tcp port 443 and (tcp[((tcp[12] & 0xf0) >> 2)] = 0x16)' 抓取 tls handshake message。这条filter的解释可以见这里 tcpdump: listening on eth...

“暗度陈仓”

从一个 VPN demo 认识 Linux TUN 接口

/dev/net/tun 是个特殊的文件,它是个字符设备(character special)(/dev/urandom 也是个字符设备),可按照字节流读取or写入 IP packets(L3)。上一篇笔记提到,通过 fd 写入 tun 接口的数据,会被视为操作系统从 tun 接口接收到的 IP packets。与之对应,当 IP packets 离开 netfilter 时,如果 OUT ...

“管中窥豹”

从一个 tun ping demo 认识 Linux netfilter 框架

这篇笔记要从一个 demo 说起。原程序是 github上面一个开源的rust网络通信组件的example,可以使用 tun 接口进行ping。因为我对 tun 接口以及 netfilter 的了解几乎是零,所以想学习一下相关知识,这篇笔记的主题是 netfilter,tun 接口的相关笔记在下一篇文章。 Python example 用 Python 改写了下这个 example,下文...

从一次DNS失效看 Ubuntu DNS 机制

桥接实验结束之后通过iproute2手动恢复多网卡。发现原先的 DNS 不管用了 ubuntu@VM-0-5-ubuntu:~/project$ curl qq.com curl: (6) Could not resolve host: qq.com 众所周知DNS用的端口是53,所以用tcpdump抓包任意网卡(>=2.2内核)并过滤53端口,结果显示DNS查询发往了127.0...

从多网卡看 Linux routing

食答辩了,大人.jpg

Linux route selection 给主机绑定多个物理网卡之后,需要正确配置路由表和RPDB才能让主机通过多网卡发包。在配置之前需要了解linux系统在将一个packet发往网卡的时候是如何选择路由的。所谓路由route,就是一条让系统知道应该将packet发到哪个网卡的记录。路由的选择过程涉及三个数据结构: 路由缓存 (route cache); RPDB(routi...

RISCV64 Virtual Memory

在RISCV64 RCORE OS 的虚拟内存之前的章节中,rcore存在以下问题: 程序内存大小受限制。程序数量越多,单个程序能使用的内存就越少; 无法保证数据安全。假如一个程序存在BUG或者安全漏洞,可能破坏另一个程序甚至是内核的内存区域。 虚拟内存的意义在于将上述问题“转嫁”到内核:由内核为程序提供一个大小远超物理内存的、不同程序的读写相互隔离的地址空间,同时禁止程序直...

String Encoding

string encoding TL;DR 编码(encoding)是将字符串变成一种用于进程间通信的格式的过程。 所谓的进程间通信包括但不限于文件I/O,网络I/O,共享内存。从这个角度上看有那么一点序列化的意思。字符串类型是编程语言意义上的概念,这些类型的变量需要经过编码才能进行传输。 编码需要解决的一个问题是,如何区分不同的字符。 ...

数论学习笔记 - Group, ring and field

己を信じ、貫け

Group, ring and field 这几个概念的条件是逐渐叠加的: Group 定义: a set with an operation $\cdot:G\times G\to G$ associativity identity $e$: $\exists e\in G\forall a\in G\implies a\cdot e=e\cdot a=a$ inve...

数论学习笔记 - RSA算法的数学原理

誰かを救う光でありたい

RSA算法 RSA是一种非对称的算法,也就是加密所用的私钥和解密的公钥不同。给定明文 $x$,公钥为 $m$ 和 $e$,密文为 $y$,那么加密过程用函数 $\text{encrypt}(x)$表示: \[y=\text{encrypt}(x)=x^{e}\pmod {m}\] 对于公钥 $m$,用于解密的私钥为 $d$,那么解密过程用函数 $\text{decrypt}(x)$表示...

HTTPS 反向代理

元気を出さないと、ご飯もおいしくないよ

现在的牛马不用框架的话估计搞不出来一个能用的后台web服务吧(心虚);但是既然有轮子可以用那用也无妨。流行的框架给予了码农极大的便利能够集中精力编写业务逻辑,HTTPS什么的当然是有内建支持的啦,毕竟你已经是一个成熟的框架了,需要学会自己上HTTPS(bushi)。 无奈最近出于测试需要用docker搞了一个服务,但是没有挂载目录,也没有外接DB,数据什么的直接就在容器里,一重启就gg。为...