致敬耗子哥
左耳朵耗子,原名陈浩,很多人称呼耗子哥。
互联网布道者,骨灰级程序员。
因心梗离开了。
我受到不少耗子哥的影响,对其博客中的 VIM 教程尤其深刻。
他的很多观点,都具有过来人深刻的教诲。
早上看到消息,本以为是假消息,毕竟这是一个没有真消息的年代。
但是没过几分钟,查证了,也沉默了。
他生前影响了很多人,他的离开,让整个中文技术圈轰动。
致敬耗子哥。
左耳朵耗子,原名陈浩,很多人称呼耗子哥。
互联网布道者,骨灰级程序员。
因心梗离开了。
我受到不少耗子哥的影响,对其博客中的 VIM 教程尤其深刻。
他的很多观点,都具有过来人深刻的教诲。
早上看到消息,本以为是假消息,毕竟这是一个没有真消息的年代。
但是没过几分钟,查证了,也沉默了。
他生前影响了很多人,他的离开,让整个中文技术圈轰动。
致敬耗子哥。
关于网络相关的历史文章中,很多次提到 Socket 套接字的重要性。最近看到 ICMP 的一些知识,发现和 Socket 有非常强的依赖。于是对 Socket 和周边,再做一次逻辑的梳理。
本文会对 ICMP 查询 / 差错报文 如何 NAT 网关 和写入 Socket 接收缓冲区进行具体阐释。
Socket 在系统内部创建后是唯一的。和 源 ip (本机 ip)、目标 ip (服务端 ip)、源端口、目标端口 有一定的绑定关系,根据具体协议而定。
通过这种绑定关系,可以将对应的数据包写入到对应的 Socket 接收缓冲区中供上层读取。
如果绑定关系出现 1-N,即一个数据包找到了多个 Socket,那么数据包就会往多个 Socket 中都写入一份,在后面 ICMP 中做分析。
Socket api,各个语言都有上层实现,底层都是对 Socket C Api 的封装。就是大家知道的 gethostbyname
、bind/connect/write/sendto
这些。
Socket 文件描述符,不是真的文件。在 Unix 下习惯对资源进行抽象,即一切接文件,包括内存数据。Socket 文件描述符是内核内存区域的指针。
套接字,就是指 Socket。一般也就是指 api 或者 文件描述符 其中的一种,看具体场景。
Socket api 可以直接操作传输层 (TCP/UDP) 或者网络层 (ICMP),从 Socket 往下 (传输层 / 网络层…) 开始,都属于操作系统管辖。
所以 HTTP 经历很多版本的优化,依旧差强人意,就是因为核心层 TCP 不好改动,需要系统升级。最后通过 UDP 做上层改造来实现 QUIC。
人们都对个人隐私比较在乎,但是对个人互联网隐私比较忽视。
前些年还流行一句话:在互联网上,没人知道你是一条狗,还有那幅经典的狗在屏幕前的画。
这句话旨在强调 “用户能够在互联网上以一种不透漏个人信息的方式发送和接收信息”。但是很多人却理解为:在互联网上很难留下踪迹,没人知道狗是我,或者我是狗。
只要在网络上行动,就一定会留下痕迹。只是痕迹留下的多少,以及持有痕迹的一方愿不愿意向外透露而已。
说网络是虚拟的,是从产品形态上来描述的。但网络本身并不是虚拟的,每一个网页、消息、短视频,都是要通过数据包进行电信号传输的,是真实存在的实体。
因为数据包是实体的,所以在互联网行走,一定会有痕迹。
最近本网站的 HTTPS SSL 证书过期了,于是去域名管理平台重新申请了一下。
无意中通过 dig 发现,网站的 DNS 解析 IP 一直是 198.18.1.xxx 这些。因为域名是 CNAME 映射到 github 的,所以又 dig 了一下 github 对应的 ip,发现也是 198.18.1.xxx。
从哪个角度来看,至少都有些问题。使用的 DNSPod 域名解析平台,dig 自定义域名和 github page 域名,怎么也不能在同一个网段里。
搜索了一下才知道,原来 ip 198 不是公网 ip,之前以为内网 ip 是 10/192 这些,知识还是有局限。
198.18.0.0/15 198.18.0.0 – 198.19.255.255 131,072 专用网络 用于测试两个不同的子网的网间通信。
https://zh.wikipedia.org/wiki/ 保留 IP 地址
在家庭网络中 dig 互联网的域名,为什么 dns 解析成了 198.x 呢?最后发现是最常使用的网络软件 Surge 引起的。
Surge 这些年给了我很多帮助,很感谢。特意开此文,讲解 Surge 工作原理,以致敬 Surge。
本文会对 Socket、Wireshark、网络系统代理 (http/s、socket5、POSIX)、网络网卡代理 (VIF)、VPN、DNS、DOH (SNI) 等知识点进行描述,以更加全面的讲解 Surge 的工作原理。
Surge 是一款非常强大的网络调试工具,很多人都对它极为陌生,主要原因是它的售价过高,宣传和使用的人也不多。
每一个 ITer 都应该使用它。网络在 IT 工作中时刻都需要关注,如 DNS 解析、网络流量查看和 hook、网络代理等等,这些 Surge 都可以做到。是发现和排查网络问题的神器,也可以协助工作。
这里会先介绍下 Surge 的使用,或许你会感兴趣。如果以后 Surge 帮助到了你,那也是一件幸事。
我一直都在回味前不久过了三十岁的生日,这个年龄坎悄无声息的就来了。
那晚,我和以往一样,回家的比较晚。老婆孩子都在等我,他们做了火锅,庆祝我生日。孩子还用压岁钱,送了我一瓶香水。
我知道那天是我生日,只是我自己也没有多少在乎和关注。但破防的夜宵,还是让我语言沉默和大脑峰回路转。
三十而立了。
当自己走到了三十的路口,停下来看看左右,再看看回头路,才发现目前正在停驻的路口,心里是多么的不想面对以及情绪复杂。
哥哥什么时候三十的,我没有注意。老婆三十的坎,我也没什么顿悟。而父母今年也是六十了,我写文章这一刻才发觉。奶奶也已经九十八了。
其实我本该对亲人,嗯,本该多一些关心的。老婆评价过我,说我对亲人没得感情。我不承认,但也不否认。真要做个度量的话,还是 “不否认” 占据多数的。
张学友近期发布了「又十年」,听着听着,就感慨万千,想表达的能表达的,都在一首歌里。
「一眨眼 又是一個十年」
「生命給我們什麼都不可能拒絕 這句話我當年不了解」
「那些瓜葛糾結 在某一天突然迎刃而解」
前两天教孩子玩 9 皇后版的数独游戏,对于全盘多个空格,如何尽可能快的填充。我提到得找到最容易解决的哪些空格,解决的空格越多,后面空格的数字约束也就越多,也就越好解决。
这个游戏的本质就是如何把每一个空格填充,并且效能最大,贪婪嘛。
今天说的双拼,就是这样一个文本处理的软技能,工作和生活上都是通杀,在之前的提高效率的手艺里也有提到。
生活上手机聊天打字,工作上项目汇报打字,各行各业各个人群都可以用得到。
2 天时间就可以熟练掌握的受益终生的软技能。
一年前写了一篇提高效率的手艺,提到了 Vim 作为划时代的文本编辑工具,可以有效的提高文本编辑的效率,对于写作或者 coding 都非常有用。
今天整理一个稍微进阶的教程。vimer 十几年的 95% 的操作使用,应该都在这里。
Vim 作者,Bram 于 2023.08.05 日去世了,享年 62 岁。像我这种只要碰键盘就离不开 vim 的人,对 vim 的感激,是十分强烈的。悼念 Bram。
计算机的基石和发展,也就这几十年。那一批有卓越贡献的人,后面二十年会相继离去。C 语言之父丹尼斯十年前走了,70 岁。后面会越来越多。
端上日志系统非常重要,对于用户侧的异常、排障、动线、行为等很多重要数据,都可以通过端上日志来做检索。如何搭建一套准确、高性能的完备日志 SDK 就显得尤为重要。 (另一个重要的排障信息源是埋点,通过埋点可以获取更精准的用户动线。后面有时间做一下埋点数据化方面的总结)。
移动端日志系统,将承载 Native、h5、动态化等多技术栈环境下的日志收口工作,同时要兼顾日志不丢不乱和高性能,其实还是有不少挑战的。
这一方面 CocoaLumberjack 其实已经做的很好,很多公司都用它作为自己的日志系统的基础框架。但它还不能作为大型 app 的流量日志收口系统。因为流量大了以后,少量的日志丢失也会带来很大的缺口,而性能方面它也有很多短板。
mmap 可以在 IO 性能方面有显著的提升,也就是后端比较通用的零拷贝技术。在移动端上 FastImageCache 对 mmap 有较深的应用,但它业务绑定太强,一般无法直接使用,更多的是学习 mmap 的落地。
本文会对日志系统的一些完备要素做一些说明,并特别讲解下 CocoaLumberjack、FastImageCache 两个技术库。
数字签名可以解决数据安全里面的完整性,身份认证和不可否认三大特性,但是解决不了机密性问题。机密性需要通过对称密钥 / 公私钥解决,所以数字签名其实和加解密 / 密文 / 机密性这些在概念上非一个层次。
签名的本质不在于加解密,而是加验签。
数字签名,定义上是拿着私钥的一方,通过私钥 X 对消息 M 进行加密 (加签),生成签名 N,并把消息 M 和签名 N 一起给出去。拿着公钥的一方,用公钥 Y 对签名 N 进行解密 (验签) 生成 M’。用消息 M 和 M’ 做比较,如果相等,则数据没有被篡改。如果不想等,则数据不再安全。
对于公私钥,我们一般是使用公钥加密私钥解密,这样可以保障单向数据机密性。而私钥加密公钥解密是解决不了机密性问题的,如果要通过公私钥完全解决数据机密性,则需要双向认证。
数字签名就使用了私钥加密公钥解密这套方案,所以数字签名是没有密文 / 机密性可言的。在数据签名里,一般把私钥加密叫做加签,公钥解密叫做验签。