OSI七层协议模型和各自的功能

        都知道OSI有七层协议,那么为什么有七层协议,这七层协议都是干什么的呢?我觉得应该在此做一个总结,来系统和易懂地来讲解各个部分。

        首先,什么是协议?就像早晚班的交接,晚班的人A下班之后对接替他的人B说: “早上好!” B回应了A "早上好!" 这样两个人就知道我们要进行对话了。 之后A对B说,我的用户文档还没写完,代码的BUG我觉得错在哪里... B回答: “知道了,我接着写,写到哪里会通知你” 。A说“谢谢,那我先回家了,拜拜。”  B说“拜拜。” 通话结束。 对于局外人来说,他不能明白A在做的具体是什么东西,但是B轻而易举的就知道A在做什么,因为B和A已经商量好了他们在做的事情,B从A的话里面能够提取出自己想要的信息。从这个方面来看,这就是协议。 协议就是一组规则和约定,双方通过协议来完成自己想做的事情。计算机网络的协议就是网络中两个实体之间控制数据通信的规则和约定的集合。这下子应该能理解了。

        那么什么是实体?实体是系统中能够收发消息和处理消息的任何东西。这可不是电脑,路由器那么简单了,因为与其是实体,他们更应该被称为 系统, 因为他们具有很多的实体,可以运行多种协议。实体相对系统更加单一化,平面化。

        我们来看这个分层的协议模型:

OSI七层协议模型和各自的功能

        网络首先是分层的。道理很简单:网络太复杂,一个协议是根本不可能完成所有功能。我们可以想象为流水线:每个人分工不同,每个人也不知道旁边人在做什么,每个人就把自己的东西做好就行了,剩下的留给别人做,所有人做好了,汽车也就出来了。网络的模型也是这样。每一层的协议,对于其它层都是不了解的,唯一能做的,就是从自己的下层提取出数据,并且对于数据进行处理,处理完的数据再交给上层,直到最顶层。再做个比方,你用电脑QQ给朋友发消息:“你周末有空打球吗?” 之后收到了消息“我周末要调代码。” 我根本不会管我点击了发送之后电脑做什么,我只是在得到电脑反馈给我的消息“我周末要调代码” 这句话,进行我的处理,大脑明白了,“哦,没法去,去不成了”, 所以你可以把自己和朋友收发消息这一动作和大脑活动也当做电脑上层的另一个协议。

         协议是水平的,对等的实体之间用的是同一个协议。但是服务是垂直的,Layer1对上层的layer2进行服务,也就是Layer1把消息处理完后,把消息经过接口传送给layer2,Layer2来接着处理。对于上层(layer2),他要做的是隐藏下层细节和统一下层差异的作用。什么意思?就是说,Layer2不管Layer1干了什么,他也不知道Layer1是怎么处理数据的,Layer2就要那个处理完的数据,这就是隐藏下层细节,流水线上张三知道赵四是做什么的,可是张三知道赵四怎么做的吗?肯定是不知道的,这一可以用来类比。并且对于Layer2,不论Layer1怎么变,它提供给Layer3的肯定是Layer3能弄明白的语言,即使Layer1的语义变了,Layer2也得让Layer3弄懂。这就是统一差异。

        总结来看,实体的服务(上下关系)是通过协议(水平关系)来完成的,各层想要给上层提供服务,一定是要靠本层的协议来弄明白自己的数据,再把数据传送给上层,让上层对于数据进行处理。应该说明白了吧。

       那么再看看OSI的七层,从下到上分别为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。那么这七层都是什么作用呢?

       一. 物理层

      物理层规定了**、维持、关闭通信端点之间的电气特性,机械特性,功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。也就是说,物理层作为最低端的是,考虑的是如何通过物理介质从一段传输到另一端。举一个例子:一个天线把数据传输到另一个天线,这里面用到的知识有:调制解调,编码解码,信道的复用等等等等,这都是物理层应该考虑的问题,也就是说物理层把实际的二进制高低电平怎么从介质的一端传输到另一端。在这个过程中由于噪声的影响可能会出错,相应的就会有纠错检错等等。

        二. 数据链路层

        数据链路层定义了如何让格式化数据在单个链路上进行传输,以及如何控制对物理介质的访问,在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。通常还提供错误检测和纠正,以确保数据的可靠传输。

        我们举一个例子:多个主机通过线缆相连如下图所示,那么在传输的过程中有这么几个问题:第一主机1想传给主机2,它怎么去找主机B?这个就涉及到寻址。第二,主机1想找主机2,主机3想找主机4,那么能同时发送消息吗?显然不能,在一个介质上面同时只能有一个信息传输,这就是介质访问控制(MAC).还有主机1向主机2发送数据,我可以一下子全发送吗?不行,要考虑接收端的接受能力,这就是流量控制。总之这些都是数据链路层考虑的问题。

