人人都必需懂的OSI参考模型,到底是什么玩意儿

在很久很久以前,企业级通讯设备的协议是不互通的。HP,IBM等厂商都根据自己的协议生产了不同的软硬件。这样做也是因为数据通讯的保密性,但是这样做有一个弊端,就是不同品牌的设备之间相互通讯非常困难。
  
  举个例子,以前的中国,阎锡山为了做山西土皇帝,山高皇帝远,在自己势力范围内建造窄轨铁路,蒋介石国军的火车无法进入山西境内,无法便利调动军队、物资,实现一人独大的军阀割据格局。以互联网的眼光看,如果标准轨道铁路网是一个互联网,那阎锡山的窄轨铁路就是一个自我封闭的局域网,为了打破这种非标准化的私有标准,需要制定一个大家都遵守的国际标准。
  
  为了解决“各自为战”的局面,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT),发起了国际通讯协议标准。初衷是为了让各大厂商之间的设备遵循这个规定,生产出的设备可以畅通无阻地互相通信。
  
  这个统一的协议称之为:OSI参考模型
  
  OSI参考模型分为七层

  
  每一层都有他的目的和作用,下面我们逐一介绍一下。
  
  应用层

  
  这里说的是提供应用程序进程的网络接口。首先要理解接口的定义。这里的接口不是指路由器交换机这种设备的物理接口,而是指逻辑上的。举个例子,如果你使用浏览器,浏览器上会有标签页,刷新,收藏等按钮。如果你想打开一个新标签页,就可以点击加号。

  
  这种叫UI(User Interface)用户接口。意思是用户和机器交互的接口。
  
  如果我想要做某个操作,我需要电脑能够给我提供操作的空间,例如我想打开新的标签页,我就需要浏览器这个程序上有个加号。
  
  同样的,我的应用程序想要通过网络传输一些数据,也是需要类似的“接口”的。这个接口由应用层提供。典型的例如HTTP就是应用层协议。它可以让网页的内容在服务器和客户端之间传输。
  
  表示层

  
  这里表示层的主要作用是协商数据传输时使用的编码。我们还是拿HTTP这种常用的协议来举例子。在浏览网页时,我们可以查看网页上的各种信息,像图片,文字,视频等。
  
  那么在传输时,浏览器是如何知道图片以及文字的表达形式呢,传过来的那么多信息,程序是如何知道传的是图片还是文字还是视频呢?
  
  这就依靠我们表示层给出的信息来识别。我们一起来看一下网页的源代码。

  
  这边可以在第五行看到这样一段代码:charset=utf-8
  
  简单介绍一下UTF-8
  
  这是一种字符的编码方式,它支持英文,简中,繁重,日文韩文等不同国家的语言,使他们能够正常在网页中显示,这都是表示层的功劳。
  
  会话层

  
  会话层的作用很简单,在程序间建立,管理和结束会话。何为会话呢?我打开QQ和朋友聊天这是一种会话,聊天的同时我还在使用浏览器看视频,这是另一种会话。
  
  这两种会话的流量都是通过网络传输过来的,那么如何保证聊天的流量不会发送给浏览器,视频的流量又不会发给QQ呢?这一般是操作系统层面去实现的事情。
  
  每个应用程序都有属于自己的PID(进程号)这些号码在系统中是唯一的,所以系统根据进程号来区分不同的会话。
  
  传输层

  
  主要是提供端到端的通信,可靠的传输以及流控。上面的三层我们一般也统称应用层。因为都是应用程序或者操作系统帮我们完成的,跟网络没有什么太大的关系。而传输层起到一个承上启下的作用。
  
  网络层
  

  网络层主要的作用是路由数据包,选择一条最佳的路径以及提供逻辑地址去选路。典型的像IP地址就是一种逻辑地址,是人为规定的,可以随意更改。
  
  数据链路层

  
  这里不太好理解给出的定义是接入媒体,可以把这里的Media理解为硬件,接入硬件,需要提供一个接入硬件的方式。
  
  例如在以太网中,数据链路层使用MAC地址,而MAC地址是每个以太网设备在被制造出来时都会有的一个硬件地址,这便是接入硬件的意义。因为最终数据还是要发送到设备上的某个接口的,光靠三层的逻辑地址是不够的。
 
  物理层
  
  这里物理层主要是定义电器特性,比方说线速,电压等等物理特性。
  
  以上就是OSI参考模型
  
  总的来说它将网络通信这个复杂的过程通过分层给模块化了,每一层都有自己的任务,就像寄快递一样。

  
  总结

  
  先将要寄的东西打包,这是应用层的数据。那么现在到了传输层,主要是提供一种传输方式。类似我们在寄快递的时候选择空运或者陆运。空运比较贵嘛,但是快,陆运便宜但是慢。这边只是一个比喻,实际肯定没有这么简单。
  
  传输层主要会使用TCP和UDP两种协议。那么在选择完了传输方式后,就需要填写发件人(源地址)和收件人(目标地址)了。填写完毕以后交给快递公司,他们会把快递由一个转运中心发往另一个转运中心,并不是直接从源发往目标。这里的转运中心其实就到二层了。
  
  在传输过程中,像以太网中的MAC地址,是会不停变化的,就像一个快递由上海发往武汉,会先到上海的某个集散中心,然后发往武汉,然后又在武汉的集散中心转几圈,最后发往离目标最近的快递点,然后才开始配送,最终送到收件人手上。


  
  本文作者:Lee Xu
  
  HCIE-R&S、CCIE-R&S
  
  擅长路由交换、安全、无线等技术
  
  湖北省职业院校计算机网络赛项获奖指导老师
  
  主要技术方向Cisco和Huawei
  
  讲授课程:HCIE、CCNA、CCNP、HCNA、HCNP等

