zoukankan      html  css  js  c++  java
  • 电脑间数据通信-OSI协议简述版

    OSI简介

    OSI只是计算机网络中的一种协议名称缩写,它只是电脑间传输数据的协议,并不代表具体的物理设备,并且这种协议,只是被人为的划分为五层:物理层、数据链路层、网络层、传输层、应用层。记住,它只是协议,因此它被划分为五层后,那五层也都只是协议,并不是五层物理设备,爸爸决定了儿子。

    物理层

    再次强调,OSI只是协议,而物理层属于OSI,那么也就决定了物理层也只是一个协议而已,毕竟爸爸决定了儿子。也就是说物理层并不是你脑子里yy的电线、光缆巴拉巴拉的。

    那他是什么呢?他是基于电器特性发送高低电压,高电压可以对应1、低电压可以对应0。简而言之,物理层 = 物理层协议规定了 = 物理设备基于电气特性发送高低压电压,再次强调,物理层不等同于物理设备,事不过三,下次不强调了。

    数据链路层

    说到数据链路层,不得不搬出OSI协议的一个特点——OSI协议的五层是一层一层递进的,也就是上一层决定了下一层。既然物理层负责发送0和1,那么数据链路层对应的就会接收到物理层发来的0和1。现在假设数据链路层收到了100个0和1组成的一串字符,例如00111100……。我们说到,OSI协议是用来传送数据的,此刻你看到这一串0和1,内心一定100头草泥马飘过,但是你又没办法。

    所以,为了让你看得懂这串字符,数据链路层做了一个规定,这个规定就是对这串字符分组。分组的意义就是让这一串字符变得有意义,例如8个字符1组,10个字符一组,再通过编码学的知识,这些0和1就变得生龙活虎了,例如4个字符一组,我们可以把0000看成a,0001看成c,0010看成y,0011看成d……也就是说0001 0010 0011的编码结果就是cyd。

    但是每个电脑厂家都会生产自己的电脑,总不能你把8个字符看做一组、他把80个字符看做一组、我为了方便把无穷大个字符看做一组吧,那不就乱了套吗?因此就出现了一个以太网协议ethernet,记住了,他也只是一个协议,不过他好认领,因为他就是以太网协议。

    以太网协议规定了,全世界的所有电脑都必须用一组电信号也就是一个分组构成一个数据报,这个数据报叫做帧,每一帧分为报头head和数据data两个部分,head包含18个字节——源地址6个字节、目标地址6个字节、传输的数据类型6个字节;data包含最短46个字节最长1500个字节,就看你一次能逼逼多少啦,如果逼多了那就多分一组咯。这段数据为了讲解方便有时也可称为以太网头。

    现在会有人好奇源地址和目标地址到底是啥,其实很简单,就好比寄快递,这源地址和目标地址就是你家和她家。但在计算机眼中,就是mac地址,而mac地址就是你家电脑中网卡的地址,而这个网卡的地址又很特殊——在计算机出厂的时候,计算机的网卡上就烧了一个世界唯一的mac地址,这样妈妈再也不怕我串门了。

    有了mac地址,一个局域网内的电脑就可以通信了,我们简单讲讲局域网通信的原理。现在在一个小黑吧里,由于老板太抠,就买了一个交换机,没有开通网络到网吧外面。交换机干啥的呢?交换机就是把网吧所有的电脑连在一起,这些连在一起的电脑可以接收到对方电脑发出的消息。因此小黑吧里的电脑就可以互通,但是由于老板太抠,你在小黑吧里无法与外面的红灯酒绿的世界联系。可能你会好奇,为什么多了一个交换机我就能和小黑吧的其他电脑交流了呢?

    其实很简单,当你需要把你的数据发送给另外一台电脑的时候,吼一嗓子就行了。当然,不是让你真正吼一嗓子,那怕是网管直接揍你一顿,然后让你卷铺盖滚。当你需要发送数据的时候,你只需要通过电脑的发送按钮,此时此刻,电脑便会自动帮你把你的数据通过数据链路层打包成另外一段数据,也就是以太网协议规定的那些内容。可能有人好奇,我怎么知道我要把我的数据发送给谁,如果他把我珍藏已久的美国大片妇联2发给其他人了怎么办,其实很简单,但我不想深入,因为你可能听不懂,你只需要知道https://www.cnblogs.com/nickchen121/其实就相当于mac地址,不严谨但很容易理解,想深入了解为什么url网址等同于mac地址的同学,可以去了解ARP协议。电脑把你的数据打包之后,会通过物理层转化为0和1然后发送给交换机。前面说到,交换机把所有电脑连在一起了,此时交换机收到你的消息,他会吼一嗓子——来消息了,只要是连在这台交换机上的电脑,都会收到消息然后拆开看看,如果目标地址和自己的mac地址吻合,那么吻合的电脑就会能把这个数据拆开,而不吻合的就会把这个数据丢掉。可能有人又yy了,我收到消息,我强行拆开不行吗?我就想说一句,都说了是协议了,你不按照协议做事,你能用这个协议吗?

    会有聪明的同学想到,如果我们让全世界的电脑连在一台交换机上,这样我就不能直接和特朗普聊天了吗?你太聪明了,但是如果全世界上百亿台电脑连在一起,可能等特朗普收到你的消息的时候,拆开一看,有人给我发消息了,那时候可能你就不在人世间了。

    网络层

    为了回答数据链路层遗留的一个问题,局域网只能保证我在小黑吧里和小伙伴们愉快的玩耍,但不能让我发消息给特朗普,而网络层却很好的解决了这个问题。

    为了解决世界网络通信的问题,网络层应运而生,让一个局域网可以和另外一个局域网可以通信,并且因此定义了一个IP协议,这个ip协议都规定了啥呢,说出来你可能不信,ip协议除了和以太网协议名字不同,内容形式基本一模一样。

    上面说到小黑吧的例子,在这里进行深入拓展,现在小黑吧的老板靠你们这群韭菜狠赚了一笔,他就去电信公司开通了网络,这个网络是干嘛的呢?就是为了让你和特朗普聊天的。具体是怎么样的呢?其实很简单,就是当小黑吧老板在电信公司开通网络的时候,电信公司会给小黑吧一个ip地址,记住这个ip地址是属于小黑吧的,前面说过爸爸决定儿子,小黑吧的电脑属于小黑吧,因此小黑吧的电脑上也会拥有这个ip地址,也就是说mac地址是每台电脑各一个,然而ip地址可能多台电脑共一个。

    有了ip地址,那么如何去和特朗普聊天呢?毫无疑问,你想和特朗普聊天,一定也拥有特朗普的ip地址,重新说一遍,https://www.cnblogs.com/nickchen121/其实就相当于ip地址和mac地址,虽然有问题,但很容易理解,此处网址可随时替换,欢迎付钱改成你的网址帮你打广告。

    现在你有了自己的ip地址,又有了特朗普的ip地址,聪明的同学一定想到了以太网协议,对的,ip协议规定了,如果你想发消息给局域网之外的电脑,你必须得按照这种形式发送数据——自己的ip地址+对方的ip地址+数据,这种形式的数据为了下面讲解的方便暂时叫做ip头。

    现在你想好了给特朗普发送的数据,你就写了一段话发给了特朗普。我们来详解下这个世界通信的这个过程,其实能看到这,下面就特简单了。你写了一段话,点击了发送,此时你的电脑会把你的ip地址+老特的ip地址+你写的话通过ip协议+网络层协议打包成ip头,然后这个ip头会通过数据链路层协议打包成一帧数据,记住,上述过程都是你的电脑帮你完成的。现在你的电脑把这一帧数据通过物理层转换为0和1发送出去了,由于你是发给特朗普的,就不经过交换机了,就通过电信公司开始往外发了,这个发的过程和交换机同理,当你把数据发给电信公司时,电信公司会帮你吼一嗓子,在电信公司旗下的所有拥有ip网的用户都会收到你的消息,虽然有问题,但利于理解,当然了,特朗普一定是没有购买中国电信公司的ip网的,因此聪明的你一定会想到国家与国家层面一定还会有一层数据发送的协议,如果国家层面封死了这种协议,你也就无法和国外通信了,就是这样。当然,这里我们假设特朗普购买了电信公司的ip网络,因此我、他、她和特朗普都收到了你发送的消息,但是我、他、她的ip网址和你发送的ip网址对应不上,因此我们就把你发的数据丢掉了,但是特朗普发现你的数据的目标ip网址就是他的,他就会拆开ip头,然后又一次惊喜的发现你的数据的mac地址是他的电脑的mac地址,他就会收到你的消息了,当然特朗普同事如果和他在同一个ip地址的网络下,也能拆开ip头,但是会因为mac地址不对,还是会把这个数据丢掉。

    此时此刻,你就能全球互联了,但是还有没有结束,没有。

    传输层

    当你使用的电脑的时候,你总不能只想着发消息给特朗普吧!一定还想着通过xx游戏平台玩玩斗地主,时不时打开xx视频网看个小电影,此处暂留广告位。那么问题来了,例如我和我朋友三个人通过电脑玩斗地主,现在我一上来就出了一个王炸,并且这个数据发送给了我两个朋友的电脑,他们的电脑接收到了这串数据后,马上就就炸毛了,王炸什么鬼?这串数据我该发给xx游戏平台,还是发给xx视频网。

    为了解决上面这个问题,传输层应运而生,传输层的作用很简单,就是规定了每台电脑都会有很多端口,例如一台电脑20000个端口,这些端口干啥用的呢?很简单,就是每一个端口对应一个应用程序,例如xx游戏平台对应1、xx视频网对应2。

    有了这个端口,终于可以开心的和我朋友玩斗地主了,当然,此时我发送给我朋友电脑的数据不仅有ip头、以太网头、还会有端口,ip头确定了我朋友的ip地址也就是在哪里、以太网头确定了我朋友电脑的mac地址、端口确定了我朋友电脑上的哪个程序,因此我们可以得出一个结论——ip头+以太网头+端口 = 全世界独一无二的电脑上的独一无二的某个应用程序。

    你以为传输层就这么简单吗?没有如果详解还会有tcp和udp两种应用程序间传输数据的协议,但是过于复杂,不详解,其实只要记住tcp稳定、udp不稳定即可。还是略解下,前面说到tcp和udp是两种传输数据的协议,其实简单点说就是啥呢?就是udp就是规定了电脑a发数据给电脑b后,就不负责电脑b有没有收到数据,反正发完了就绝交;tcp就是规定了电脑a发数据给电脑b后,还得让电脑b发一条消息给电脑a告诉它我已经收到了你发送的数据,有问题,但方便理解,总不能说3次握手4次挥手让你看不懂吧?

    应用层

    其实到这真的结束了,应用层很简单了,无非就是规定了不同类型应用程序之间的数据组织格式。简单点说无非就是相同的内容不同应用程序规定了不同的写法罢了。

    总结

    网络通信不严谨且易懂的讲无非就是这些,但你要记住,并不严谨,一门深奥的学科能这样讲解出来,一定是漏洞百出的,而且只供消遣,真想学些什么东西,零碎化就能学的那应该都不是什么好东西。

  • 相关阅读:
    主要工业以太网性能横向比较
    聊一聊工业以太网
    FPGA学习之RoadMap
    我眼中的FPGA
    板级通信总线之SPI及其Verilog实现
    ALTERA FPGA中实现低于时钟周期的端口延时
    Javascript 闭包浅析(一)
    node.js docker centos7 下环境构建命令
    ruby sass 命令
    如何配置nginx的反向代理nodes 3000端口项目
  • 原文地址:https://www.cnblogs.com/nickchen121/p/14489753.html
Copyright © 2011-2022 走看看