说起来都会,用起来懵逼
这是一道传统的面试题,属于说了每个人都会的那种车轮子题。
很多技术知识就是这样,说起来都知道,用起来就懵逼。技术人和技术人的差距,大抵上就在这里了。
我的建议是:不要做这种人。
所以,在浏览器里输入了地址以后,事实上发生的事儿大概有这么几个:
- DNS
- TCP
- SSL/TLS
- HTTP
这些细节,其实都很有意思的。
关于 DNS
DNS说起来也简单,毕竟谜底就在谜面上,解析域名的嘛。大部分工程师都知道 DNS 就是把域名转换为 IP 地址的过程,但接下来,以下两个问题你是否有答案?
如果 nslookup 可以返回结果,但 ping 的时候 host 不存在,可能的原因是什么?
网传,localhost 不经过网卡,127.0.0.1 经过网卡,是真的吗?所以 localhost 比 127.0.0.1 性能上更快,是对的吗?
如果你并没有直接的答案,也没有验证这些结论的思路,那么大概率的,你对这部分的知识还停留在「看了就是懂了」的程度。进一步去看看,进一步动动手,如何?
推荐几篇笔记文章:
|
|
关于 TCP
实际上,作为 HTTP 的底层,TCP 上消耗的成本远比你想想的要多。
如果除了「三次握手」之外,你就不太清楚了,Linux 上如何处理 TCP,从握手的队列,到传输和缓存的窗口,客户服务端之间的网络是如何放大 TCP 性能的,这些更细节一些的问题如果你没有具体的思路去验证,下面这些文章是适合你进一步去了解的。
|
|
SSL/TLS
关于证书。
说起来,都知道这玩意是保障安全的,是用来加密的。但现实中我却发现,因为知其然不知其所以然,很多人在设计应用的安全部分的时候,几乎是本末倒置的。
- 一味的设计加密链路,但对密钥的保护却非常草率
- 没有系统性的理解 TLS 握手的原理,遇到问题,一味的选择 no-verify
这里就推荐一篇,我很喜欢的一位 SRE 的文章。
|
|
HTTP
实际上,标准的 HTTP 是有一套「语言」的。但由于国内的奇怪的历史原因,无论是 HTTP Code,还是 Method,大部分国内的实践都有些简单粗暴……
对于应用层最可见的一层协议,一些基本的知识还是应该知道的更完整一些的。
值得注意的是,未来的 HTTP(虽然也许很遥远)并不会基于 TCP 了。
|
|
最后
这不是一篇技术性科普文章,更多的是串一下自己之前阅读和收集的笔记。技术这种事,有就是有,没有就是没有,我是真的不喜欢知其然不知其所以然的感觉。
因为要发微信,所以超链接采用了很挫的形式。