SSL/TLS的原理以及互联网究竟是如何工作的(1) —“每个协议生而平等”

时间:2022-09-30 11:07:18
计算机网络里有一个模型非常有名:OSI(Open Systems Interconnection,开放系统互连)模型,几乎所有的计算机网络教学和科研都要在OSI的基础上进行,想要讨论计算机网络中的问题也要依靠这个模型。

OSI模型是这样的结构(从底层到最高层):

1,物理层(physical layer)
物理层负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态和时钟要求、数据编码和数据传输用的连接器。有线网络信号有电流脉冲(电缆传输)和电磁脉冲(光纤传输)两种。物理层由物理存在的传输介质(例如网线)和设备(例如网卡,路由器)组成。

2,数据链路层(data link layer)
数据链路层通过物理网络链路提供可靠的数据传输。不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。数据链路层实际上由两个独立的部分组成,介质存取控制(Media Access Control,MAC)和逻辑链路控制层(Logical Link Control,LLC)。数据链路层负责在物理层上建立通信链路(每次打开浏览器联网就是建立了数据链路,关闭浏览器之后相应的数据链路就不存在了)。PPP(点对点协议)就在数据链路层上。

3,网络层(network layer)
网络层负责在源和终点之间建立连接,为不同主机提供逻辑通信。它一般包括网络寻径,还可能包括流量控制、错误检查等。网络层只负责建立连接,并不保证连接的可靠性。大名鼎鼎的IP(互联网协议)就在网络层。

4,传输层(transport layer)
在 OSI 模型中传输层是负责数据通信的最高层,是惟一负责总体数 据传输和控制的一层,保证连接的可靠性,直接给运行在不同主机 上的应用程序提供通信服务。与IP齐名的TCP(传输控制协议)和UDP(用户数据报协议)就工作在传输层上,SSL/TLS也工作在传输层上。顺便说一句,加密连接几乎都是依靠传输层的(不管是什么样的加密),加密过程也是在传输层上完成的。

5,会话层(session layer)
会话层在两个节点间建立、维护和释放面向用 户的连接,对进行会话的两台机器间建立对话控制,管理会话如管 理哪边发送、何时发送、占用多长时间等,保证会话数据可靠传送。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。

6,表示层(presentation layer)
表示层是处理所有与数据表示及传输有关的一层,为异种机 通信提供一种公共语言,为上层用户提供数据信息的语法表示变 换,屏蔽不同计算机在信息表示方面的差异,即用一种大家一致同 意的标准方法对数据编码。表示层协议一般不与特殊的协议栈关联,如QuickTime是Applet计算机的视频和音频的标准,MPEG是ISO的视频压缩与编码标准。常见的图形图像格式PCX、GIF、JPEG是不同的静态图像压缩和编码标准。

7,应用层(application layer)
OSI模型的最高层,应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。注意,应用层并非由计算机上运行的实际应用软件组成,而是由向应用程序提供访问网络资源的API(Application Program Interface,应用程序接口)组成。应用层协议有著名的HTTP(超文本传输协议,网页传输就靠他),FTP(文件传输协议,很方便下载),SMTP(简单邮件传输协议,邮件他负责)等。

有些人看到这里大概就会这么想:原来OSI模型这么层次分明啊,就像公司里的上下级或者说军队里的各级军官和士兵一样,下级要听上级的,下级更管不了上级,只要把上级搞定了,下级怎么努力都没用。

大错特错!

OSI模型其实不仅在物理上不存在(硬件),逻辑上也不存在(软件),这只是一个为了简化通信这个大问题而用层级把大问题分成一个个小问题然后分而治之的概念模型而已!

也就是说,实际上根本就没有所谓的上下层存在,更没有上下级这一说!

那么实际上是怎样一个场景呢?

一群拥有不同技能的人聚集在一起,他们相互之间都是好朋友。
有一天,他们接到了一个任务:将重要的数据从A地安全传到半个地球以外的B地。

"这问题太大了,怎么解决啊?"“(我)别急,一步步想,肯定有办法的。”

众物理介质(光缆,中继器等):“我可以在物理层面把A地和B地的终端连接起来。”“(我)这是第一步,但还远远不够呢!对了,你们人数众多,一个个叫名字太麻烦了,就把你们统称为物理层吧!”

MAC和LLC:“我可以在物理层工作的基础上建立数据链路,实现直接相连的两个设备间的通信”PPP:“我可以实现点对点的数据链路!”“(我)很好,诸位,你们一起工作吧,你们的工作室的名字就叫数据链路层!”

