由于前两年因为工作上的机会,需要实现一个应用层的协议的客户端处理程序,从而接触到了网络编程。慢慢的对这方面产生了一些的兴趣,准确的说是当你发现你按照某种大家约定好的方式去定义数据,交换数据而发现双方就可以协同工作时,有一种成就感。而当你使用抓包工具看到这背后的通信具体情况时,更是有一种拨开云雾见日出的恍然大悟感。
当时在搜索资料的时候,凭良心讲,资料真的不是很多,比起前端,python,这些热门的技术确实是少的可怜,但是幸好有两本书确实帮助了我太多。虽然我只是实现一个应用层的协议,但是这两本书让我对底层的TCP,UDP/IP的实现真的感觉有一种肃然起敬的感觉。在日常工作中,总说有效而又快速的交流,虽然我离悟道甚远,但我确实能从前面大牛们对于这种相关设计中体会到一种类似理念的东西,就像拥塞避免,快速重传,确认机制,让我感觉可用的地方远远不止于计算机。
写这个东西的主要目的是希望能帮助一些想初步了解这方面的知识的人吧,由于我个人技术水平本身的原因,可能很多地方都会有不完善或者错误的东西,如果有,特别希望各位大牛指出我来改正,毕竟,误人是很不好的。而起这个题目的原因是我恨透了那种速成模式的教程,最让我受不了的是就在前几天我看到一个边栏广告,赫然写着“6周学会人工智能,参与国家项目”,不是我亲眼看到我真不能相信。所以,我就想了这么个题目,其实我个人体会,30天学一个什么东西,可能菜鸟勉强了,菜鸟菜鸟你至少应该是只在门里面,只是有点菜,30天让我学个什么,我觉得我可能刚到门边吧。
别看我拽文起了这么几章的标题,其实简单的说我从这几个方面胡扯,第一个是TCP,UDP/IP和网络方面的理论基础知识,第二个是基本socket相关的编程,然后能想胡扯一些我接触过的稍微高级一点的相关知识,但是比起很多成熟的技术还是玩具水平,最后我想谈谈在前两年工作中实际运用这玩意儿所遇到的坑和实践与理论的差距。
其实现在很少有人真正的在工作中还去从最基本socket开始写一个服务器程序甚至客户段程序,你也可以从招聘的角度看,这方面的招聘很少很少,因为成熟的库太多了,更别说现在的像go语言写一个服务器程序更是方便很多。更何况这方面的技术成熟了也30多年了,这方面也不可能出现什么大的变动啊,更新啊什么的。但是我觉得就算是现在火热的互联网好歹也是建立在这些知识的基础上的,而且我感觉这方面有时候作为兴趣,了解一些底层的东西会让人对整个大的方向和自己到底到哪儿了有个比较好的认识。更何况,我觉得网络这方面的技术可以用博大精深来形容,多多学习会了解到很多理论设计方面的思想。
大部分的程序我可能会用c语言来表述,因为我觉得这只能算个入门方面的文档,c语言可以更单纯一些。 虽然说现在我感觉c/c++语言应用的方面越来越窄了,大部分都是老的,底层的方面还运用这些,毕竟如果单纯要开发个应用来说,这两种语言的周期和成本都比较高。这里面的程序基本上都是在ubuntu上编译的,没啥其他的原因,因为在windows上还得用winsock,wsa__\*那一套,怕麻烦,但是其实都差不多,就算移植到windows上也能用的,概念上更是基本相同。
我想废话到这里就扯的差不多了,最后贴一句我最喜欢的话之一吧,“博观而约取,厚积而薄发”。