大家好,我是小麦,网络协议是一块比较让人头疼的东西,在我看来,协议这种东西,都是人指定的,里面会涉及到很多细节,也有很多设计哲学。
很久以前尝试看 uIP 的源码,当然还配合着《TCP/IP协议详解》这本书一起看,没过多久就放弃了,其实挺枯燥的。
uIP是专为8位和16位的嵌入式微控制器设计的微型TCP/IP协议栈,它提供了网络通信所必须的协议, 本身代码和占用的内存数都非常少;
uIP的源代码只有几KB, RAM占用仅几百字节。
看轻量级的代码的好处就是,代码量少,容易理清楚其中的逻辑;
lwip 和 uIP 的作者是同一个人;lwip这个协议栈应用更加广泛,而且功能也比较完善,不过代码量也大的多,后来在SOC上简单移植过这个协议栈,网上都有比较详细的教程,以太网芯片用的是DM9000,对于网络协议有了初步的认知,后来的后来就是漫漫的学习和积累的过程。
总所周知,在10 个程序员里面,肯定10 个都说自己学过网络协议,9 个说自己懂网络协议。
但真正面试的时候,能回答出相关问题的,可能只有两三个。比如:
“TCP 协议跟 UDP 协议有什么区别?”
“HTTPS 协议的底层原理是什么?”
想想这些你都能答出来吗?其实,参加过大厂面试的小伙伴应该都清楚,无论是国内的互联网大厂还是硅谷的 IT 公司,面试多少会问网络协议的知识。
这并不难理解,毕竟大厂更注重程序员的基本功,而且几乎所有的程序运行都会涉及到网络协议,一旦用错就容易产生灾难性的后果。
退一步讲,就算你不去大厂,但你但凡想在技术之路上走远一点,想成为技术大牛,做大系统,就必须搞定网络协议。
举个例子,很多人都被“技术变化太快,容易过时”所困扰过,从搜索引擎、大数据、云计算到人工智能、区块链...等。实际上,很多技术看起来轰轰烈烈,扒下外衣,本质的东西其实就是“计算机组成原理、操作系统、网络协议、数据结构与算法”这些基础知识和核心概念。
不想被滚滚而来的新技术淘汰的办法,就是掌握最核心本质的知识。它们不会像“X 天带你搞定 MySQL”这样的内容,更容易帮你找到工作,但正是这些知识,在你 40 岁之后依然很有价值。
网络协议这个东西,并不难,很多人学不好,跟智商没关系,纯粹是因为——网络协议太难背了。属于典型的一看觉得懂,一问就打鼓,一用就糊涂的知识。
怎么更轻松地学习网络协议呢?这个问题也一直困扰着我,直到我有幸遇到一位大神替我指点迷津,这个大神就是前网易云计算的首席架构师「刘超」。
超哥有 15 年的技术经验,写过 500 多页的《Lucene 原理与代码分析》,现在某个顶级大厂做技术(等级很高,我就不说了,得保密),他写的《趣谈网络协议》,是我在极客时间为数不多的、全程跟完、从头啃到尾的专栏,现在已经有 54000+ 的人订阅了。
超哥用他最擅长的比喻的方式讲概念,把路由协议、UDP 协议、TCP 协议、HTTP 协议、流媒体协议、P2P 协议还有 DNS 协议等,“通过故事讲出来”,每天通勤路上听两篇,跟听有声小说一样过瘾。
我最大的收获,就是帮我构建了我的知识体系。每学到新的内容,就知道什么放在哪里,思考问题时,也是根据体系和框架来判断的。
专栏正在做限时优惠的活动,现在拼团 + 口令「liuchao06」到手只需要 ¥119 ,即将恢复原价至 ¥199。有需要的闭眼入。
专栏有几个特色,当时我也是一眼被这几个亮点吸引住了:
1、用小说般的语言趣谈网络协议
之前学习网络协议,要看将近 10 本书,而且每本书之间都是独立的,但超哥的专栏中,所有的内容都串起来,就像电视连续剧一样,让你能够从点到线,再到面,系统理解网络协议之间的关系,而不是死记硬背,就比如说