基于TCP/IP模型库-ISO七层模型

链接
OSI参考模型OSI,是英文Open System Interconnect的缩写,中文翻译开放系统互联,一个抽象七层模型,但其核心思想一点也不抽象,非常具体,其核心思想:
1) 通信两端的主机能够理解对方的语言
这是要求主机使用相同协议格式来发送数据
2) 希望通信系统模块化,每个模块提供标准接口
每个模块给和直接耦合的模块提供标准化的流程接口,每个模块内部无论怎样实现没有硬性规定,但外在的接口一定是标准件,这样耦合的模块可以无缝对接起来。
这样做的好处有:(1) 由于使用标准接口,每个通信模块可以独立开发,增加自由度,提高生产效率(2) 增加代码的重复利用率,由于通信模块的标准化的外在接口,应用程序可以直接使用现成的通信模块,而无需重新编码,这大大减轻了开发者的负担,间接地提供了生产效率。
以上的种种好处对于初学者,如云里雾里。人类的学习有个特点,当遇到难以理解的抽象问题,总是希望在现实生活里找到可以类比的事物,咱们先来谈谈汽车产业的标准化。

最早美国的汽车生产商、如福特、通用,各自在自己的小作坊里生产,产量很低,轮胎尺寸也没有约束,自己生产多大的轮胎,就用多大的轮胎。
福特改进了汽车流水线,经过一个若干道工序,1)冲床压制框架外壳 2)车体倒转焊接 3)除毛边 4)装配大梁、防震、引擎 5)内部装潢 6)加装散热器、油压系统 7)安装轮胎
一辆小汽车就诞生了,随着产业规模越来越大,产业分工越来越精细化,有了汽车零部件供应商,比如轮胎,如果汽车生产商对轮胎尺寸规格大相径庭,那无疑会增加供应商的成本,而采用标准化的轮胎尺寸,供应商只需生产几种标准尺寸的就可以了,无论哪家汽车厂商都可以使用,规模经济成本自然会下降,所以标准化是双赢,以上就是汽车产业的标准化。

计算机网络遵循着同样标准化的演进之路,众所周知,最早的计算机网络是美国人搭起来的,名字是ARPA网,ARPA是英文Advanced Research Projects Agency的缩写,中文是美国国防部高级研究计划署,ARPA网使用了TCP/IP作为计算机网络互联协议,在基于BSD操作系统里实现了这些协议,TCP/IP的流行引起了业界的关注,于是以TCP/IP为框架模型,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合提出并制定了这个七层的OSI参考模型:
1)应用层 2)表示层 3)会话层 4)传输层 5)网络层 6)链路层 7)物理层
用户数据经过以上七道工序的流水线,一串0、1组成的二进制流诞生了,根据物理层是光纤、电缆、还是空气,二进制流转化为光信号、电信号、电磁波信号在物理介质(物理层)里传输,经过若干个中继交换机(链路层)的交换、经过若干个中继路由器(网络层)的转发,最终到达数据的终点。

111v2-854e3df8ea850c977c30cb1deb1f64db_720w.jpg

应用层协议,经过以上一跳一跳路由器的中继、终点主机的一层层协议头的剥离,源主机发给终点主机的数据终于到达终点了,至于数据是文字、图片、音频、视频,则由应用层协议来最终解释。
以上七道工序最终产生了二进制流,除了物理层之外,每道工序都会在原始数据前添加一串属于自己的协议头,每个协议头有源主机的每层工序产生,自然有理解这些协议头的对端,举例来说:
链路层协议头,这个协议头只有源主机、端接路由器可以理解,只会存活在源主机与其端接的中继路由器,换句话说,其生命周期只限于一根链路,只要端接路由器能顺利接收,其使命就算完成了,那路由器会将其从二进制流剥离掉,剩下打头阵的就是网络层的协议头。
网络层协议头,其中包含了目的地网络地址,用于指示沿途的路由器,这一串二进制流的目的地是哪里,路由器查询自己的网络地址表,决定再发给更靠近目的地的下一跳路由器。假如找到了一个出接口与下一跳路由器直连,则又要考虑如何添加链路层的协议头了,依据不同的接口类型,添加了适合此链路的链路层协议头,然后再依据物理层介质的不同,物理层将其以光、电、电磁波的信号发送出去。
依照上面类似的步骤,一串二进制流每经过沿途一跳路由器,变换一次链路特有的协议头,但网络层协议头一直不会变,最终这一串二进制流到达了终点。
至此,网络层协议头也完成了其使命,剥离掉网络层协议头,剥离掉之前,先读出网络层协议头的传输层协议代码,把这一串二进制流发给传输层,剩下打头阵的就是传输层的协议头。
传输层协议,依据传输层协议头里会话层协议代码,先剥离掉传输层协议头,把这一串二进制流发给会话层,剩下打头阵的就是会话层协议头。
会话层协议,依据会话层议头里表示层协议代码,先剥离掉会话层协议头,把这一串二进制流发给表示层,剩下的头阵的就是表示层协议头。
表示层协议,依据表示层议头里应用层协议代码,先剥离掉表示层协议头,把这一串二进制流发给应用层,剩下的头阵的就是应用层协议头。