【音樂】今生共相伴

20年前,我結婚了~

-----
我發現,這歌只有我一個人覺得好聽。。。
我結婚的時候,就是放這歌的~

因爲我很喜歡
歌詞也很好
1
分享 2020-05-01

3 个评论

霏艺Faye 图书管理员
在GitHub上看到一个开源项目
https://github.com/cloudflare/boringtun

我已经看完了

Linux的内核实现了内核态的wireguard
这个是cloudflare实现的用户态的wireguard

使用了Rust语言

重点看
device目录: 模拟虚拟网卡
noise目录:  网络通信协议

device目录下,只用看 tun_linux.rs 就可以了!精华!
这个文件,注意
open(b"/dev/net/tun\0".as_ptr() as _, O_RDWR)
这行是关键代码

ifru_flags: (IFF_TUN | IFF_NO_PI | IFF_MULTI_QUEUE) as _,

第二层关键
IFF_TUN 表示工作在 网络层 【IFF_TAP】 表示工作在数据链路层
IFF_MULTI_QUEUE 为了多队列访问,提升性能
其他的epoll kqueue 就是为了这个
epoll为了linux系统,kqueue为了mac系统
我们可以使用libevent代替


现在看noise,也就是重点wireguard的网络协议
重点看 handshake.rs 这个文件,mod.rs 这个文件
其中 handshake 里实现了握手协议
format_handshake_initiation 这个函数负责拼 handshake_initiation 报文
就是拼字符串,根据协议实现。。。【对应 TLS 里的 ClientHello】

format_handshake_response 这个函数负责拼 handshake_response 报文
也是拼字符串,根据协议实现。。。【对应TLS 里的 ServerHello】

拼字符串,我觉得是一个很机械的工作,我就没有细看,反正也就那么回事。。。

至于 noise 下的mod.rs
我推荐 只看
encapsulate 和 decapsulate 两个函数
分别是把 /dev/net/tun读取的buffer 封装为 wireguard协议
和 根据wireguard协议,解析为buffer 回写到 tun虚拟网卡

关键函数,我都已经给出了,你们只要看看哪些代码会调用
我说的这些函数,就可以对整个客户端有所了解!
在GitHub上看到一个开源项目https://github.com/cloudflare/bori...

连 Rust 都能看懂,完全不信你“不会编程”。
(大伙儿要是学过 Rust 都知道,这是一门学习门槛很高、很难入门的编程语言)
霏艺Faye 图书管理员 回复 Resistance
连 Rust 都能看懂,完全不信你“不会编程”。(大伙儿要是学过 Rust 都知道,这是一门学习门槛...

天下事,有难易乎,为之,则难者亦易矣,不为,则易者亦难矣~

要发言请先登录注册

要发言请先登录注册