白话 OSI 七层网络模型

引用:白话 OSI 七层网络模型

OSI全称Open System Interconnection,OSI 模型是一个描述网络功能的概念框架。简单来说,OSI 模型标对计算机系统彼此之间发送信息的方式进行了标准化。

学习目标

  • 什么是 OSI 模型
  • 七层模型中各层的用途
  • 七层模型中各层可能出现的问题
  • TCP/IP 模型与 OSI 模型的区别

术语

节点

节点(node)是连接到网络的物理电子设备,比如电脑、打印机、路由器等等。如果配置正确的话,节点可以在网络上进行信息的收发。

节点可以彼此相邻,其中的节点 A 可以直接连接到节点 B。节点之间也可以有中间节点,例如节点 A 和节点 B 之间可以放置一个交换机或路由器。

通常,路由器将网络连接到因特网,而交换机运行在网络内部,促进内网通信。

链路

链路(link)连接网络中的节点,它可以是有线的,比如以太网,也可以是无线的,比如 WiFi。

链路要么是点对点的(节点 A 与节点 B 相连),要么是多点的(节点 A 与节点 B 和节点 C 相连)。

我们也可以在谈论信息传输时将其描述成一对一与一对多的关系。

协议

协议(protocol)是一组相互商定的规则,允许网络中的两个节点交换数据。 例如http、rpc、smtp、ftp等等。

网络

网络(network)是一组计算机、打印机或任何其它想要共享数据的设备的通用术语。

网络的类型包括:LAN、HAN、CAN、MAN、WAN、BAN 或 VPN。你觉得我只是随便用 can 一词来押韵吗?才不是呢------这些都是真实的网络类型。从这里了解更多。

拓扑

拓扑(topology)描述的是节点和链路如何在网络配置中组合在一起,通常用图描述。这里是一些常见的网络拓扑类型:

常见的一些网络拓扑图

网络由节点、节点之间的链路和管理节点间数据传输的协议组成。

无论网络的规模和复杂度如何,你都可以通过学习 OSI 模型和七层网络来理解所有在计算机网络中发生的事情。

什么是OSI模型?

OSI模型有7层layer组成。分别是

  • 物理层 P
  • 数据链路层 D
  • 网络层 I
  • 传输层 T
  • 会话层 S
  • 表示层 P
  • 应用层 A

简称PDITSPA。

物理层

第一层是 物理层。第一层中有很多技术------从物理网络设备、布线到电缆如何连接到设备之间的一切。另外,如果我们不需要电缆,那么信号的类型和传输方式是什么(例如,无线宽带)。

第一层的数据单元是比特(bit)。

比特是可传输数字信息的最小单元。比特是二进制的,要么为 0 要么为 1。字节(byte)由八个比特组成,用于表示单个字符,比如字母、数字或符号。

半双工 和双工扩展

半双工(Half Duplex)和双工(Full Duplex)是两种通信模式,用于描述在通信中发送和接收数据的方式。它们的定义如下:

  1. 半双工:在半双工通信中,数据可以在通信的两个方向上进行传输,但是不能同时进行。也就是说,通信的两端可以交替地发送和接收数据,但在同一时间点只能进行发送或接收。类比于对讲机,一方发话时另一方必须等待,不能同时互相说话。
  2. 双工:在双工通信中,数据可以同时在通信的两个方向上进行传输。也就是说,通信的两端可以同时发送和接收数据。类比于电话通话,双方可以同时说话和听对方说话,实现双向的实时通信。

总的来说,半双工通信允许数据在通信两端的相反方向上进行交替传输,而双工通信允许数据在通信两端的两个方向上同时传输。

需要根据具体的通信需求和设备的支持来选择使用哪种通信模式。某些场景下,半双工通信已经足够满足需求,而在需要同时进行双向通信的情况下,则需要使用双工通信。

数据链路层

第二层是 数据链路层。它定义了数据的传输格式、可以在节点间流动的数据量大小、数据流动可以持续的时长,以及在流中检测到错误时应采取的措施。

第二层的数据单元是

帧(frame)。

每一帧都包括一个帧头、主体和一个帧尾:

  • 帧头:通常包括源节点和目的节点的 MAC 地址。
  • 主体:由要传输的比特组成。
  • 帧尾:包括错误检测信息。当检测到错误时,根据实现或网络的配置或协议,帧可能被丢弃,或者错误会被报告给上面的层,用于进一步错误校正。例如,错误检测机制的有循环冗余校验(CRC,Cyclic Redundancy Check)和帧校验序列(FCS,Frame Check Sequence)。

帧的大小通常有一个最大值,这个值被称为最大传输单元(MTU,Maximum Transmission Unit)。

MTU扩展

