网络分层模型

最后更新:2018-12-01

图文均来自参考资料

1. OSI参考模型

在OSI 参考模型中,将通信协议中必要的功能 分成了7层。通过这些分层,使得 那些比较复杂的网络协议更加简单化。每个分层都接受由他下一层所提供的特定服务,并且负责为自己的上一层提供特定的服务。

上下层之间进行交互时所遵循的约定叫做“接口”。同一层 之间的交互所遵循的约定叫做“协议”。协议分层就如同计算机软件中的模块化开发。OSI 参考模型的建议是比较理想化的。他希望实现从第一层到第七次的模块,并将它们组合起来实现网络通信。分层可以将每个分层独立使用,即使系统中某些分层发生变化,也不会波及整个系统。因此可以构建一个扩展性和灵活性都很强的系统。 通过分层能够细分通信功能,更易于单独实现每个分层的协议,并界定每个分层的具体责任和义务。这些都属于分层的优点。

而分层的劣势可能就在于过分模块化,是处理变得更加沉重以及每个模块都不得不实现相似的处理逻辑等问题

  • OSI参考模型中定义了每一层的“作用”
  • 定义每一层作用的是“协议”
  • “协议”是约定,其具体内容为“规范”
  • 我们日常所使用的就是遵循各个协议具体“规范”的产品和通信手段

OSI参考模型中各层作用

1.1. 物理层(Physical)

物理层位于OSI的底层,所有其他层的数据最终都必须经由物理层才能发送出去。物理层的功能包括:

  • 硬件规范的定义,如电缆、连接器、无线接收器等的工作方式,网卡、集线器(Hub)等网络设备也工作在物理层。
  • 编码和信号,物理层把计算机中的二进制0和1转换成可以在物理介质上传输的信号。
  • 在把数据转换成信号后(如对于双绞线电缆则是电子脉冲信号),物理层负责信号的实际发送和接收。

网络层关心的是如何把数据从一个设备发送到另外一个设备,这另外一个设备有可能在本地网络中或者在一个很远的网络中。数据链路层关心的是如何把数据发送到本地网络中去。我们平时常说的LAN(Local Area Network,局域网)技术,如以太网(Ethernet)、令牌环网(Token Ring)、光纤分布数据接口(FDDI)和802.11(WiFi)都定义在这一层。 数据链路层又分为两个子层:逻辑链路控制层(Logical Link Control)介质访问控制层(Media Access Control)

数据链路层还有一个重要的概念,即MAC地址,也有人称其为物理地址、硬件地址、以太网地址等。每一个网卡(Network Interface Card)都有一个唯一的MAC地址,数据链路层通过MAC地址来确保数据能够正确被发送到目标设备。MAC地址是一个48位二进制整数,通常的表示方法是用-隔开的6个十六进制整数,如14-FE-B5-B0-2B-96。

1.3. 网络层(Network)

网络层关心的主要是如何把数据从一个设备发送到另一个设备。网络层需要提供三个最基本的功能:地址路由分段和重组。同时还需要一些附加的功能,比如错误处理和诊断。

网络层上最重要的协议IP(Internet Protocol),就是为了这些功能而设计的。目前IP一共有两个版本IPv4和IPv6。两者最主要的区别是使用了不同位数的二进制整数作为地址:IPv4使用32位二进制地址,IPv6使用128位二进制地址。IPv4的地址表示方法一般为用点隔开的4个数字,每个数字的取值范围是0~255,即一个字节的大小,如192.168.1.1。IPv6的表示方法为用冒号隔开的8个字(word,16位二进制),每个字都用十六进制来表示,如2012:0000:4528:7D76:3C2B:05AD:3F57:1C98。

1.4. 传输层(Transport)

传输层提供数据传输的服务。这里的“传输”指的是端对端(End-to-End)或者主机对主机(Host-to-Host)的传输。

传输层上最重要的两个协议是TCP和UDP。TCP是面向连接的协议(Connection-Oriented),UDP是无连接的协议(Connection-Less)。