OSI七层协议模型和各自的功能

      三. 网络层

      网络层在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。还定义了路由实现的方式和学习的方式,此外,网络层还可以实现拥塞控制等功能。

      再举一个例子。北京的我,想去南京看同学,可是我身无分文,只能步行。那么我先从北京去了天津,天津下一步怎么走?我查了路标,知道下一步要去石家庄。好,我到了石家庄,再查路标,知道下一步是去济南。在济南查路标,下一站发现向南走就是南京。同样的道理,路由器对于数据包的路由,就是网络层最重要的功能。路由器本身不知道我到达最终目的地的路径,但是我知道达到目的地的下一步路径,于是把包传给了下一跳路径。这么跳啊跳,就把不同目的地的数据传递给了接收端。此外路由器怎么知道的下一条路径?是通过学习的,不断来学习下一跳的最优路径,比如距离矢量算法,链路状态算法等等,这些都稍微深入了。路由器(routing)听名字就知道是起到导向作用的,它还应该有把包分类的作用,不同包的优先级不一样,比如语音包要比文件包等级高,转发的时候就要先转发语音包等等,还应该有“呼叫准入”。

      四. 传输层

      传输层是第一个实现端到端数据传输的层。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。

      网络层是找到数据包从一个主机到另一个主机的“道路”,那还要传输层干什么?再举一个例子:我用电脑和小明微信聊天,同时也在用QQ和小明聊天,那么怎么区分数据是微信的还是QQ的?这就涉及到端端的传输,比主机高了一层。数据到达主机之后,建立多个socket和port,每个进程可能有一个或者多个port与之对应,达到主机的数据在分用给指定的进程,这就是传输层的重要功能。 此外,网络层提供的是“尽力而为”的服务,尽力而为,如果数据包太多实在是转发不过来就会产生丢包,拥塞,传输层还需要对于拥塞进行处理,以及有错误之后的检测重传,这里面最重要的就是有连接的TCP和无连接的UDP。

      五. 会话层

     通过传输层(端口号:传输端口与接收端口)建立数据传输的通路,主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。

     六. 表示层

     可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。

    第五第六层说实话我并不是很懂,所以查的是百度百科。

    七. 应用层

     应用层(Application Layer) 应用层为操作系统或网络应用程序提供访问网络服务的接口。

     应用层是真正我们能体会到的层了,他能够直接服务于我们所用的应用程序。比如说上网,用到http协议,文件下载用到ftp协议,视频的RTP,rtsp协议等。每种特定的应用往往会有一种或多种协议来对其服务,以满足QoS和人们对它的要求。

    用一个图总结的话:

OSI七层协议模型和各自的功能

        最直白来说,物理层是用于手机发送到基站,或者手机通过无线wifi接入网络中会用到。数据链路层用于两个路由器之间那一跳,网络层用于路由器组成的网络中那么多跳,找到从源到目的主机的路径,传输层用于两个主机之间特定端口的通信,应用层用于应用程序访问网络提供接口。用这个图来说,足够清晰了吧。