很多骚年在进行编程工作的时候会用到网络库,Android里面我们从Volley到OKHttp,iOS里面我们从ASIHttpRequest到AFNetWorking。我们用这些网络库来实现上传下载,数据获取。从而讲丰富的数据展示在用户面前。80年代弹钢球的我一定无法了解这样的情景,当你打开操作系统中的web浏览器,输入一个资源定位符然后就可以获取远在万里之遥的一台服务器上存储的数据,并且经过web浏览器的处理以优雅漂亮的形式展示出来。何其伟大!
进入了21世纪之后,我们发现整个世界在改变着:数字化、网络化、信息化。而这些变化中,网络化是一个基础。是实现其他改变的基石。可以毫不夸张的说,辛勤的工作人员们在全世界搭建的各种网络,为我们提供了电视,数据,音频等便捷。你出门可以一个电话约朋友,打开视频网站可以看最新的剧集,客厅打开电视可以看到有趣的电视节目,好吧,可能这些电视节目并不是很有意思。
这样子,我们大概可以有一个了解,构建现代生活的网络大概有这么几种,电信网络,有线电视网络,计算机网络。
而这几个文章,主要是来自学生时代对计算机网络残存的记忆和一些无聊的呓语。也就是扯淡。
我们都知道的是计算机网络是实现驱动协议的一个工程。尤其是Web。在人们使用了路由和分组交换通过ISP提供商构建了一个这么老大的工程的时候,开始制定了一些列标准。并使之为人类造福。
因特网的基础建设者们通过双绞线,光纤,无限传输等等方式,将各种各样的的可以联网的设备连接起来,形成了因特网。并且通过之一种蜘蛛侠结网的方式将这个工程不断扩大。
随着工程的扩大,OSI的人们定义了一个七层网络模型(应用层,表示层,会话层,运输层,网络层,链路层,物理层),其实是蛮屌的,但是无奈发展不随着标准走,人们从已有现状中归纳了一个比较靠谱版(应用层,运输层,网络层,链路层,物理层)。
一个数据字段从一台电脑上,会被层层递进的加上一些标志,这个过程被人们称之为封包,雁过留痕。而通过物理传输发送到另一台电脑的时候又会被一层层剥离,雁过拔毛。正是由于这个复杂的过程涉及到的东西太多而繁杂。所以人们依据分层原则来设计理解他。
你在研发中常用的是HTTP,超文本传输协议,这个协议是依赖于传输层的TCP协议。通过三次握手建立无状态的连接,主要是能保证收发。当然,随着时代的发展,解决了温饱问题之后,人们就会想要大波妹子。基础传输能有之后,人们就想要安全,然后就有了SSL。
遇到了HTTP之后初学者还会学到一个概念,Socket。何为Socket,其实就是应用进程和传输层之间的一个门,而选择不同协议形式并建立套接字,将数据从应用进程推到传输层的过程,就是Socket编程。此时就不依赖HTTP这个东西了。
基于HTTP这中无状态的尿性,从事Web开发的伙伴们一定会遭遇一个叫Cookie的哥们。只是服务器对于客户浏览器请求之后写回给客户浏览器的一个值,以后再次请求的时候都会带着,服务端也会记录客户行为。实现些复杂的基于行为的推荐。
然后开发中还有个名词,CDN(内容分发网络)服务器加速,我会说它就是个代理缓存服务器。CDN公司在因特网上安装了许多地理上分开的缓存器。使大量流量实现本地化。
最后我将用代码实现个基于TCP的套接字,基于UDP的套接字,手动封装HTTP协议报文并详解含义。仔细分析SSL的安全属性。
好吧,我是开玩笑的,我才不会写这些东西。