原文地址:http://blog.51cto.com/13946595/2167293

时间: 2024-08-29 03:26:05

人人都必需懂的OSI参考模型,到底是什么玩意儿的相关文章

人人都该懂点儿TCP(转)

作者:Julia Evans 译者:赖信涛原文链接:Why you should understand (a little) about TCP 译文链接:http://geek.csdn.net/news/detail/44474 即使你的工作也许不需要对TCP了如指掌,也不需要去了解具体的TCP/IP实例.你也应该懂一些基本的TCP知识,本文会告诉你为什么. 我以前在Recurse Center工作的时候,曾经用Python写过一个TCP栈(还写了一篇博文用Python实现TCP栈可以学到什

人人都该懂点儿TCP---ACK延缓(转)

作者:Julia Evans 译者:赖信涛原文链接:Why you should understand (a little) about TCP 译文链接:http://geek.csdn.net/news/detail/44474 即使你的工作也许不需要对TCP了如指掌,也不需要去了解具体的TCP/IP实例.你也应该懂一些基本的TCP知识,本文会告诉你为什么. 我以前在Recurse Center工作的时候,曾经用Python写过一个TCP栈(还写了一篇博文用Python实现TCP栈可以学到什

人人都能懂的原型对象

提到JS中的对象,我们就不得不提JS对象中的原型.我们知道,JS是可以面向对象编程的语言,通常在面向对象中,继承关系都是通过类来实现的.但是,请记住,在JS中,并没有类的概念.在JS的设计之初就没有类,那么在JS中,继承是通过什么来实现的呢?答案就是原型. 每一个构造函数都有一个与之相关联的对象,该对象称之为原型对象.每个实例对象都能共享其原型对象上的属性和方法.原型对象的作用主要用来实现属性的继承,让实例对象能共享原型对象的属性,减少内存分配.所以,在上一节中,我们想在每个Person对象中共

人人都应该懂点密码学

你可以从别人那里汲取某些思想,但必须用你自己的方式加以思考,在你的模子里铸成你思想的砂型.--兰姆 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues. https://github.com/midou-tech/articles 点关注,不迷路!!! ?上次say&see了密码学的DES算法,接下来就有人私信说是一开始就直接讲算法有点难理解,想让我给打打底,这么说当然没问题,那以后我们就每周一篇,从最基础的东西讲起,下面我还会附上一张基础的知识框架图,感兴趣的盆友来看一看,

密歇根大学 - 人人都懂的编程课(Python)

人人都懂的编程课(Python) Week03 Exercise Rewrite your pay program using try and except so that your program handles non-numeric input gracefully. Enter Hours: 20 Enter Rate: nine Error, please enter numeric input

从程序员到项目经理(4):程序员加油站 -- 不是人人都懂的学习要点

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

从程序员到项目经理之程序员加油站 -- 不是人人都懂的学习要点(转发)

学习是一种基础性的能力.然而,“吾生也有涯,而知也无涯.”,如果学习不注意方法,则会“以有涯随无涯,殆矣”. 一.学习也是一种能力 看到这个标题,有人会说:“学习,谁不会?”的确,学习就像吃饭睡觉一样,是人的一种本能,人人都有学习的能力.我们在刚出生的时候,什么也不知道,是一张真正的白纸,我们靠学习的本能,学会了走路.说话.穿衣服…后来,我们上学了,老师把书本上的知识一点一点灌输到我们的脑子里,我们掌握的知识越来越多,与此同时,我们学习能力却好像越来越差了,习惯了被别人喂饱,似乎忘记了怎么来喂自

人人都看得懂的正则表达式

正则表达式可以帮助我们更好的描述复杂的文本格式.一旦你描述清楚了这些格式,那你就可以利用它们对文本数据进行检索.替换.提取和修改操作. 下面有一个正则表达式的简单例子.第一步先要引入有关正则式的命名空间: using System.Text.RegularExpressions; 第二步就是用指定的正则式构建一个正则表达式对象,下面的正则式是用来搜索长度为10的a-z的英文字母: Regex obj = new Regex("[a-z]{10}"); 最后,根据正则式在指定数据中检索匹

【转】测试,人人都是产品经理之测试产品的选择和创造

  序言:明天新的一年的的工作开始了,在晚上写这篇文章,也算是对自己一年工作的一个简单的总结以及对今年所想做的事情作为一个开端吧.这次回家,疯狂了一把,不管测试.不管自动化.也不管技术,只知道与朋友们欢畅,踏上回来的途中,却反射性的重新拿起了书.每个人也许想知道自己的价值在哪,无论在哪,我觉得每个人都是自己的产品经理,而定位自己的需求,寻找产品的价值都是一件很难的事情,首先知道自己要什么,再知道自己可以设计出来?最后还要经过反复的实践和测试,才能诞生出一个让自己感到稍微满意的产品,因为这些文章,