简介

说到OSI参考模型,理解网络与网络之间的关系,不说太深入难以理解的东西,只求能最大程度上理解与使用。

参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。

概念性的东西,先知道这些就够了,我们先来聊一聊一个常见的一个模型。

局域网与互联网

互联网就是许许多多个局域网组成的,从我们最简单的一个局域网入手,开始理解

这里举例两个不同的局域网,计算机用网线接入交换机、交换机连接网关路由器,另一处

也是通过相同的方式进行连接。先来了解一下OSI参考模型是如何定义这七层的

OSI 参考模型

参考:https://blog.csdn.net/taotongning/article/details/81352985

这里定义的七层只是为了方便我们去理解,实际上是不存在的。

简单的了解一下这七层是如何定义的,具体的功能还是得举例子来理解说明。

从最上层的应用层开始说起:如何一步步的封装数据,到最后进行发送。

应用层

应用层是直接面向用户的最高层,但它却不是应用程序,它只是为引用程序提供服务的

就好比,我们用的电脑版微信吧!它就是一个实实在在的应用程序,假设要与一个远方的小姐姐进行聊天会话,这个时候呢,发送一个Hello给远方的小姐姐。

当你点击发送的时候,其实做了很多事情,我们就来梳理一下。

需要发送的数据就是:Hello ,当然,应用层首先给这个数据拼接一个AH,这里就是应用层的报头,就好比是微信的一个特有的数据,就这样先理解。

表示层

当然,我们总不能发送明文吧,将发送的文本数据进行编码,平常我们计算机使用的万国码UTF-8,肯定要进行一下加密吧

表示层更关心的是所传送数据的语法和语义,主要包括数据格式变化、数据加密与解密、数据压缩与解压等

会话层

字面意思,就可以理解出这一层表示的意思,建立一个会话,就好比使用Http访问web的时候,都会存在一个Session 作为标识

让服务器来区别访问的计算机。主要功能是负责维护两个节点之间的传输联接,确保点到点传输不中断,以及管理数据交换等功能。

会话层在应用进程中建立、管理和终止会话。会话层还可以通过对话控制来决定使用何种通信方式,全双工通信或半双工通信。会话层通过自身协议对请求与应答进行协调

传输层 端到端

传输层作为OSI参考模型中,最重要的一层,这里主要是以端口到端口来区分。这里涉及到两个特别重要的协议TCP 以及UDP

一太计算机上同时运行着QQ、微信、以及浏览器等。发送数据报,这个数据包到底是哪个程序发出去的呢?当然要从指定的一个端口发出去

计算机的端口范围 0-65535

0-1023 就是1024个端口为系统占用端口

了解到这些,就该先来说说UDP协议

UDP 协议

UDP协议定义了端口,同一个主机上的每个应用程序都需要指定唯一的端口号,并且规定网络中传输的数据包必须加上端口信息,当数据包到达主机以后,就可以根据端口号找到对应的应用程序了。UDP协议比较简单,实现容易,但它没有确认机制,数据包一旦发出,无法知道对方是否收到,因此可靠性较差,为了解决这个问题,提高网络可靠性,TCP协议就诞生了。

参考:https://blog.51cto.com/lyhbwwk/2162568

一个UDP报文包含首部与数据部分,UDP首部占用8个字节,数据部分最长长度为65535B(字节) 即 64KB

UDP协议是无连接,不保证稳定传输的协议,但处理速度较快,通常的音频、视频在传送时候使用UDP较多。

我们这里的例子是微信,微信能保证数据百分百到达,所以我们采用TCP来具体说明数据的封装

TCP 协议

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。为了保证传输的可靠性,TCP协议在UDP基础之上建立了三次对话的确认机制,即在正式收发数据前,必须和对方建立可靠的连接。TCP数据包和UDP一样,都是由首部和数据两部分组成,唯一不同的是,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割

参考:https://blog.51cto.com/lyhbwwk/2162568

这里只需要了解的是TCP的基本封装过程,这里只涉及到源端口以及目的端口,还未涉及到IP相关的内容。它和UDP协议一样。就好像是一个改进版的

