OSI七层模型

互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。

对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,
而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。

1- OSI七层模型

2- TCP/IP四层协议示意图:

TCP/IP协议包含哪几层从下往上:网络接口层、网络层、传输层、应用层。

2.1- TCP/IP**协议数据包传输过程:

下面是一个直观的TCP/IP四层模型数据包示例,该图展示了数据包中所包含的信息。数据包的每个部分都包含了信息以便指引数据准确及时地传达到指定路径。

2.2- OSI七层和TCP/IP五层以及对应网络设备对比示例图

image

TCP/IP四层模型是OSI七层模型的简化版,

分层 功能
应用层 网络服务与最终用户的一个接口(可理解为人机交互界面)
表示层 数据的表示,安全,压缩
会话层 建立,管理,终止会话
传输层 定义传输数据的协议端口号,以及流控和差错校验
网络层 进行逻辑地址寻址,实现不同网络之间的路径选择
数据链路层 建立逻辑连接,进行硬件地址寻址,差错校验等功能
物理层 建立,维护,断开物理连接

3- 场景举例:

3.1- 应用层

最直观的理解就是人机交互界面,或者说是系统程序窗口。
甲将“你好”两个字输入电脑微信软件。

3.2- 表示层

计算机如何处理“你好”两个字? 答案就是“翻译”!

人类有人类的语言,计算机也有自己的语言。计算机是不懂汉语的,他只知道二进制的 0 和 1 ,那么甲在计算机的微信上打了“你好”这两个字,计算机接收到后开始通过二进制转换成自己的语言。这一步就是翻译,

当然,表示层还有其他的功能,例如安全加密,压缩等。

3.3- 会话层

计算机知道你要发送的东西之后,就需要准备发送了。那么,第一步就是要找到对方(乙),并和对方建立会话关系。

直接理解:会话属于软件层面,允许不同机器上的用户之间建立会话关系。

3.4- 传输层

传输层可理解为是同一个软件中的两个端口进行数据传输。

我用微信发送的消息,你也需要用微信来接收。那么就是电脑端微信用户之间的传输。

3.5- 网络层

传输层已经准备就绪了,可是我们知道微信用户千千万,甲和乙中间还存在很多的其他用户,我们怎么实现甲的文字就能准确的发送到乙的微信上呢?

这就需要网络层的 IP 地址。

只要知道了乙的 IP 地址,就可以选择最佳路径进行准确的数据传输了。

3.6- 数据链路层

网络层接收到数据后需要继续往下传输,需要使用工具,就是数据链路层的网卡,继续进行传输。

3.7- 物理层

数据到达物理层后,变成信号传输。

数据到达目标主机后,开始进行一个逆向的过程。

即数据到达对方主机后,从物理层传输到数据链路层–网络层–传输层–会话层–表示层–应用层。

此时,数据到达乙的电脑,乙就可以看到甲发送的“你好”两个字了。

4- IP地址和MAC地址

是计算机网络中两个重要的地址概念,它们既有区别也有联系。

区别:

  1. 定义与用途: IP地址(Internet Protocol Address)是网络层(OSI第三层)使用的地址,用于标识网络中的设备位置,实现不同网络设备之间的通信。MAC地址(Media Access Control Address)是数据链路层(OSI第二层)使用的地址,用于在局域网内标识网络设备的物理地址。

  2. 分配依据: IP地址通常由网络管理员分配,或者通过DHCP自动分配,其分配基于网络拓扑结构。MAC地址则是在硬件制造时由制造商设定的,具有全球唯一性。

  3. 地址可更改性: IP地址可以根据需要进行更改或重新分配。MAC地址通常不可更改,固化在硬件中,虽然技术上可以修改,但通常不这么做。

  4. 地址长度: IP地址(IPv4)是32位的,而MAC地址是48位的。IPv6地址则扩展到128位。

  5. 寻址与路由: IP地址可以跨网络使用,用于路由选择。MAC地址仅在局域网内部使用,不用于跨网络通信。

联系:

  1. 数据传输过程中的映射: 在局域网内部,当一个设备向另一个设备发送数据时,需要通过ARP(Address Resolution Protocol)将IP地址解析为对应的MAC地址,以便在数据链路层正确传输数据。

  2. 局域网内的一一对应: 在一个局域网内部,每个设备的IP地址和MAC地址是一一对应的,确保了数据能够在复杂的网络环境中正确送达。

  3. 网络通信的必需: 在整个网络通信过程中,IP地址和MAC地址共同工作,IP地址负责全球范围内的寻址和路由,而MAC地址则负责局部网络内的硬件识别。

