*#部分如果实在啃不动,可以跳过,先看后面的网络实战演练部分,等到有一定感觉了,再回头回来研究OSI七层模型。

关于网络的话题,详细探讨起来可以直接写成一本书,那本书就叫做《计算机网络》。

叫《计算机网络》的书籍一抓一大把,都有一个通病就是只讲理论,不说实操,并且还兼备砖家的通病~~不说人话。(所以我推荐CISCO的教程,因为有实操)

像讲解一个VLAN的概念,硬是给他安插个中文翻译“虚拟局域网”,如果不知道听起来还以为与虚拟化及SDN有什么关系。

(其实打开个packet tracer,拖拉拽一台二层交换机,3台PC,敲几条命令,配置个VLAN10,VLAN20,将端口1、3放入VLAN端口2放入VLAN20,然后PC1、2、3分别接入端口1,2、3。

PC1、3配置IP地址192.168.10.1/24,192.168.10.2/24,PC2配置IP地址192.168.20.1/24,然后PC1、3互ping能通,PC2与PC1、3互ping不通,你就知道原来VLAN是用来做网段隔离的。一两章篇幅的文字描述,还不如直接做个实验来的直接。)

因此,我们尽量以通俗的方式来对网络知识进行探讨,以及通过实际操作的方式来巩固概念。


OSI七层模型

无论哪一本《计算机网络》教材,研究网络,都绕不开OSI七层模型。

个人理解七个层次通俗来说主要实现以下内容:

ISO.jpg

**应用层:**就是应用软件使用的协议,如邮箱使用的POP3,SMTP、远程登录使用的Telnet、获取IP地址的DHCP、域名解析的DNS、网页浏览的http协议等;这部分协议主要是规定应用软件如何去进行通信的。


**表示层:**决定数据的展现(编码)形式,如同一部电影可以采样、量化、编码为RMVB、AVI,一张图片能够是JPEG、BMP、PNG等。


**会话层:**为两端通信实体建立连接(会话),中间有认证鉴权以及检查点记录(供会话意外中断的时候可以继续,类似断点续传)。


**传输层:**将一个数据/文件斩件分成很多小段,标记顺序以被对端接收后可以按顺序重组数据,另外标记该应用程序使用的端口号及提供QOS。(不同的应用程序使用不同计算机的端口号,同样的应用程序需要使用一样的端口号才能正常通信)


**网络层:**路由选路,选择本次通信使用的协议(http、ftp等),指定路由策略及访问控制策略。(IP地址在这一层)


**数据链路层:**根据端口与MAC地址,做分组(VLAN)隔离、端口安全、访问控制。(MAC地址在这一层)处理VLAN内的数据帧转发,跨VLAN间的访问,需要上升到网络层。


**物理层:**将数据最终编码为用0、1标识的比特流,然后传输。(例如将题主头像的图片,变为一串01100111100这样的数字来表示)。

-------------------------------------------------------------------------------------------------------------

类比两个人聊天的过程

如果上述的理论讲述还是有点太过学术,那我们尝试用两个人的聊天过程,来类比OSI七层模型。


**1、 应用层:**两个人有两张嘴(硬件),并且已经学懂了说话,可以用脑袋来组织好语言,来表达自己想表达的意思(相当于软件),并且能够通过脑袋产生的电流调动神经细胞,控制嘴巴肌肉张合,把话说出来。(非生物科班出身通信人想表达能够通过软件控制底层硬件工作的意思)。


**2、 表现层:**可以通过多种方式表现/表达同一个事情,例如:可以通过笑话、唱歌、念诗以及正常说话等多种表现形式表达,也可以是使用多种表达方式表达同一句话,例如关于iphone6的bigger than bigger的各种调侃。


**3、 会话层:**这层管认证与检查点,例如在街上碰到个很脸熟的老同学,你会先来一句:“你……是?韩寒吗?我是郭敬明啊,小学的时候全班最高那个啊”然后老同学会说:“哦,小郭?哗,真的十几年没有见过面了,呃……话说你这么多年来都没有长高过么?”然后经过“身份认证”,会话就建立起来了,否则你随便找个陌生人,通过不“认证”,就无法建立会话了。至于检查点,就像中间接了个电话,然后回来继续“嗯,刚才我们说到哪?”。


**4、 传输层:**在说一个很复杂的东西的时候,你无法很简单的把它说明白,所以你要将这个东西分段来说,例如先说二战的背景、过程、结果、总结,分开4个来说,通过将这个东西分段,能够提高效率、清晰地进行说明。

特别是当你不是按照顺序说,而是按照了例如背景(1)、结果(3)、过程(2)、总结(4)的顺序,听众需要用脑袋对其进行标记,并且按照标记重组1、2、3、4,才能更好地理解整个表达的意思。


**5、 网络层:**其实两个人当面聊天,这相当于点对点的通信了,两个人都在同一个子网内,根本不需要做路由选择的,用不到三层的通信。关键是协议的选择,我认为相当于语言,假设两个人都只有一种共同能够懂的语言,必须要使用这种语言两个人才能聊下去。这相当于要选用一样的协议进行封装来通信。否则就是牛头不对马嘴了。


**6、 数据链路层:**两个人面对面聊天,直接将内容讲给对方听即可,中间也没有一个交换机似的共享载体,除非改成三个人,其中一个是翻译,翻译需要将A的说话翻译完转述给B听,这就像交换机了。而另外关于ACL等安全与访问控制,粗略可以对应“什么可以讲,什么不可以讲,什么内容可以讲给哪个听众知道,不可以讲给哪个听众知道”的选择策略。


**7、 物理层:**最后就是最终将内容编码说出了。与表示层的用什么话表达不同,这个对应例如“你好”的“你”字,要用第二声了,“好”字用第三声;“单”字到底是读“dan”还是作姓氏的“shan”;“门槛”指的是门口的槛,还是一件事情的难点等的信息编码。最后经过编码后输出,表达话者想表达的意思。


为什么要研究OSI模型

其实一开始接触到OSI七层模型,我也是一脸懵逼,敲几个命令就能解决的东西,为什么一定要研究这个晦涩难懂的模型。


随着后面对网络的进一步学习,包括抓包、拆包进行分析,然后才发觉由于理论知识的缺乏,根本没有弄清楚一个包,从Client A到Client B的传输过程中,到底经历了怎样的过程。所以即使抓包抓到了,但是根本无从入手进行分析。

OSI模型就像武侠小说中的内功(九阳神功、九阴真经),而思科华为的模拟器敲命令就是外功(打狗棒法、独孤九剑),虽然单独学习外功,也能够在江湖上混,但是如果有深厚的内功功底,再学习乾坤大挪移、太极拳等功夫的时候,就能够很快上手、事半功倍。