UDP协议,它能保证数据的可靠传输,这个特点记住即可。这里模拟一下,我们数据的封装过程。假设微信使用的端口是6666,目标端口就是远方小姐姐微信

的端口,当然也是一样的。这里我为了理解只做简写

网络层

从上面几层来看,我们已经将微信的数据封装成来一个TCP数据报,里面包含来微信的端口 假设是6666,当然,就好比写信一样,我的信封

已经准备好勒,里面要发送的内容我也已经准备好了,接下来就是地址了。肯定要指定这个报文我要发送到哪里去。所以呢IP 网际协议,就诞生了。

IP 网际协议

网络层引入了IP协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的IP地址。IP协议将这个32位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。如果两个IP地址在同一个子网内,则网络地址一定相同。为了判断IP地址中的网络地址,IP协议还引入了子网掩码,IP地址和子网掩码通过按位与运算后就可以得到网络地址

IP地址在这里我们就比较好理解了。我们平时的生活中都会涉及到。一个IP指向的就是互联网当中的一台机器或者就是一台路由器了。

我们来封装数据。再把上面的图拿下来,说明一下,我们要给E电脑的小姐姐发送消息。比如我是A电脑,小姐姐在另外一个网关下的E电脑

比较重要的两个参数:

源地址:192.168.0.120

目标地址:192.168.1.135

进行封装后的数据,这里将源地址,告诉路由器(邮局) 发件人 就是源地址,以及收件人 也就是目标地址

ARP 协议

这里暂时不细说这个ARP协议的内容。我们只需要知道 ARP协议是用来拿IP换MAC地址的,上面的IP协议也已经提过了,通过子网掩码和IP地址的换算,可以得到

网络号,网络号就可以区别这两个IP是否在同一个局域网内。 参考这个秒懂:https://zhidao.baidu.com/question/277650423.html

数据链路层

到这一层,就已经到网卡、网络设备(交换机)的范畴了。数据链路层最重要的协议是以太网协议,数据链路层最重要的一点就是数据成帧。

以太网协议

接入以太网的设备必须包含一块以太网网卡,也就是我们常用的网卡,一组电信号称作是一个数据帧 、或者叫做一个数据包

网卡都包含一个全球唯一的MAC地址,发送端的和接收端的地址便是指网卡的地址,即Mac地址。

每块网卡出厂时都被烧录上一个实际上唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示,(前六位是厂商编码,后六位是流水线号)

进行数据链路层的封装,将本机的MAC(源MAC地址) 和目标MAC地址封装在头部,在尾部加入DT报尾,这样 一个数据帧算是封装完成了!

等等。我们好像还不知道小姐姐那边的目标MAC地址,这时候就需要用ARP协议了。我们知道ARP协议就是用来用IP来换MAC地址的。

ARP协议

上面已经简单的了解过了,我们要和在B局域网下的E电脑进行通信,但是我们不知道它的MAC地址,于是我们发送一个ARP请求,来获取目标的MAC地址

目标MAC 为FF:FF:FF:FF:FF:FF 表示的是广播地址,这个数据包发出去后,所有的子网机器都会收到,收到的机器判断目标MAC是否是自己,若不是,则直接丢弃

若是,收到报文的主机会通过单播的形式,将MAC地址回传给我们。

通过路由协议我们可以得知,若不在一个一个子网内,则会交给路由器

路由器返回的包里面,目标MAC就会变成路由器的MAC地址,我们拿路由器的MAC地址组装数据链路层报文即可。

物理层

经过以上的每一层的层层包装,这时候,我们已经包装好了一个以太网数据帧,包含源MAC,目标MAC,源IP,目标IP等等一系列数据。

物理层就是将这个数据通过电信号、光信号的方式传递过去的,物理层一般都是我么所说的光缆以及网线这些硬件设备。

不同子网间的通信

通过上面的知识,我们已经了解到如何封装成一个数据帧,以及一些协议的相关内容。那么这里就会有一个问题,同一子网、

不同子网、以及相隔很远的两个子网是如何进行通信的呢?以及我们拨号上网后,公网IP与内网IP是怎么一回事呢?

同一子网通信