总结来说,IP地址和MAC地址在网络通信中各司其职,IP地址侧重于广阔网络空间中的定位,而MAC地址则专注于局部网络内的硬件识别。两者相互补充,共同确保了计算机网络通信的顺畅进行。

4.1- Q&A

  1. 有了目标ip为什么还要目标Mac呢?而且目标Mac是使用arp通过目标ip查到的,这不是多此一举吗?
    1. 因为在数据链路层只认mac地址,对应的物理设备就是交换机,交换机他只能识别到mac地址然后关联到对应的物理端口,相当于邮递员只会看地址送信一样

5- 数据传输过程

5.1- 传输的数据单元

分层 传输数据单元
传输层 数据段
网络层 数据包
数据链路层 数据帧
物理层 比特流(Bits)

5.2- 数据是如何封装的

因每一层的传输数据单元不同,所以需要封装TCP报文头部,以此使下一层能够看懂识别。

  • 传输层:传输层有TCP/IP两个协议,TCP(传输控制协议)和UDP(用户数据报协议)。

    • TCP协议传输更加稳定可靠,UDP协议传输效率更高。所以,上层数据到达传输层后需要封装TCP头部或者UDP头部。
  • 网络层:同理,上层数据到达这里需要封装IP头部。

  • TCP/IP定义了网络互联协议(IP)(英文是Iternet Protocol)。而IP又由四个支撑协议组成:

    • ARP(地址解析协议),
    • RARP(逆地址解析协议),
    • ICMP(网际控制报文协议)
    • IGMP(网际组管理协议)。
  • 数据链路层:同理,上层数据到此需要封装MAC头部。

  • 物理层:到达物理层就直接由计算机通过信号接收了。

5.3- 数据是如何解封装

看完数据封装再看这个是不是特别简单?

其实解封装就是把TCP报文头部摘掉。

6- OSI七层模型

6.1- 第一层:物理层(Physical Layer)

该层是网络通信的数据传输介质,由连接不同结点的电缆与设备共同构成。

  • 主要跟功能是:利用传输介质为数据链路层提供物理连接,负责处理数据传输并监控数据出错率,以便数据流的透明传输。
    • 传输数据的单位是比特(Bits)
  • 机械性能:接口的形状,尺寸的大小,引脚的数目和排列方式等;
  • 电气性能:接口规定信号的电压、电流、阻抗、波形、速率好平衡特性等;
  • 工程规范:接口引脚的意义、特性、标准。
  • 工作方式:确定数据位流的传输方式,如:半双工、全双工等。
  • 物理层协议:美国电子工业协会(EIA)的RS232/RS422/RS423等;
  • 国际电报电话咨询委员会(CCITT)的X.25/X.21等;
  • 物理层的数据单位是位(BIT),典型设备是集线器HUB。

这主要是和硬件有关,与软件关系不大。

  • 功能: 负责传输原始的比特流(0和1),处理电气、机械、功能和过程特性,以便在介质上传输数据。
  • 例子: 中继器、集线器、网线、光纤等。

主要功能是:在物理层提供的服务基础上,在通信的实体间建立数据链路连接,传输的数据单位是“帧”,并采用差错控制与流量控制方法,使有差错的物理线路变成无差错的数据链路。

  • 链路层屏蔽传输介质的物理特征,使数据可靠传送。

  • 内容包括介质访问控制、连接控制、顺序控制、流量控制、差错控制和仲裁协议等。

  • 链路层协议有:协议有面向字符的通讯协议(PPP)和面向位的通讯协议(HDLC)。

  • 仲裁协议:CSMA/CD(Carrier Sense Multiple Access with Collision Detection)、Token Bus、Token Ring

  • 链路层数据单位是帧,实现对MAC地址的访问,典型设备是交换机SWITCH。

  • 功能: 在相邻节点之间提供可靠的数据传输,通过帧来封装数据,检测和纠正错误。

  • 例子: 网桥、交换机、网卡等。使用的协议包括以太网(Ethernet)、Wi-Fi、PPP等。

6.3- 第三层:网络层(Network Layer)