"(我)可是A和B之间隔了半个地球啊,这要是直接连接,信号早就衰减的根本就无法传输到目的地了,怎么办呢?"’“不要忘了我啊,我可以实现间接连接的任意两点之间的通信,寻找最佳路径以及处理可能的堵车问题的活就交给我吧!""(我)是你啊,IP!"”我可是很强大的,不过我没有办法保证一定能把数据送到目的地就是了,数据如果中途损坏出错丢失了,我可无能为力,而且我无法直接给应用程序提供通信服务。”“(我)那你也非常强大了,专门给你一个工作室吧,网络层工作室。”

”那么保证传输的可靠性的活就交给我吧!还有,让我来和那些应用程序打交道吧!““(我)你是?”“TCP!保证传输可靠性,我最在行了!我一定不会让任何一个数据报文(TCP数据单元)掉队的!”“我说TCP,你这点可是引起了相当多的视频爱好者的不满了,因为你,他们经常要为了一个马赛克多缓冲数秒钟,甚至有时路况(网络状况)不好,有一个数据报文没有送过来,然后你就不干了,后面那一大堆报文你都不肯接收,非要等着那一个送过来,真是可笑!”“我说UDP,那视频之类流媒体就交给你好了,你这个不可靠的家伙!”“(我)行了,两位别吵了,各有各的领域。你们的工作室,就叫传输层吧!”

“(我)还有两个终端之间的会话呢,谁来负责啊?”“我来吧,我还可以提供check point,要是一不小心断线了,也不用重新传输所有数据,我工作的地方叫会话层就行了!”“(我)OK!”

“(我)开始传输吧!等一下,A在说英文,B在说法文,根本就相互无法理解啊!怎么办呢?”“也就是说需要一个统一的标准,就让我们来吧,我们来提供一种大家都能听懂的公共语言!”“(我)啊,有好几位呢,文字的统一编码,视频的统一格式,图片的统一格式,你们一起吧,工作室叫表示层吧!”

“(我)差不多可以了吧?不行,还没有负责通过API最终把数据递给应用程序的人呢,还有最终的同步和通信伙伴(应用程序)的标识呢,不能把数据包送错了啊!”“我们可以帮这个忙!(异口同声)”我负责网页!“HTTP?”“下载和文件传输我最拿手!”“FTP?”“邮件就交给我处理吧!”“SMTP?”“(我)那好吧,你们待的工作室就叫应用层吧!”

“(我)这样就可以开始了!”“没错,大家一起,完成任务!我们各工作室一起处理好数据包,然后送出去!(异口同声)”"(我)谁也离不开谁啊。好像这其中没有上下级呢。"“哪里需要什么上下级?大家每个人各司其职,一起负责A与B的终端的交流,谁也不能缺席,大家都是平等的,没有说什么谁领导谁,谁管理谁,谁管不了谁的事!”

“(我)是啊(笑),你们这些家伙可比像我这样的人类要明白多了,本来就没有谁应该骑在或被骑在谁的头上啊。”

互联网设计时重点放在连接上,几乎没有考虑安全,现在的各种加密协议以及身份验证机制都是后来补充上去的。


“等等,还有一个问题呢:数据传输时是明文的!那么传输过程中早就被第三方给看光了!还有,你都没有办法确定对方的身份!”’“(你看看我,我看看你)我们都不行。”“我来吧!”“SSL?”“我可以同时解决加密与身份验证的问题。”“那你想要去哪个工作室呢?”“这就难说了,加密解密和身份验证过程是需要和具体的应用程序配合完成的,但加密连接建立过程需要TCP的帮助,你可以认为我在传输层之上应用层之下,也就是说我是个复合协议。”“你要和TCP协同工作?”“没错。我所处理的,就是TCP数据报文,我所传递的,就是TCP数据流。我可以保证,除了传递数据的两方,其他人都无法得知数据内容,而且没人能冒充其中任何一方。”

“那你凭什么做出这样的保证呢?”“说来话长了,一时半会儿也说不清楚,以后我会慢慢说明的。”

接下来的系列里我会详细说明HTTPS连接究竟是怎么回事儿的,顺便再介绍一下实际使用的TCP/IP架构(OSI模型过于复杂,而且各层之间的分工其实并不是很明确,实际运用中很多时候各层都是混合的,所以TCP/IP将好几个层都合一了)。奉劝有些一知半解的半小白一句:计算机网络里相当多的模型或者架构或者协议都没法随便去与真实生活类比,在胡思乱想之前还是好好找一些专业资料读读吧!