ZingLix Blog

凡心所向,素履以往

九年过去了,TLS 1.3 带来了什么?

What's new in TLS 1.3?

距离 TLS 1.2 发布时隔九年,其中经过四年漫长的商定,TLS 1.3 正式面世,其设计目标简单来说就是让数据传输更快更安全。 更安全 TLS 采用的是混合的加密流程,也就是在通信过程中采用对称加密,该加密的密钥通过非对称加密协商得到。其中用 MAC 算法进行完整性校验,证书体系进行身份认证。这一流程听上去很完美,但现实却并不总是这么美好。 前向安全 前向安全(Forward S...

ESNI 与 ECH 的前世今生

Next Step towards Safer Internet

在当时介绍 TLS 的最后,提到过虽然 TLS 能够加密整个通信过程,但是在协商的过程中依旧有很多隐私敏感的参数不得不以明文方式传输,其中最为重要且棘手的就是将要访问的域名,即 SNI(Server Name Indication)。同时还有用于告知客户端可用的应用层协议的 ALPN 拓展,泄露这个会导致攻击者知道服务器所支持的服务以及连接的用途。 之所以会暴露如此重要的内容,并不是设...

关于分布式系统中一致性模型那些事

Isolation in ACID and Consistency in CAP

在分布式系统中,一致性模型是一个老生常谈的话题,而其之所以这么重要正是因为其复杂而又直接关系到一个分布式系统的正确性,所以值得被反复讨论。 在开发单机多线程程序的时候,不同线程如果不加任何措施同时对同一片内存进行操作会冲突造成不可预知的后果。分布式系统同样是个并发系统,这个问题依旧,不同的结点同时对同一个数据进行修改同样会造成不可预知的后果,造成数据一致性被破坏,同时加上分布式系统中可用性...

Mutex<Rc> 为什么不能在线程间传递?

重新理解 Rust 中的 Sync 与 Send

最近在用 Rust 写多线程程序的时候,一个编译器的错误让我感到了困惑。 问题 简单来说,我有一个结构体,内部有一个 Rc 的值,如下 1 2 3 struct A { val: Rc<u32>, } 很显然,Rc 并不线程安全,所以加锁保护,并且用 Arc 在线程之间传递,所以写了如下的代码 1 2 3 4 5 6 7 8 9 10 11 fn main()...

「图解Raft」让一致性算法变得更简单

Make Consensus Algorithm Simpler

最近在刷 MIT 的 6.824 分布式课程,里面花了很多课时来讲解 Raft 一致性算法,我也花了一段时间完成了课程 lab,算是理清楚了整个算法的流程,有需要 lab 答案的可以联系我,课程要求并不允许放在网上~ 工作流程 首先需要明确的是一致性算法的目标是什么,主要面对的问题是在只使用单个服务器时由于发生错误导致数据丢失等事情发生。解决这个问题的思路也很简单,就是备份,将操作重复到...

「论文笔记」The Deep Learning Compiler: A Comprehensive Survey

可能是第一篇关于深度学习编译器的综述

背景 现如今我们有了许多深度学习的框架,例如 TensorFlow、PyTorch、MXNet 等等。同时我们还要将其部署于不同的硬件之上,除了常见的 GPU 和 CPU,还有针对于机器学习设计的硬件,例如来自 Google 的 TPU、海思的 NPU、Apple 的 Bonic 等等。 这种场景有没有让你想起传统的编译器?以 LLVM 作为例子,其可以接受不同的语言(C++、Swift...

升级 WSL2 Ubuntu 至 20.04 LTS

Upgrade WSL2 to Ubuntu 20.04 LTS

最近 Ubuntu 20.04 正式发布了,但是 WSL 里装的还是 18.04,所以肯定要升级一下啦~ 18.04 可以很方便的升级到 20.04,但如果你现在用的还是 16.04 最好是先升级至 18.04 再升至 20.04 以避免一些奇奇怪怪的事情发生 更新现有环境 为了能够让现有的环境和升级后的差异尽可能小,从而避免一些更新失败的情况的发生,最好是先更新一下现有的环境...

Go 语法快速上手

Grammar Cheatsheet of Go

本文并不是一篇面向新手的入门文章,而是面向于有一定编程经验而且希望快速上手 Go 语言的人 阅读本文章最好了解 C、C++、Java 等语言之一的语法 本文中难免会有错误,接受一切纠错以及志同道合的人来交流,可以在网页最下方找到联系方式邮件联系我 变量 变量需要显式的声明,完整的语法如下。 1 var a int = 8 在提供初始化的值的时候,类型可以省略,不...

WSL2 的几个使用技巧

WSL2 Tips

从资源管理器访问 WSL2 WSL2 改善了文件系统,使得读写能力大大提升,但是 /mnt 挂载下的 Windows 文件貌似因为改用了网络协议下降了,最坑爹的是没办法监测文件的变动了,写前端的时候那些测试服务器本来会根据文件变动自动重新编译,现在因为无法监测改变这一功能就失效了。这也不是无解,解决的办法就是把项目文件移到 WSL 中。 借助于网络位置,虽然这些文件放进了 WSL 中,但...

WSL2 中访问宿主机 Windows 的代理

WSL2 Proxy Setting

最近疫情期间很多事情都得用代理连到学校内网去做,但是 WSL2 因为是通过虚拟机的方式实现,网络不再像 WSL1 一样与 Windows 共享,变成了一个新的网段,所以想使用宿主机的代理就比较麻烦了。 WSL 中获取宿主机 IP WSL 每次启动的时候都会有不同的 IP 地址,所以并不能直接用静态的方式来设置代理。WSL2 会把 IP 写在 /etc/resolv.conf 中,因此...