主要功能是:为数据在节点之间传输创建逻辑链路,通过路由选择算法为分组通过通信子网选择最适当的路径,以及实现拥塞控制、网络互连等功能。

  • 网络层管理连接方式和路由选择。

  • 连接方式:虚电路和数据报服务。

  • 虚电路是面向连接的,数据通讯一次路由,通过会话建立的一条通路。数据报是非连接的,每个数据报都有路由能力。网络层的数据单位是包,使用的是IP地址,典型设备时路由器Router。

  • 这一层可以进行流量控制,但流量控制更多的是使用第二层或第四层。

  • 功能: 负责在多个网络之间传输数据包,包括路由选择、拥塞控制和网络互联等功能。

  • 例子: 路由器。主要协议包括IP(Internet Protocol)、ICMP(Internet Control Message Protocol)等。

6.4- 第四层:传输层(Transport Layer)

  • 主要功能是:向用户提供可靠地端到端服务,处理数据包错误、数据包次序,以及其他一些关键传输问题。

  • 传输层向高层屏蔽了下层数据通信的细节。因此,它是计算机通信体系结构中关键的一层。

  • 提供端到端的服务,可以实现流量控制、负载均衡。

  • 传输层信息包括端口、控制字和校验和。

  • 传输层协议主要是TCP和UDP。

  • 传输层位于OSI的第四层,这层使用的设备时主机本身。

  • 功能: 确保数据的端到端传输,提供面向连接或无连接的传输服务,并进行流量控制和错误恢复。

  • 例子: TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。

6.5- 第五层:会话层(Session Layer)

建立、管理和终止应用程序之间的会话。

主要功能是:负责维扩两个结点之间的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。

会话层主要内容时通过 绘画进行身份验证、绘画管理和确定通讯方式。一旦建立连接,会话层的任务就是管理会话。

例如:在远程登录时,会话层负责维护登录会话的状态。

  • 功能: 建立和管理会话,控制两个通信系统之间的对话和数据交换。
  • 例子: NetBIOS、SMB(Server Message Block)等。

6.6- 第六层:表示层

主要功能是:用于处理在两个通信系统中交换信息的表示方法,主要包括数据格式变换、数据加密与解密、数据压缩与恢复等功能。

表示层主要是解释通讯数据的意义,如代码转换、格式变换等,使不同的终端可以表示。

还包括加密与解密、压缩与解压等。

  • 功能: 负责数据的转换、加密和压缩,确保一个系统的应用层所发送的数据可以被另一个系统的应用层读取和理解。
  • 例子: SSL(Secure Sockets Layer)、TLS(Transport Layer Security)、JPEG、MPEG等。

6.7- 第七层:应用层(Application Layer)

是参考模型的最高层。

  • 主要功能是:为应用软件提供了很多服务,比如文件服务器、数据库服务、电子邮件与其他网络软件服务。

  • 应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,比如www、FTP、DNS、POP3和SMTP等都是应用层服务。

  • 数据再发送时是数据从应用层至物理层的一个打包的过程,接收时是数据从物理层至应用层的一个解包过程。

  • 从功能角度可以分为三组:

  • 1/2层解决网络通信问题,3/4层解决传输问题,5/6/7层处理对应用进程的访问。

  • 从控制角度可分为二组:

  • 1/2/3层是通信子网,4/5/6/7是主机控制层。

  • 功能: 为应用软件提供网络服务,处理高级应用程序间的通信。

  • 例子: HTTP(Hypertext Transfer Protocol)、FTP(File Transfer Protocol)、SMTP(Simple Mail Transfer Protocol)、DNS(Domain Name System)等。

7- OSI七层模型历史

OSI模型最初是因为美国人的两台机器之间有通信的需求。

7.1- 需求1:

两个硬件之间如何进行通信,具体就是一台发比特流,另一台能够收到。于是就有了物理层:主要是定义设备标准,如网线的接口类型、管线的接口类型、各种传输介质的传输速率等。

它的主要是传输比特流,就是从1/0转化为电流强弱来进行传输,到达目的之后再转化为1/0,也就是我们常说的数模转换。这一层的数据是比特。

7.2- 需求2:

现在通过电线能发数据流了,但是我还是希望能通过无线电波,通过其他介质来进行传输。然后我还要保证传输过去的比特流是正确的,需要由纠正错误的功能。
数据链路层:定义了如何让格式化数据进行传输,以及如何让控制对物理介质的访问。
这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