我们先来看一个图,计算机A要与计算机B进行通信,这时候他们是同处于一个子网内的,这个时候就很简单了。

按照上面的七层进行封装数据,这里的具体参数需要说明一下:

源IP: 0.120(简写)

目标IP:0.113

源MAC : A电脑的MAC

目标MAC:B电脑MAC(这里若不知道就先发送ARP请求)

A将数据报发送出去后,交换机直接查询目标MAC所转发的端口,将这个数据报准确的推送到B电脑连接的那个端口即可。

不同子网通信

A电脑需要与E电脑进行通信,这时候发现A与E不在一个子网内,这时候呢,就需要路由器来协助了

源IP: A的IP

目标IP: E的IP

源MAC:A的 MAC

目标MAC: 路由器C的MAC

因为不在一个子网内,需要路由器来进行路由这个数据包,送至D路由器后,D路由器拿出数据报中目标的IP,发送ARP请求,

请求E的MAC地址,知道后,将数据报里面的目标MAC进行替换,然后发送给E即可。

公网IP与内网IP通信的方式理解

我们在使用路由器上网后,运营商就会给我们分配一个公网IP,按照图上的指示,C路由器在进行拨号后,就会给C路由器分配一个公网IP

我这里假设有这样两个。这时候需要封装数据,该如何封装呢,还是以A电脑与E电脑进行通信,大家肯定会很迷惑。

这里就需要了解一个协议:网路地址转换协议https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2

以下简称NAT,NAT 在IPV4 之前起到很大的作用,我们现在也在用,因为IPV4 IP数量的限制,但接入互联网的电脑又那么多

该怎么办呢。就是给一个路由下分配一个公网IP,路由器下面的IP与公网IP进行一个转换,这里面说的转换就是:NAT

图中黑色的就是转换部分,通过端口的转换,将多个子网IP映射到公网的一个IP上面

网络地址端口转换(NAPT)

这种方式支持端口的映射,并允许多台主机共享一个公网IP地址。
支持端口转换的NAT又可以分为两类:源地址转换和目的地址转换。前一种情形下发起连接的计算机的IP地址将会被重写,使得内网主机发出的数据包能够到达外网主机。后一种情况下被连接计算机的IP地址将被重写,使得外网主机发出的数据包能够到达内网主机。实际上,以上两种方式通常会一起被使用以支持双向通信。
还是举例,这时候,我们的A电脑需要与E电脑进行通信,E电脑在广东省,他们拨号后,都会分配一个公网IP,并且已经在路由器里面完成了NAT映射,
源IP: A电脑IP
目标IP: E电脑映射后的公网IP
源MAC :A电脑MAC
目标MAC :  本地路由器MAC地址
 
封装完成后,将数据报送到C路由器,路由器通过映射表,将源IP进行一个替换

替换后,交给互联网上的路由器进行数据报的转发,这就好像发快递时候一样,经过一系列的中转站,到达目的路由。

到达D路由后,D路由将数据报中的目标地址也进行一个转换,这个地址是可以相互转的。现在就是公网映射转到本机IP

转换后就轻松了。按照ARP请求到E机器的MAC地址,然后发报即可。

小结

以上内容皆是自己查看一些博主的总结,通过学习后,能够加深自己对OIS模型、以及TCP、IP、ARP

这些非常重要的协议的一个认识。以及了解到不同层级下面。两台电脑如何完成一个通行。这里讲的比较浅,

互联网的奥妙不是那么容易就可以理解透的。还是那句,不要停止学习的脚步。就好

参考:

就该这样理解 OSI 七层参考模型、浅谈不同局域网之间的通信的更多相关文章

  1. 通信原理之OSI七层参考模型(一)

    1.什么是计算机网络 谈计算机通信原理当然离不开计算机网络,那么什么是计算机网络.官方定义:计算机网络是由两台或两台以上的计算机通过网络设备连接起来所组成的一个系统,在这个系统中计算机与计算机之间可以 ...

  2. 牛客网Java刷题知识点之OSI七层参考模型 和 TCP/IP五层参考模型

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  3. TCP/IP模型及OSI七层参考模型各层的功能和主要协议

    注:网络体系结构是分层的体系结构,学术派标准OSI参考模型有七层,而工业标准TCP/IP模型有四层.后者成为了事实上的标准,在介绍时通常分为5层来叙述但应注意TCP/IP模型实际上只有四层. 1.TC ...

  4. 网络模型一般是指 OSI 七层参考模型和 TCP/IP 五层参考模型。

    网络模型一般是指 OSI 七层参考模型和 TCP/IP 五层参考模型. 每一层实现各自的功能和协议,并且都为上一层提供业务功能.为了提供这 种业务功能,下一层将上一层中的数据并入到本层的数据域中,然后 ...

  5. OSI七层参考模型每一层都有哪些协议

    OSI七层参考模型每一层都有哪些协议 第七层应用层 协议:DHCP • DNS • FTP • Gopher • HTTP • IMAP4 • IRC • NNTP • XMPP • POP3 • S ...

  6. OSI 七层参考模型与 TCP/IP 四层协议

    OSI 七层参考模型 OSI (Open System Interconnect,开放系统互连参考模型)是由 ISO(国际标准化组织)定义的,它是个灵活的.稳健的和可互操作的模型,并不是协议,常用来分 ...

  7. OSI七层参考模型

    一.OSI七层模型简述 二.每层的作用 三.数据封装的过程 四.数据解封的过程

  8. 浅谈对【OSI七层协议】的理解

    我们每天都在上网冲浪,在这背后到底有那些设备.协议去支撑呢?ISO是[Open System Interconnection]的缩写,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本 ...

  9. OSI七层模型详解 TCP/IP协议

      总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...

随机推荐

  1. 百万年薪python之路 -- 字典(dict)

    1.字典(dict)-- dict关键字 字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. ​ 字典中逗号分隔叫作一个元素 ​ 字典是无序的 ​ key必须是不可变 ...

  2. 二叉树的查找(前序、中序、后序、层序遍历)--biaobiao88

    建立一棵含有n个结点的二叉树,采用二叉链表存储: 输出前序.中序.后序..层序遍历该二叉树的遍历结果. 定义二叉树的数据类型——二叉树结点结构体BiNode.建立二叉链表可以采用扩展二叉树的一个遍历序 ...

  3. WordCount的实现和测试

    WordCount 一.开头 (1)合作者:201631107110,201631083416 (2)代码地址:https://gitee.com/zhaoxiaoqin/WordCount.git ...

  4. vue 列表的排序过渡 shuffle遇到的问题

    内部的实现,Vue 使用了一个叫 FLIP 简单的动画队列使用 transforms 将元素从之前的位置平滑过渡新的位置 需要注意的是使用 FLIP 过渡的元素不能设置为 display: inlin ...

  5. Flask:项目的准备工作

    1.创建虚拟环境 (1)打开Windows命令窗口,输入命令(先确保电脑上安装了Anaconda): conda create -n FlaskPath python=3.5.2 FlaskPath为 ...

  6. TICK技术栈(二)Telegraf安装及使用

    1.什么是Telegraf? Telegraf是一个用Go语言开发的代理程序,可用于收集和报告指标.Telegraf插件直接从其运行的系统中获取各种指标,从第三方API中提取指标,甚至通过StatsD ...

  7. idea 2019 1 spring boot 启动报错 An incompatible version [1.2.12] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    1.构建一个简单springboot工程,日志打印报错内容如下: 15:38:28.673 [main] DEBUG org.springframework.boot.devtools.setting ...

  8. linux(CentOS release 6.5)环境搭建svn

    正文之前,说几句关于svn和git的闲话. 之前用的版本控制工具主要都是svn,随着时间的推移,git以其强大灵活的分支管理功能受到大众喜爱.尤其是多人同时开发时同一项目,且不同部分功能时,git的分 ...

  9. 真正的打包scrapy单文件(不包含cfg)

    前置:https://www.cnblogs.com/luocodes/p/11827850.html 解决最后一个问题,如何将scrapy真正的打包成单文件 耗了一晚上时间,今天突然有灵感了 错误分 ...

  10. 使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...