TCP(Transmission Control Protocol,传输控制协议)

TCP在传输数据之前必须先建立一个连接。TCP做了很多工作来提供可靠的数据传输,包括建立、管理和终止连接,确认和重传。同时TCP还提供分段和重组,流量控制(Flow Control)等。

UDP(User Datagram Protocol,用户数据报协议)

UDP是一种简单的传输层协议,所以它并不能提供可靠的数据传输。简单地说,UDP只是把应用程序发给它的数据打包成一个UDP数据报(UDP Datagram),然后再把这个数据报传给IP。

TCP会把应用程序发来的数据根据需要分成若干个大小合适的TCP段(TCP Segment),而UDP却只是简单地把所有发送来的数据打包成一个UDP数据报,所以我们在编写使用UDP的程序时,不能一次性向UDP写入太多数据,否则可能会导致IP分段的后果。

由于可能有很多应用程序同时在使用TCP/UDP,它们都会把数据交给TCP/UDP,而TCP/UDP也会接收来自IP的、包含指向不同应用程序的数据,所以就需要有一种方法来区别(标识)应用程序,这种方法就是通过端口号(Port)来进行多路复用多路分解。端口号是一个16位的二进制整数,其取值范围是0~65535。

多路复用(Multiplexing) 多路复用是只当应用程序把数据交给TCP或UDP时,TCP会把这些数据分成若干个TCP段,UDP则会产生一个UDP数据报。在这些TCP段和UDP数据报中,会填入应用程序指定的源端口号和目标端口号,源端口号用于标识发送的应用程序(进程),目标端口号用于指明在目标机器上应该接收数据的目标应用程序。

多路分解(Demultiplexing) 多路分解是多路复用的逆过程。当在目标机器上的TCP或者UDP接收到TCP段和UDP数据报时,会检查它们的目标端口号,然后根据不同的目标端口号把数据分发给不同的应用程序(进程)。

1.5. 会话层(Session)

可以把“会话”理解为两个应用程序进程之间的逻辑连接,两个应用程序通过这个逻辑连接在一段时间内交换数据。会话层的作用就是为创建、管理和终止会话提供必要的方法。这些方法一般以API(Application Program Interface,应用程序编程接口)的形式出现。常用的API由NetBIOS(Network Basic Input/Output System,网络基本输入/输出系统)、RPC(Remote Procedure Call,远程过程调用)和Socket API。

会话层还负责管理和确定传输模式。计算机可以由三种模式来传输数据:单向(Simplex)、半双工(Half-Duplex)、全双工(Full-Duplex)。

  • Simplex:数据只可以单向传输。
  • Half-Duplex:允许数据单向传输,但是一个时刻只能有一个方向传输,不能同时双向传输。
  • Full-Duplex:数据可以同时双向传输。

1.6. 表示层(Presentation)

这里的“表示”是指数据的表示。 该层的主要功能:转换压缩加密

工作在表示层的加密协议最常用的是SSL(Secure Sockets Layer)。加密协议并不一定需要工作在表示层,如IPSec(Internet Protocol Security,因特网协议安全)就工作在第三层网络层中。

1.7. 应用层(Application)

这里的“应用”要和应用程序相区别。 当用户使用浏览器来打开网页时,需要利用DNS提供的域名解析服务,来获取网址对应的IP地址,然后再通过另外一个协议HTTP来下载页面内容。在这个过程中出现的两个协议(DNS和HTTP)都是工作在应用层上的协议。

应用层的其他常用协议:

  • FTP:文件传输协议,用来在客户机和FTP服务器之间传输文件。
  • DHCP:动态主机配置协议,DHCP服务器为客户机动态分配IP地址。
  • POP3:邮件接收协议,用于从POP3服务器接收邮件。
  • SMTP:邮件发送协议,用户通过SMTP服务器发送邮件。

OSI模型唯一的缺点就是太复杂了,分层太多,设备厂商都没有能力完全来实现这些内容。所以它被束之高阁,高高挂起。

2. TCP/IP分层模型