7.3- 需求3:

现在我能发正确的比特流数据到另一台计算机了,但是当我发大量数据的时候,可能需要很长时间,

例如:一个视频格式的,网络会中断好多次,实际上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的。

那么,我还需要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个发送。
于是,发明了传输层。

比如TCP,是用于发送大量数据的,我发出去一万个包,另一台电脑就需要告诉我是否接收到一万个包,如果缺少3个包,就告诉我是第1001/234/8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。

例如UDP,适用于发送少量数据的。我发20个包出去,一般不会丢包,所以 ,我不管你收到多少,在多人互动游戏中,也经常受到UDP协议,因为一般都是简单的信息,而且有广播的需求。

如果用TCP,效率就会很低,因为它会不停地告诉主机我收到20个包,或者18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包就卡一下,算了,下次再发包更新。

TCP协议是会绑定IP和端口的协议,下面会介绍IP协议。

7.4- 需求4:

传输层是解决了打包的问题。但是如果我有多台计算机,怎么能找到我要发的那台?或者A要给F发信息,中间要经过B/C/D/E,但是中间还有好多节点,如K/J/Z/Y.我怎么选择最佳路径?这就是路由要做的事情。

于是,发明了网络层,也就是路由器,交换那些具有寻址功能的设备所实现的功能。这一层定义的是IP复制,通过IP地址寻址,所以产生了协议。

7.5- 需求5:

现在已经能够给指定计算机发送正确的封装过的信息了,但是用户级别的体验并不是很好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。

于是发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。

7.6- 需求6:

现在我能保证应用程序自动收发包和寻址了,但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,EXE不能在Linux下用,shell在window也也是不能直接运行的。

于是需要表示层,帮我们解决不同系统之间的通信语法问题。

7.7- 需求7:

现在所有必要条件都准备好了,我们可以写个Android程序,web程序去实现需求吧。

8- 映射关系表

在网络通信过程中,存在多种映射关系表,这些映射关系表对于确保数据能够正确、有效地在网络中传输至关重要。
以下是一些主要的映射关系表:

  1. ARP表(Address Resolution Protocol Table)

    • 映射关系: IP地址到MAC地址的映射。
    • 用途: 用于在局域网内部将网络层的IP地址解析为链路层的MAC地址,以实现数据帧的正确传输。
  2. DNS表(Domain Name System Table)

    • 映射关系: 域名到IP地址的映射。
    • 用途: 将便于人们记忆的域名转换为网络中用于定位主机的IP地址。
  3. 路由表(Routing Table)

    • 映射关系: 目的IP地址到下一跳IP地址以及出接口的映射。
    • 用途: 路由器使用路由表来决定如何处理到来的IP数据包,即确定数据包的下一跳地址和发送的出口。
  4. MAC地址表(MAC Address Table)

    • 映射关系: MAC地址到交换机端口的映射。
    • 用途: 交换机使用MAC地址表来决定将数据帧转发到哪个端口,以实现局域网内的设备通信。
  5. NAT表(Network Address Translation Table)

    • 映射关系: 内部(私网)IP地址和端口到外部(公网)IP地址和端口的映射。
    • 用途: 用于在发送数据包时将内部网络的IP地址转换为公网IP地址,实现私网和公网之间的通信。
  6. 端口映射表(Port Mapping Table)

    • 映射关系: 宿主机端口到容器或虚拟机端口的映射。
    • 用途: 在使用容器或虚拟化技术时,用于将宿主机的网络端口映射到容器或虚拟机的特定端口,以实现外部网络与内部服务之间的通信。
  7. 防火墙规则表(Firewall Rule Table)

    • 映射关系: 网络流量特征(如源IP、目的IP、端口号等)到允许/拒绝动作的映射。
    • 用途: 防火墙根据规则表对通过网络的数据包进行检查,以决定是允许还是阻止这些数据包通过。
  8. IP与接口映射表

    • 映射关系: IP地址到网络接口的映射。
    • 用途: 用于确定哪个网络接口应该用于发送或接收特定IP地址的数据包。

这些映射关系表在网络设备(如路由器、交换机、防火墙、DNS服务器等)中维护,对于实现可靠、高效的网络通信至关重要。

9- 图解

9.1- 一张图详解 8 种流行的网络协议

image