白话 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

相关推荐
神奇小汤圆30 分钟前
浅析二叉树、B树、B+树和MySQL索引底层原理
后端
文艺理科生40 分钟前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
前端·后端·架构
千寻girling40 分钟前
主管:”人家 Node 框架都用 Nest.js 了 , 你怎么还在用 Express ?“
前端·后端·面试
南极企鹅42 分钟前
springBoot项目有几个端口
java·spring boot·后端
Luke君6079744 分钟前
Spring Flux方法总结
后端
define95271 小时前
高版本 MySQL 驱动的 DNS 陷阱
后端
忧郁的Mr.Li1 小时前
SpringBoot中实现多数据源配置
java·spring boot·后端
暮色妖娆丶2 小时前
SpringBoot 启动流程源码分析 ~ 它其实不复杂
spring boot·后端·spring
Coder_Boy_2 小时前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
Java后端的Ai之路2 小时前
【Spring全家桶】-一文弄懂Spring Cloud Gateway
java·后端·spring cloud·gateway