MTU 是 Maximum Transmission Unit(最大传输单元)的缩写,表示在计算机网络中可传输的最大数据包大小。它定义了在网络传输中数据包的最大长度。

MTU 的大小是由所使用的网络设备或协议决定的,通常以字节为单位。较常见的 MTU 大小为 1500 字节,这是以太网的标准 MTU 值。其他网络技术可能具有不同的 MTU 值,例如 PPP(Point-to-Point Protocol)的 MTU 值为 576 字节。

较大的 MTU 值可以带来更高的网络传输效率,因为在传输过程中,较小的数据包头部占据的比重较小,从而减少了网络开销。然而,较大的 MTU 值也可能面临一些问题,例如:

  1. 分段重组:当一个数据包的大小超过网络设备或网络链路所支持的 MTU 值时,数据包需要被分割成更小的片段进行传输。接收方需要重新组装这些片段。这个过程会增加网络负担和延迟。
  2. 路径 MTU 发现:为了避免对数据包进行分段重组,网络协议通常会使用路径 MTU 发现技术。该技术可以让发送方根据网络状况动态调整数据包的大小,以适应网络链路中最小的 MTU 值。

需要注意的是,不同的网络协议和设备支持的 MTU 大小可能有所不同。在配置网络设备或进行网络调优时,了解和适应正确的 MTU 值是很重要的。

网络层

第三层是 网络层。 就是在这里,我们通过路由器在网络间或跨网发送信息。不仅仅是节点到节点的通信,我们现在还可以进行网络到网络的通信了。

路由器是第三层的主力------它们是在第三层中必不可少。路由器跨越多个网络移动数据包。

路由器不仅通过连接到网络服务提供商(ISPs,Internet Service Providers)提供因特网访问,还跟踪着所在网络中的一切(记住交换机跟踪的是一个网络中所有的 MAC 地址),它所连接的其它网络,以及在这些网络中路由数据包的不同路径。

路由器将所有的地址和路由信息都保存在路由表中。

传输层

第四层是 传输层。在这里,我们会深入探讨了两个节点之间连接的具体细节,以及信息是如何在它们之间进行传输的。第四层建立在第二层的功能之上------线路规划、流量控制和错误控制。

这一层也负责数据包的分段,或者说数据包如何被拆分成小片并发往整个网络。

不像上一层,第四层也理解整个消息,而不只是每个独立的数据包的内容。根据对整个消息的理解,第四层不再一次性发送所有数据包,从而管理网络拥塞。

第四层的数据单元有好几个不同的名字,对于 TCP 而言,数据单元是数据包。对于 UDP 而言,包被称为数据报(datagram)。为了简化,我将只使用数据包这个术语。

第四层中最有名的两个协议是传输控制协议(TCP,Transmission Control Protocol)和用户数据报协议(UDP,User Datagram Protocol)。

TCP 是一个面向连接的协议,优先保证的是数据的质量而不是速度。

TCP 显式地与目的节点建立连接,并要求在数据传输时进行源节点与目的节点之间的握手操作。握手能够确认数据已经被接收。如果目的节点没有收到所有的数据,TCP 就会要求进行重传。

TCP 也会确保数据包以正确的顺序交付或者重组。从这里了解更多有关 TCP 的信息

UDP 是一个无连接的协议,优先保证速度而不是数据的质量。UDP 不要求进行握手,这也正是它被称为无连接的原因。

因为 UDP 不必等待确认,所以它可以以更快的速度发送数据,但并非所有的数据都能成功传输,我们也不会知道哪些数据传输失败了。

如果信息被拆分成多个数据报,除非这些数据报都包含一个序列号,否则 UDP 无法确保以正确的顺序重组数据包。从这里了解更多有关 UDP 的信息

TCP 和 UDP 都将数据发往网络设备上的特定端口,这些网络设备都有自己的 IP 地址。IP 地址和端口号的组合被称为套接字(socket)。

会话层

第五层是 会话层,负责建立、维持和终止会话。

会话建立在两个网络应用之间,是双方商定好的连接。注意,我们没有说两个节点,我们已经离开节点了,它们是第四层中的东西。

开玩笑的,我们还是有节点的,但是第五层不需要保留节点的概念,因为它是之前各层抽象出来的(关心)的概念。

所以会话是一个建立在两个特定的用户应用之间的连接,其中有一些重要的概念需要考虑:

  • 客户端与服务器模型:请求信息的应用被称为客户端,拥有被请求信息的应用被称为服务器。
  • 请求与响应模型:在建立会话的过程和会话期间,不断有来回的信息请求,还有包含被请求信息的响应或者是"嘿,我没有你要的东西"。

会话持续的时间可以非常短,也可以非常长,有时会话也可能会失败。

根据所采用的协议,会话可能会启动各种故障解决程序。根据所使用的应用程序/协议/硬件,会话可能支持单工,半双工或全双工模式。

