更新:2023 / 7 / 23
科普 | OSI模型
术语
节点
节点
( Node
)是连接到网络的物理电子设备,比如电脑、打印机、路由器等等。如果配置正确的话,节点可以在网络上进行信息的收发。
节点
可以彼此相邻,其中的 节点
A 可以直接连接到 节点
B。节点之间也可以有中间节点,例如 节点
A 和 节点
B之间可以防止一个交换机或路由器。
通常,路由器将网络连接到因特网,而交换机运行在网络内部,促进内网通信。
链路
链路
连接网络中的节点。它可以是有线的,比如以太网;也可以是无线的,比如 WiFi
。
链路
是点对点的( 节点
A 和 节点
B相连 ),要么是多点的( 节点
A与 节点
B和 节点
C相连)。
协议
协议
定义了管理通信过程中语法(可通信的内容)、语义(如何通信)以及同步(何时通信以及通信的速度)的规则。协议
可以由硬件、软件或二者的组合实现。协议
可以由任何人创建,但是最被广泛采纳的 协议
都是基于标准的。
有线和无线链路都可以有 协议
。
虽然任何人都可以创建协议,但是基于因特网组织(例如,因特网工程任务组 IETF
,Internet Engnieering Task Force
)发布的标准的协议通常都是最被广泛采纳的。
网络
网络
( network )是一组计算机、打印机或任何其他想要共享数据的设备的通用术语。
网络
的类型包括:LAN
、HAN
、CAN
、MAN
、WAN
、BAN
或 VPN
。
拓扑
拓扑
( topology )描述的是节点和链路任何在网络配置中组合在一起,通常用图来描述。
下面是一些常见的网络拓扑类型:
网络
由 节点
、节点
之间的 链路
和管理 节点
间数据传输的协议组成。
概念
网络上的所有设备都具有网络硬件和软件这些特征,它们需要一种通用的规则才能实现彼此之间的友好的交流。这个规则可以被统称为 协议
。
协议
并不知有一个,在不同的位置,我们会应用到不同的 协议
,所产生的效果也不尽相同,而且一些 协议
需要协同配合才能完成工作。
随着时代的发展,协议
越来越多,我们想要了解其中某一项协议的具体聂荣变得越来越复杂。为了解决这个问题,一个叫做 ISO
的国际化标准组织将这些条例进行了整理规划,方便不同的人群了解不同的协议。
OSI
,全称为 Open System Interconnection
,中文名称为 开放系统互连
。
OSI
模型是由国际标准化组织 ISO
创建的描述网络功能的概念模型,支持各种通信系统使用标准协议进行通信。简单而言,OSI
为保证不同计算机系统彼此之间发送信息的方式提供了标准。人们可以将 OSI
模型视为一种通用计算机网络语言。根据这一概念,通信系统分为七个抽象层(层
是对网络上的功能和行为进行分类和分组的一种方式),逐层堆叠而成,如下所示,OSI
模型的每一层负责处理特定作业并与其上下层进行通信 ^2^。
对通信系统的攻击中,DDoS
攻击是第3层的网络连接层;应用程序层攻击的是第7层应用层;协议层攻击的目标是第 3
和 4
层。
要牢记,虽然某些技术(比如,协议)在逻辑上比起其他层来说可能 "属于" 某一层,但并非所有的技术都完全契合 OSI
模型中的单个层。例如,以太网( Ethernet
)、802.11( WiFi
)和地址解析协议( ARP
,Address Resolution Protocol
)程序不只在一层上工作。
OSI
只是一个模型,一个工具,并不是一组规则。
作用
虽然现代互联网并未严格采用 OSI
模型,但 OSI
模型对于解决网络问题仍然很有帮助。无论是某位无法使用笔记本电脑上网的客户,还是为数千名用户提供服务的网站宕机,OSI
模型都能帮助分解问题并找到问题根源。如果可以将问题范围缩小到模型的某个特定层,就能避免许多不必要的工作。
OSI
参考模型定义了开放系统的层次结构和各层所提供的服务。OSI
参考模型的一个成功之处在于,它清晰地分开了 服务
、接口
和 协议
这3个容易混淆的概念。
服务
:描述每一层的功能;接口
:定义了某层提供的服务如何被高层访问;协议
:每一层功能的实现方法。
通过区分这些抽象概念,OSI
参考模型将功能、定义与实现细节区分开来,概括性高,使它具有普遍的适应能力。
OSI
模型具有以下优点:
-
- 分工合作,责任明确。性质相似的工作划分在同一层,性质不同的则划分到不同层。这样每一层的功能都是明确的,每一层都有其负责的工作范围。一旦出现问题,很容易找到问题所在的层,仅对此层加以改善即可。
-
- 对等交谈。计算机通过网络进行通信时,按照对等交谈的原则,即同一层找同一层,通过各对等层的协议来进行通信,比如,两个对等的网络层使用网络协议通信。
-
- 透层处理,层层负责。在
OSI
模型中,两个实体通信必须涉及下一层,只有相邻层之间可以通信,下层向上层提供服务,上层通过接口调用下层的服务。层间不能有越级调用关系,每层功能的实现都是在下层提供服务的基础上完成的,即每一层都是利用下层提供的服务来完成本层功能,并在此基础上为上层提供进一步的服务。
- 透层处理,层层负责。在
结构
OSI
模型将整个通信功能划分为7个层次。划分的原则如下:
-
- 网络中所有节点都划分为相同的层次结构,每个相同的层次都有相同的功能;
-
- 同一节点内各相邻层次间可通过接口协议进行通信;
-
- 每一层使用下一层提供的服务,并向它的上层提供服务;
下面是一个简单的示意图:
如何记住所有层的名字呢?很简单 ------ Please Do Not Tell the Secret Password to Anyone.
- Please | 物理层
Physical Layer
- Do | 数据链路层
Data Link Layer
- Not | 网络层
Network Layer
- Tell | 传输层
Transport Layer
- Secret | 会话层
Session Layer
- Password | 表示层
Presentation Layer
- Anyone | 应用层
Application Layer
应用层
应用层
是 OSI
参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各种网络服务,比如因特网浏览器( 比如 firefox )或文字处理程序( 例如 Microsoft Word )。
应用层
拥有应用程序运行所需的服务和功能,不包括应用程序本身。
软件应用程序( 如 web
浏览器和电子邮件客户端 )依靠 应用层
发起通信。但需要明确地是,客户端软件应用程序不属于 应用层
;相反,应用层
负责协议和数据操作,软件依靠上述操作向用户呈现有效数据。
这一层中运行的协议包括文件传输协议( 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
)。
虽然这些协议中的每一个都服务于不同的功能,运行的方式也各不相同,但从较高的层次看,它们都促进了信息的交流。
表示层
表示层
提供各种用于应用层数据的 加密
、压缩
和 转换
功能,确保一个系统的 应用层
发送的数据能被另一个系统的 应用层
识别。如果必要,该层可以提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。
加密
SSL
或TLS
加密协议位于表示层
,它们为网络上的节点提供身份认证和数据加密功能,帮助确保传输的数据抵御恶意用户的攻击。
如果设备通过加密连接进行通信,则第6层表示层
负责发送端加密和接收端解密,以便向应用层
呈现非加密可读数据。压缩
表示层
还负责压缩从应用层
接收的数据,然后将数据传递到第5层会话层
。这有助于尽量减少要传输的数据量,从而提高通信速度和效率。转换
两台相互通信的设备可能使用不同的编码方法,因此第6层表示层
负责将传入数据转换为接收设备应用层
可以理解的语法。
会话层
会话层
负责初始化、维持和终止两个设备的 表示层
实体之间的通信会话。它响应来自 表示层
的请求,并向 传输层
发起请求,确保会话保持打开的时长足以传输所有交换数据,而后立刻关闭会话以避免浪费资源。
其中有一些重要的概念需要考虑:
- 客户端与服务器模型
请求消息的应用被称为客户端
,拥有被请求消息的应用被称为服务器
; - 请求与响应模型
在建立会话的过程和会话期间,不断有来回的信息请求,还有包含被请求信息的响应或者是 "嘿,我没有你要的东西"
会话层
还负责同步数据传输与检查点。例如,如果传输一个 100 MB 的文件,会话层
可以每 5 MB 设置一个检查点。如果在传输了 52 MB 后连接断开或崩溃,可以从最后一个检查点恢复会话,也就是只需要再传输 50 MB 数据。若未设置检查点,则必须从头开始传输整个文件。
根据所采用的协议,会话可能会启动各种故障解决程序。根据所使用的应用程序 / 协议 / 硬件,会话可能支持单工、半双工或全双工模式。
会话层
采用的协议有网络基本输入输出系统( NetBIOS
,Network Basic Input Output System
)和远程过程调用协议( RPC
,Remote Procedure Call Protocol
)等等。
传输层
传输层
建立在 数据链路层
的功能( 线路规划
、流量控制
和 错误检测
)之上,负责两个设备间的端到端通信,包括从 会话层
提取数据,将数据分解为多个区块( 称为 数据段
),然后再发送到第3层 网络层
。
接收端设备 传输层
负责重组数据段,确保数据可供 会话层
使用。
流量控制
用于确定最佳传输速度,避免采用快速连接的发件人淹没采用慢速连接的收件人。传输层
通过确保接收数据的完整性(如果不完整,则请求重新传输)来对接收端进行 错误控制
。
传输层
向高层屏蔽了下层数据通信的细节,使高层用户看到的只是两个在传输实体间的一条主机到主机的、由用户控制和设定的可靠的数据传输通路。我们通常说的 TCP UP
就是在这一层,端口号即是这里的 "端"。
传输层
中最有名的两个协议是传输控制协议( TCP
,Transimission Control Protocol
)和用户数据报协议( UDP
,User Datagram Protocol
)。
TCP
和 UDP
都将数据发往网络设备上的特定端口,这些网络设备都有自己的IP地址。IP地址和端口号的组合被称为套接字( socket
)。
TCP
TCP
是一个面向连接的协议,优先保证的是数据的质量而不是速度。
TCP
显式地与目的节点建立连接,并要求在数据传输时进行源节点与目的节点之间的握手操作。握手能够确认数据已经被接收。如果目的节点没有收到所有的数据,TCP
就会要求进行重传。
TCP
也会保证数据包以正确的顺序交付或重组。UDP
UDP
是一个无连接的协议,优先保证速度而不是数据的质量。
UDP
不要求进行握手,这也正是它被称为无连接的原因。因为UDP
不必等待确认,所以它可以以更快的速度发送数据,但并非所有的数据都能成功传输,我们也就不会知道哪些数据传输失败了。如果信息被拆分为多个数据报,除非这些数据报都含有一个序列号,否则UDP
无法确保以正确的顺序重组数据包。
网络层
网络层
负责促进两个不同网络之间的数据传输,而如果两台通信设备位于同一网络则不需要使用网络层。
路由器是 网络层
的主力,它们是在第三层中必不可少的。路由器跨越多个网络移动数据包。路由器不仅通过连接到网络服务提供商( ISPs
,Internet Service Providers
)提供因特网访问,还跟踪着所在网络中的一切( 记住交换机跟踪的是一个网络中的所有 MAC
地址 ),它所连接的其它网络,以及在这些网络中路由数据包的不同路径。
路由器将所有的地址和路由信息都保存在路由表中。以下是一个简单的路由表示例:
网络层
的数据单元是数据包( packet
)。每个数据包都包括一个帧加上一个IP地址信息的包装。换句话说,帧被第三层 网络层
的地址信息封装了。
数据包中传输的数据有时也被称为负载( payload
)。每个数据包中都有抵达目的地所需的一切,但能否成功到达就是另一回事儿了。接收端的 网络层
会再重组这些数据包。
节点一旦连接到因特网,它就会被赋予一个因特网协议( IP
,Internet Protocol
)地址,它看起来要么像 172.16.254.4( IPv4
地址 ),要么像 2001:0db8:85a3:0000:0000:8a2e:0370:7334( IPv6
地址)。路由器在它们的路由表中使用IP地址。
IP地址通过地址解析协议( ARP
,Address Resolution Protocol
)与物理节点的 MAC
地址相关联,ARP
用节点对应的IP地址解析 MAC
地址。
数据链路层
数据链路层
与 网络层
十分相似,但 数据链路层
用于促进同一网络上两台设备之间的数据传输。
数据链路层
定义了数据的传输格式(将从 网络层
提取的数据包分解成更小的部分,称为 帧
)、可以在节点间流动的数据量大小、数据流动可以持续的时长,以及在流中检测到错误时应采取的措施。
如果使用更加正式的技术术语来描述:
线路规划
谁应该交流多久?节点传输信息的时间应该持续多久?流量控制
应该传输的数据量是多少?错误控制
-检测和校正
从电尖峰脉冲到连接器,所有的数据传输方法都有可能出错。一旦第二层的数据链路层
能够 "告诉" 上层出现的问题,上层就能纠正那些错误。第二层主要关心错误检测
,而不是错误校正
。
数据链路层
又分为2个子层,
逻辑链路控制子层
(LLC
,Logic Link Control
)
LLC
子层处理帧的寻址以及流量控制。速度取决于两个节点之间的链路,例如以太网或WiFi
;介质访问控制子层
(MAC
,Media Access Control
)
MAC
子层负责分配硬件标号,这个标号称为MAC
地址,它能够唯一标识网络上的各个设备。两个设别不应该有相同的MAC
地址。MAC
地址在硬件制造时就分配好了,位于网卡当中,大多数网络都会自动对其进行识别。交换机会跟踪网络上的所有MAC
地址。
数据链路层
的数据单元是帧( frame
)。帧的大小通常有一个最大值。这个值被称为最大传输单元( MTU
,Maximum Transmission Unit
)。每一帧都包括一个帧头、主体和一个帧尾:
帧头
通常包括源节点和目的节点的MAC
地址;主体
由药传输的比特组成;帧尾
包括错误检测信息。当检测到错误时,根据实现或网络的配置或协议,帧可能被丢弃,或者错误会被报告给上面的层,用于进一步错误校正;
例如,错误检测机制有循环冗余校验(CRC
,Cyclic Redundancy Check
)和帧校验序列(FCS
,Frame Check Sequence
);
物理层
物理层
包括参与数据传输的物理设备,如电缆和交换机。同时还负责将数据转换为 bitstream
,也就是由 1
和 0
构成的字符串。另外,两台设备的 物理层
必须达成信号约定,以便区分两台设备的字符串 1
和 0
。
物理层
的数据单元是比特( bit
)。比特是可传输数字信息的最小单元。比特是二进制的,要么是 0
要么是 1
。字节( byte
)是由8个比特组成,用于表示单个自负,比如字母、数字或符号。
根据硬件设备支持的数据速率(传输速率,每秒或每毫秒的比特数量),比特被发送到硬件设备或从设备发出。这个过程是同步的,从而保持单位时间内发送和接送比特的数量相等( 这被称为 比特同步
)。比特的传输方式由信号的传输方式决定。
节点可以发送比特、接受比特或者收发兼顾。
- 如果节点只能收或者只能发,那么该节点采用的就是单工模式;
- 如果节点既可以收又可以发,那么节点采用的就是双工模式;
- 如果节点可以同时进行收发,那么它就是全双工模式,否则就是半双工模式;
数据如何流动
为通过网络来将人类可读信息从一台设备传输到另外一台设备,必须在发送设备沿着 OSI
模型的七层结构向下传输数据,然后在接收端沿着 OSI
模型的七层结构向上传输数据。
举例如下:
-
^2^' ^4^
A
想给B
发一封电子邮件,A
在笔记本电脑的电子邮件应用程序中编写邮件,点击发送。电子邮件应用程序将电子邮件传递到应用层
,应用层
选取电子邮件通信协议SMTP
,再将数据传递到表示层
。接着,表示层
压缩数据,再将数据传递到会话层
,由会话层
初始化通信会话。而后,数据将到达发送方的传输层
,在传输层
被分段,再在网络层
将这些数据段分解为数据包,然后在数据链路包
被进一步分解为帧
。随后,数据链路层
将这些帧传输到物理层
,物理层
将数据转换为bitstream
位流1
和0
,最后通过物理介质(比如电缆)来发送数据B
的计算机通过物理介质(比如WifFi
)接收bitstream
后,数据沿其设别的同一系列层级流动,但顺序刚好相反。首先,物理层
将bitstream
从1
和2
转换为帧,传递到数据链路层
。然后,数据链路层
将帧重组为数据包,供网络层使用。接着,网络层
将数据包重组为数据段供传输层
使用,传输层
再将数据段重组为数据片段。随后,数据将流入收件方的会话层
,会话层
将数据传递到表示层
并结束通信会话。表示层
解压数据并将原始数据传递到应用层
。应用层
将人类可读数据传递到B
的电子邮件应用程序中,这样她就可以查看邮件了。2.^1^
A
公司和B
公司是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层
( 类似于公司文秘的角色 ),就是将应用层
的传递信息转翻译成英语,但是同时为了防止除了A
和B
以外的公司看到,公司A
的人也会对这份报价单做一些加密的处理。会话层
( 类似于公司的外联部 ) 的同事拿到表示层
的同事转换后的资料,将建立并记录本地会话,会话层
的同事那里可能会掌握本公司与其他好多公司的联系方式,负责管理本公司与外界好多公司的联系会话。他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式,准备将资料寄出。等到确定公司B
已接收到此份报价单后,此次会话就结束了,外联部的同事就会终止此次会话。传输层
就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。网络层
就相当于快递公司庞大的快递网络、全国不同的集散中心,比如说,从深圳发往北京的顺丰快递陆运,首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再到北京顺义集散中心。这个每个集散中心,就像网络中的一个IP
节点。数据链路层
相当于连接不通集散中心之间的物流汽车或火车线路及排班,会进行流量控制
和错误控制
。而物理层
相当于快递寄送过程中的交通工具,例如汽车、火车、飞机和船。
OSI 和TCP/IP 的对应关系和协议
参考这里 ^5^