【大话存储】学习笔记(7章), OSI模型
任何系统之间,如果需要通信,都需要一套自己的协议系统。这个协议系统一般要定义互相通信的语言,以及硬件。
OSI是被提取抽象出来的系统间通信模型,中文意思是“开放式系统互联”,是描述多个系统之间交流的通用模型。
OSI模型
OSI初步
在讲OSI之间,我们首先看一个例子,PC a向PC b发送数据包的过程如下:
- a在内存中通过定义的语言生成数据包
- 将数据包通过总线传给TCP/IP协议处理单元,告诉对方的IP地址、UDP还是TCP、端口号
- TCP/IP处理模块收到包之后,封装,通过总线发送给以太网卡
- 以太网卡再进行编码,变成高低电平震荡发给交换机
- 交换机将数据包交换到b的接口
- b输送到以太网卡的解码芯片,去掉以太网头然后产生中断,将数据包送到内存
- TCP/IP处理模块提取IP头和TCP头,以便区分应该输送到哪个应用程序的缓冲区内存。
- 送到b的应用程序缓冲区内存
可以发现里面最重要的就是三个元素
- 连:通信双方需要连通起来。
- 找:指的是通信双方必须能区分自己和对方。
- 发:定义了如何将数据发到对方。
OSI的七个层次
OSI模型将系统通信划分为了7个层次,最上面的三个层次可以归属到应用层。这个层不需要关心如何将数据传送到对方,只关心如何组织和表达数据。
应用层
应用层是OSI的最上层,表示一个系统对另一个系统要传达的最终消息。
只关注数据, 不关注指令如何发送
表示层
表示层就是对应用层数据的一种表示。
发送方必须用双方规定好的格式来表示信息:可以嵌入在实体数据中。
会话层
会话层:建立会话交互机制。实际是双方的应用程序之间的交互。
应用层、表示层、会话层的数据内容都被封装起来,交给押运员传输层
。
TCP/IP只有4层:应用层、传输层、网络层、物理链路层,它将OSI的应用层、表示层、会话层合并为一层,即应用访问层
。意思是这个层全部与应用程序相关的逻辑,与网络通信无关。应用程序只需要调用下层的接口就可以完成通信。
下四层的作用是把上三层的数据成功送到目的地。
传输层
典型的传输层程序如下:
- TCP协议的作用是保证上层数据能传输到目的地。类似货运公司的押运员,不管通过什么渠道(直达还是下一跳),不管物理链路的类型,只要送到即可。
- 如果出现错误,需要重新发送。每件货物到了目的地必须找收件人签字(TCP的ACK应答包)或者一批货物到了以后一次性签收。(滑动窗口)
- 最后回公司登记
TCP主要处理拥塞和流量控制。路由器是调度中心,它可以决定走哪条路。TCP不能调度,它只是在发生了拥挤就只能通知后续的货物慢点发。如果道路畅通,则通知后面的货物加速发送。
那么TCP是怎么知道链路是否拥塞呢?它可以通过接收方返回的ACK应答来判断链路拥挤的。如果半天都没收到对方的签字,说明拥塞,有丢失
** 传输层的程序一定运行在通信双方的终端设备上。**而不是在中间的互联设备上。
因为传输层是一种端到端的保障机制,必须保证成功收到了并成功处理数据,才算发送成功了。如果只到了对方的网卡,但是断电了,也不叫端到端保障。
具体的可以再看从输入网址到浏览器返回内容(二),TCP/IP篇
网络层
上面说到了传输层其实只是一个押运员,它并不能进行调度,那么如何选路就交给了网络层。
同样以客户寄货物为例,当客户把货物交给货运公司的时候,会填写目的地址,至于应该走哪条路,统统不管,全部交给网络层处理。
- 货运公司为每件货物贴上IP头地址标签
- 货运公司掌握了全球范围的地址信息(路由表)
- 选择了一条路就上路。
- 货物每中转到一个地方就交给那个地方的调度,由调度来决定下一站到哪里。
- 旧调度不必告诉新调度最终的目的怎么走,因为所有调度都知道最终的目的。
总结一下就是,客户寄送货物的时候需要给出最终的目的地址,不管这个货物途径哪个中转站,所有的中转站都会知道最终的目的地址。
比如,要从新疆将货物寄到青岛,但是新疆到青岛没有直到的火车,所以只能去北京转出。
那么新疆的调度会去查找路由表,发现必须先到北京。注意此时在货物上贴上的还是青岛的标签,而不是北京的标签,但是会将货物发到去北京的火车上。
货物到北京,查看最终的目的地,会查找北京调度中心的路由表,此路由表与新疆的表不同。于是将货物送到去青岛的火车。
可以看出** 路由器就是调度的角色**
比如从青岛访问北京的服务器,具体步骤如下:
- 首先必须知道服务器的IP地址,用这个IP地址作为最终目的地址组装成数据包,发送给青岛的Internet提供商(下面叫运营商)的路由器
- 运营商的路由器解析目的IP地址,发现应该从1号端口发送出,于是发到了河北的另一台路由器。
- 河北路由器根据目的IP查找路由表,发现需要从8口出
- 多次中转以后,发到了北京的路由器。
- 最终到了北京的服务器,将这个包传送到这台服务器的网卡,并提交到TCP/IP协议处理的内存空间。
- 发现是一个TCP握手数据包,所以返回一个确认包,三次握手完成后,就可以向服务器发送HTTP请求来获取网页资源。
在中转的过程中,目的IP并不会改变,改变的只是MAC地址,也就是说会将MAC地址改为下一站的地址。
数据链路层
数据链路层:连通两个设备之间的链路,将上层的数据包再次打包成对应链路特定的格式。按照对应链路的规则在链路上传输给对方。
数据链路就好比交通规则:上路之前还需要看公路的质量怎么样,和对方商量传输的事宜。
链路层的作用:
- 协商链路参数:双工、速率、链路质量
- 打包成帧,加上同步头,一次传输一句或者一个字符一个字符(取决于上层的选择)
- 链路层程序调用物理层提供的接口,将帧交给物理层。
- 提供一些保障机制,在每个帧之后加一个校验字段。如果不符说明链路干扰,直接丢弃,不过不会报告错误,因为上层对链路层的错误不关心。接收方的传输层会感知某个包没有到达,重新传送不完整的包。链路层只侦错,不纠错。
两台PC之间的通信和两个路由器之间通信是有区别的。
路由间的通信:
简单的路由设备工作在OSI的第三层,即网络层,没有上4层的处理逻辑。
所以收到包之后,只检查包中的IP地址,不改变IP头之上的其他内容。
如果有NAT功能的路由器,会对IP包的源或者目的IP地址做修改。
下图为通信路径上各个设备所作用的层次示意图:
- PC A上的浏览器要访问PC B上的Web服务,首先调用WinSock接口,访问OS内核中的TCP/IP协议栈,将目的IP和目的端口以及数据(HTTP GET请求)告诉TCP/IP协议栈
- 协议栈发现与
PC B
不存在链接,所以通过三次握手与B的协议栈建立连接。(A的协议栈组装第一次握手包,发给OS的内核缓冲区,调用网卡驱动从缓冲区将IP包编码并传递出去,因为握手包很小,所以只需要一个帧。) - 帧到达路由器A的缓冲区,产生中断信号,去掉以太网头,发送到
路由器A
的内存,等待IP转发逻辑块处理(IP路由协议计算模块),分析出IP包的头部目的IP地址,查找路由表确定出去的端口号,所以IP路由运算一定要高效。 - 查找出后,从
网卡2
出发送到路由器B的网卡2
.通过同样的过程,发送到PC B
的网卡缓冲区,网卡产生中断,通过总线传送到TCP/IP的协议栈缓冲区内存。 PC B
的协议栈分析出IP是自己的,端口号是80,同时握手标识位是二进制1,就知道是从源设备向Web服务程序所监听的端口发起的握手连接。所以回复IP包给PC A
,PC A再回一个最终确认的包。- 握手成功,
PC A
的协议栈将缓冲区中有浏览器发送过来的HTTP GET请求数据组装成TCP/IP数据包发送给PC B
。PC B获得数据包之后,分析TCP 端口号,根据对应关系将数据放到监听这个端口的应用程序的缓冲区内存。 - 应用程序收到GET请求后,触发Web服务逻辑流程,返回Web数据。同样由B的协议栈发送给
PC机 A
。
未收到确认的包会放到缓冲区中,不会删除,直到收到对方的确认。
所以即使中途的设备把包丢弃了,运行在两端的TCP/IP协议依然会重传,这就是端到端的保障,因为设备中途网络设备不会缓存发送的数据,更不会自动重传。
现在我们来对比一下IP头和TCP头的区别:
- IP头是个标签,用来查看是谁发的货物。
- TCP头是用来确认由哪个上层应用程序来处理收到的包。(用端口号来决定)
物理层
物理层
:在一种介质上将数据编码发送给对方。
注意链路层是控制物理层的。
我们可以把物理层看做传送带,不会进行货物分批,所以需要链路层给每批货物加标志性的头,接收方看到标志了以后就知道新一批货物来了。
经过物理层编码后,最终变成了一串bit流。通过电路振荡传输给对方,收到bit流之后,提交给链路层程序,剥去链路层同步头、帧头帧尾、控制字符。
MTU ,最大传输单元:每种链路都有自己最合适的分批大小
如果一次传输传送大于这个大小的货物,超过了链路接收放的处理吞吐量,会造成缓冲区溢出。
不过TCP和IP协议都会给货物分批。TCP会首先给货物分批,到了IP层,会按照链路层的分批大小来进行分批,如果TCP的分批大小已经小于链路层的分批,不会再分。
被IP层分批的货物,最终会由接受方的IP层再组装,但是由TCP分批的货物,接收方的TCP层不会合并。对货物的处理分析全部交由上层的应用程序来处理
转载于:https://www.cnblogs.com/dy2903/p/8422587.html
【大话存储】学习笔记(7章), OSI模型相关推荐
- 大话存储学习笔记(4)
七.逻辑卷管理 逻辑卷管理(简称LVM),是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层. 通过LVM管理可以轻松管理磁盘分区,如:若干个磁盘分区连接为一整块 ...
- 小吴的《机器学习 周志华》学习笔记 第二章 模型评估与选择
小吴的<机器学习 周志华>学习笔记 第二章 模型评估与选择 上一周我们介绍了第一章的基础概念,这一次将带来第二章的前三节.后面的2.4 比较检验与2.5 偏差与方差,涉及概率论与数理统计概 ...
- CUDA学习笔记之 CUDA存储器模型
CUDA学习笔记之 CUDA存储器模型 标签: cuda存储bindingcache编程api 2010-12-14 01:33 1223人阅读 评论(0) 收藏 举报 分类: CUDA(26) GP ...
- 《Go语言圣经》学习笔记 第九章 基于共享变量的并发
<Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...
- 《Go语言圣经》学习笔记 第二章 程序结构
Go语言圣经学习笔记 第二章 程序结构 目录 命名 声明 变量 赋值 类型 包和文件 作用域 注:学习<Go语言圣经>笔记,PDF点击下载,建议看书. Go语言小白学习笔记,几乎是书上的内 ...
- 《Go语言圣经》学习笔记 第一章 Go语言入门
Go语言圣经学习笔记 第一章 Go语言入门 目录 Hello, World 命令行参数 查找重复的行 GIF动画 获取URL 并发获取多个URL Web服务 本章要点 注:学习<Go语言圣经&g ...
- Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据
#2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...
- [go学习笔记.第一章] go可以做什么
go可以做什么,go有以下三大学习方向: Golang的应用领域 1.区块链应用 区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术, ...
- 小吴的《机器学习 周志华》学习笔记 第一章 绪论
小吴的<机器学习 周志华>学习笔记 第一章 绪论 近一年时间接触到不少机器学习的知识,虽然断断续续学了一些,总感觉还没有入门(只学会了疯狂调包).因此,最近开始系统学习Machine Le ...
- 计算机网络学习笔记---第一章
计算机网络学习笔记 第一章 文章目录 计算机网络学习笔记 第一章 前言 一.计算机网络的概念 (一)计算机网络的功能 1.数据通信(连通性) 2.资源共享(硬件 软件 数据) 3.分布式处理 (Had ...
最新文章
- 悟道·文澜详解:目前最大的中文多模态通用预训练模型
- 互联网协议 — PPP 点对点协议
- java中什么是类型_什么是Java中基本数据类型?
- 3.4 svm人脸识别
- Objective-C代码学习大纲
- 程序员最爱用 Emacs 写 Python、Bash,调研了 7300 位开发者有这些发现
- unity 打开项目路径无效_unity3d建立的文件有中文路径,现在新建了项目打不开了...
- php变量存储过程,php - 从存储过程调用返回的变量作为用于可变的输出值 - SO中文参考 - www.soinside.com...
- axure数据报表元件库_axure图表元件库 axure教程:如何制作axure组件库
- 【答题游戏】最强王者--小游戏开发解析
- SSID的使用和中文设置
- Reflector使用详解
- 1、STM32通过软件IIC连接ADXL345(ADXL345使用遇到的一些坑)
- Vite:Error: Cannot find module ‘worker_threads‘
- php利用phpqrcode生成二维码,并将二维码盖在一张图上实现美化
- 和USB网络线有关的资料和我遇到的一些问题及解决
- CHAP MS-CHAPv2 EAP
- 爬虫B站任意视频 弹幕文字+时间
- 【数据挖掘】天池挑战赛 新闻推荐
- java 正则表达式 电话_Java使用正则表达式验证手机号和电话号码的方法