第五层中协议的例子有网络基本输入输出系统(NetBIOS,Network Basic Input Output System)和远程过程调用协议(RPC,Remote Procedure Call Protocol)等等。

表示层

第六层是 表示层,负责数据的格式,比如字符编码与转换,以及数据加密。

托管用户应用程序的操作系统通常包含第六层中的程序,这个功能并不总是被网络协议实现。

第六层确保第七层中的用户程序可以成功地消费数据,当然还有最终数据的展示。

有三种数据格式化方法需要注意:

  • 美国信息交换标准代码(ASCII,American Standard Code for Information Interchange):这个七位编码技术是字符编码中使用最广泛的标准。ASCII 的一个超集是 ISO-885901,它提供了西欧语言所必需的大多数字符。
  • 扩充的二进制编码的十进制交换码(EBDCIC,Extended Binary-Coded Decimal Interchange Code):由 IBM 设计,用于大型机。此编码与其他字符编码方法不兼容。
  • 万国码(Unicode):可以使用 32 位,16 位或 8 位字符的字符编码,它尝试容纳所有已知的字母。

应用层

第七层是 应用层

顾名思义,这一层最终负责支持用户程序使用的服务。应用程序包括安装在操作系统中的软件程序,比如因特网浏览器(例如 Firefox)或文字处理程序(例如 Microsoft Word)。

应用程序可以在后台执行专门的网络功能,也可以要求第七层中专门的服务。

例如专门创建电子邮件程序,它在网络上运行并利用第七层中网络功能(比如电子邮件协议)。

应用程序也可以控制用户交互,比如安全检查(例如 MFA)、识别两名参与者的身份、初始化信息交换等。

这一层中运行的协议包括文件传输协议(FTP,File Transfer Protocol)、安全壳协议(SSH,Secure Shell)、简单邮件传输协议(SMTP,Simple Mail Transfer Protocol)、因特网消息访问协议(IMAP,Internet Message Access Protocol)、域名服务(DNS,Domain Name Service)和超文本传输协议(HTTP,Hypertext Transfer Protocol)。

虽然这些协议中的每一个都服务于不同的功能,运行的方式也各不相同,但从较高的层次看,它们都促进了信息的交流。

OSI 7层网络模型和TCP/IP 4层网络模型对比

OSI7层网络模型:

  1. 物理层:定义了传输介质和物理连接的规范,负责数据的传输和接收。
  2. 数据链路层:负责将数据分帧并进行错误检测和纠正,以确保数据在物理链路上的可靠传输。
  3. 网络层:提供了寻址和路由功能,负责选择最佳路径将数据包传输到目标主机。
  4. 传输层:负责端到端的可靠数据传输,提供了数据分段、流量控制和错误检测等功能。
  5. 会话层:负责建立、管理和终止应用程序之间的会话或连接。
  6. 表示层:负责数据的加密、压缩、格式化和转换,以便在不同系统间的交换。
  7. 应用层:提供应用程序与网络的接口,支持特定的应用协议和服务(如HTTP、FTP等)。

4层网络模型(TCP/IP模型):

  1. 网络接口层(数据链路层和物理层的组合):负责封装数据包,并在物理网络上进行传输。
  2. 网际层(网络层):负责实现数据的路由和分发,以及 IP 寻址和 IP 数据报的传输。
  3. 传输层:提供端到端的可靠数据传输,包括 TCP 和 UDP 协议,负责数据的分段、流量控制和错误检测等。
  4. 应用层:提供应用程序与网络的接口,支持特定的应用协议和服务(如HTTP、FTP等)。

对比:

  • OSI7层模型相对更加详细,将网络功能划分得更细致,而4层模型更为简洁,将功能划分得更为紧凑。
  • OSI7层模型中的会话层、表示层和应用层在4层模型中合并为应用层。
  • OSI7层模型更加理论化,用于指导协议设计和网络标准制定;而4层模型是实际应用中广泛采用的模型,更符合实际网络的运作方式。

reference

相关推荐
拾光师1 小时前
spring获取当前request
java·后端·spring
Java小白笔记3 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
JOJO___5 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server6 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
Lingbug7 小时前
.Net日志组件之NLog的使用和配置
后端·c#·.net·.netcore
计算机学姐7 小时前
基于SpringBoot+Vue的篮球馆会员信息管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis
好兄弟给我起把狙7 小时前
[Golang] Select
开发语言·后端·golang
程序员大金7 小时前
基于SpringBoot+Vue+MySQL的智能物流管理系统
java·javascript·vue.js·spring boot·后端·mysql·mybatis
ac-er88888 小时前
在Flask中处理后台任务
后端·python·flask
ac-er88889 小时前
Flask中的钩子函数
后端·python·flask