在计算机网络领域,有两个非常重要的网络模型—— ISO/OSI参考模型 和 TCP/IP协议模型 。
ISO/OSI参考模型,是一个具有 7层 协议结构的开放式系统互联模型,并不基于某个特定的协议集而设计,而是一套普遍适用的规范集合,更偏向于理论层面,是其它各类协议模型的理论基础。与OSI模型相关的协议实际应用很少,但该模型本身具有较高的参考价值。
TCP/IP协议模型,主要基于实践而来,先有协议实现再有模型,模型只是对现有协议的描述,因此模型与协议非常吻合,在实际中也运用最为广泛。
一、网络模型
1.1 OSI参考模型
OSI参考模型一共七层,下层为上层提供服务:
从上图可以看出,数据流动是 从上层往下层流动 :
- 数据在 传输层 被附加上“TCP/UDP首部”,然后传送给 网络层 ;
- 数据在网络层附加“IP”首部,然后传送给 数据链路层 ;
- 数据在数据链路层又附加上“Mac头”,最后由交换机广播到整个子网内;
- 如果目标Mac地址不在同一子网内,则由路由器进行转发,路由器负责连接多个不同的子网;
- 最后,目标子网的网关接收到请求后,发现目标电脑的Mac地址在自己的子网内,于是再通过交换机在自己的子网内广播,最终目标电脑接收到报文。
1.2 TCP/IP协议模型
TCP/IP协议模型一共五层(有时会将数据链路层和物理层合并成一层,统称为网络接口层),它与OSI参考模型的对应关系如下:
二、分层详解
我们自底向上来看各层的核心功能和常见协议。
2.1 物理层
物理层,负责传输0/1电信号,对应物理上的电路通信设备,比如光纤、电缆等等,数据在这一层完全以0/1电信号的方式进行传输。
2.2 数据链路层
数据链路层,其核心是 以太网协议 ,负责组包和解析0/1电路信号,将一组电信号封装成一个数据包——帧(frame),每个帧分成两个部分:标头(head)和数据(data)。标头包含一些说明性的东西,比如说发送端Mac地址、接收端Mac地址和以太网类型等等。
以太网协议规定:接入网络里的所有设备必须得包含网卡,而每个网卡都有一个Mac地址(48位的二进制),Mac地址在网卡出厂时就确认了,是这个网卡的唯一标识。
我们通过
ifconfig
命令看到的物理地址,就是这块网卡的Mac地址,比如1B-2A-1C-90-7A-9C
这种形式。
举个例子来理解下数据通过以太网协议的发送过程,假设A电脑要往B电脑发送数据:
- 首先,A电脑需要通过网卡将数据发送到交换机,数据包中会携带源Mac地址(A电脑)和目标Mac地址(B电脑);
- 交换机本身连接了这个子网内的所有设备,所以它会将数据包广播给当前子网内的所有电脑;
- 每台电脑都通过网卡接收数据,如果发现目标Mac地址与自己的网卡Mac地址一致,就接收数据。
但是上面这种广播的方式,仅适用于一个子网(局域网)内的电脑,那么不同子网之间的电脑如何通信呢?这就要依赖网络层协议了。
2.3 网络层
网络层,其核心协议是 IP协议 。IP协议规定:每一个网卡都有一个IP地址,IP地址有IPv4和IPv6两个版本,目前广泛使用的是IPv4,由32个二进制数字组成,一般4个十进制数字表示,范围从0.0.0.0
到255.255.255.255
。
我们要判断两台机器,比如192.168.0.1
和192.168.3.5
,是不是属于同一个子网,需要使用 子网掩码 分别与IP地址进行 与运算 ,如果前N位结果都相同,则说明属于同一个子网:
11000000.10101000.00000000.00000001 # 192.168.0.1
11111111.11111111.11111111.00000000 # 这里使用24位掩码
=11000000.10101000.00000000.00000000
11000000.10101000.00000011.00000101 # 192.168.3.5
11111111.11111111.11111111.00000000 # 这里使用24位掩码
=11000000.10101000.00000011.00000000
上述192.168.0.1
和192.168.3.5
分别与24位的子网掩码255.255.255.0
进行与运算,运算结果的前24位值不相同,说明这两个IP不属于同一个子网。
有了网络层的IP地址之后,两台在不同子网内的电脑就可以通信了。这里补充一下:数据链路层有一个非常重要的 ARP协议 ,通过ARP协议,一个子网内的所有设备都可以通过广播的方式,知道其它设备的MAC地址和IP的映射关系。
还是以A电脑发送数据到B电脑为例:
- 首先,A电脑通过网卡发送数据,数据包里包含了自己的IP地址和目标机器的IP地址;
- 数据包首先到达交换机,当交换机发现目标Mac地址不在自己的子网内,就会将数据包交给路由器;
- 路由器有多块网卡,连接了不同的子网,所以它会根据目标IP找到对应的子网,然后将数据包交给该子网的交换机;
- 最后目标子网的交换机,将目标Mac地址广播,每台电脑都通过网卡接收数据,如果发现目标Mac地址与自己的网卡Mac地址一致,就接收数据。
通过上图可以看到,交换机工作在数据链路层,通过MAC地址寻址;路由器工作在网络层,通过IP地址寻址。
2.4 传输层
一台主机上的很多程序都会通过一个网卡收发数据,那么网卡怎么知道收发的数据是对应哪个程序的呢?这就要依靠传输层了。
传输层,主要是提供不同主机上的进程之间的逻辑通信(端到端的通信)。传输层寻址,最重要的就是进程的 端口号 了。我们熟悉的TCP/UDP协议就是传输层的协议。
比如,A机器发送数据包到B机器的某个指定端口,那么B机器上监听该端口的程序,就可以从这个端口获取需要的数据。
TCP(Transmission Control Protocol 传输控制协议) :是一种 面向连接 的、 可靠 的、基于字节流的传输层通信协议,是为了在不可靠的互联网络上提供可靠的端到端字节流而设计的一个专门协议。
UDP :是一种 面向无连接 的传输层协议。
后续章节,我会专门详细讲解TCP协议。
2.5 应用层
传输层的TCP/UDP等协议,可以通过端口寻址的方式传输数据,但是目标程序接收到数据之后,该怎么来解释这些数据呢?
比如说,邮件程序怎么处理?网页程序怎么处理?所以,针对各种不同的应用程序,都是定义有不同的应用层协议的。最常见的HTTP协议、SMTP协议等,都属于应用层协议。
在TCP/IP协议模型中,应用层对应OSI参考模型中得包含了会话层、表示层和应用层。
三、总结
本章,我对计算机网络的两种模型——OSI参考模型和TCP/IP协议模型进行了讲解,重点分析了各分层的主要作用以及常见协议。从下一章开始,我将讲解各层核心的网络协议。