OSI七层参考模型中的最上面的三层应用层、表示层、会话层被合并为一个:应用层,协议可以直接面对用户了,例如telnet、FTP、SMTP都是这一层次的。

OSI七层参考模型中的最后两层数据链路层、物理层被合并为一个:链路层,它具有OSI模型的两层功能。

其它的两个层次不变,功能也相同,传输层对应传输层,网络层对应网络互连层。

物理层和链路层也可以分开

它是怎么工作的?

2.1. 物理层

物理层可以理解为硬件层,这个层的东西就是一个硬件的网口,phy 就是这个东西,这里的网络 pc 和交换机通过 phy连接,交换机也是通过 phy 和云连接。网络数据也是通过 phy 发送出去的。

物理层负责0、1 比特流(0/1序列)与电压的高低、逛的闪灭之间的转换

PHY(英语:Physical),中文可称之为端口物理层,是一个对OSI模型物理层的共同简称。

2.2. 数据链路层

这一层就涉及了一些软件的东西了,加入了全球唯一的 MAC 地址,这一层确定了 每个网络设备的 MAC 地址,正常我们 PC 发送数据的时候,可以通过 MAC 地址让对方知道自己是哪个设备,告诉别人我是谁。

物理层完成了数据的传输,还需要对0和1的定义进行规定(类似低电平为0,高电平为1),同时在传输0,1之后还需要对01进行分组如8bit为一个字节多少字节为一个包之类。这就是链接层的功能。

Ethenet 和 Wifi 基本就是属于这个层次。所以 wifi 协议其实就是解决的一个链路和物理层的问题,在更往上的网络层和传输层一般就是 TCP/IP 协议。

2.3. 网络层

将数据传输到目标地址;目标地址可以使多个网络通过路由器连接而成的某一个地址,主要负责寻找地址和路由选择,网络层还可以实现拥塞控制、网际互连等功能

在这一层,数据的单位称为数据包(packet),这个层次就引入了 ip 协议,我们设备的 MAC 地址唯一的,但是 IP 地址并不保证需要唯一,一台设备可能有几个 IP 地址。

网络层协议的代表包括:IP、IPX、RIP、OSPF等

2.4. 传输层

只在通信双方的节点上(比如计算机终端)进行处理,而无需在路由器上处理,传输层是OSI中最重要、最关键的一层,是唯一负责总体的数据传输和数据控制的一层;

传输层提供端到端的交换数据的机制,检查分组编号与次序,传输层对其上三层如会话层等,提供可靠的传输服务,对网络层提供可靠的目的地站点信息主要功能

在这一层,数据的单位称为数据段(segment)

到这个层次,就可以通过 socket 来发送数据了。还包装了一些简单的协议,比如 TCP,UDP。

有了MAC地址和IP地址,我们已经可以在互联网上任意两个设备上建立通信了。接下来的问题是,如果一个设备有多个任务需要进行网络通信的时候,我们如何分配这些数据,让多个任务能够只使用自己对应的数据呢?

传输层的作用就是建立一条规范,使得两台设备上多个任务之间的相互通信能够正常进行,而不需要区分数据到底是来自于哪个程序而能直接接收。这个实现方式就是,我们添加了一个参数,这个参数被称为“端口”(port)。每个任务拥有自己 port,只接受对应 port 的数据,以此来区分数据。

2.5. 应用层

为应用程序提供服务并规定应用程序中通信相关的细节,例如HTTP,FTP。

举例来说,TCP 协议可以为各种各样的程序传递数据,比如 Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。

经过上面的层次封装之后,如果我们要发送数据就变成了这样。

3. 参考资料

https://mp.weixin.qq.com/s?__biz=MzAxMTkwODIyNA==&mid=2247492473&idx=1&sn=37b264a13cb8df0b6daa353e4d5dba32

https://www.huaweicloud.com/articles/7a131ec5aab5d8e9e178f9c03dc478d1.html

https://zhuanlan.zhihu.com/p/57946772

Edgar

Edgar
一个略懂Java的小菜比