计算机网络模型概述【OSI七层模型&常见协议】

对于同一台设备上的进程通信,有很多种方式,比如管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程通信,就需要网络通信,而设备是多样的,所以要兼容多种多样的设备,就需要协商出一套通用的网路协议

要完成网络间的通信是比较复杂的,为了确保功能很好地实现,会对所有的网络协议进行分层,本文针对OSI七层参考模型展开讨论。

1. OSI七层参考模型

OSI(Open System Interconnection)七层网络模型是由国际标准化组织ISO提出的一个网络系统互连模型,是网络通信在逻辑上的定义,也可以理解为定义了通用的网络通信规范。数据在网络中传输的过程,实际上是通过下图的封装和解封装的过程,对数据进行一层层的封装,发送方把数据转换成比特流的形式在网络媒介中进行传输,接收方将比特流进行解封装处理,还原数据。

OSI七层参考模型的基础上,还派生出了五层模型TCP/IP四层模型,这三种分层方式的区别如下:

为什么要对网络进行分层?

与软件架构设计相似,要使系统具备高内聚、低耦合、可复用、可扩展等特性。如果没有对网络进行分层,当一个业务或协议需要进行修改时,就可能需要对整个系统进行修改。而对网路进行分层后,就可以很方便地把具有不同功能的模块分离开来,某个模块出现问题只需要修改对应模块即可,其他层还可以继续复用,只要确保各层满足相应的协议即可。

OSI七层模型中各层功能概览:

下面分别对OSI七层模型中的各层功能展开介绍。

1. 物理层

要进行网络通信,首先要解决的问题就是如何在两台主机设备上进行数据(有线/无线)传输,否则通信无从谈起。物理层的作用是在主机之间搭建一条物理链路传输二进制流,为设备之间的数据通信提供传输媒介和互连设备

典型的物理层标准和设备:

物理层介质:双绞线、同轴电缆、光纤、无线电信号等。

局域网物理层:

常见标准:10Base-T、100Base-TX/FX、1000Base-T、1000Base-SX/LX

常见设备:中继器、集线器

广域网物理层:

常见标准:RS-232、V.24、V.35

常见设备:Modem

物理层规定了如何为网络通信实现最底层的物理连接,以及物理设备的机械、电气、功能和过程特性。需要注意的是,网络通信过程中所用的物理媒介(网线、电缆等)并不属于物理层,因为物理层实际上是一种规定,规定这些物理媒介设备在连接网络时的各种参数、规格以及工作方式。但是同时,双绞线、电缆等物理媒介又是物理层的实现。

2. 数据链路层

物理链路连通后的主机之间具备数据传输的基本能力,但物理层是无协议的,传输的是二进制流。而二进制流没有起始和终止标识符,接收主机无法判断何时开始或终止数据的解析;于是在数据链路层对二进制流进行封装成帧(frame),这样主机在接收二进制流时就知道什么时候开始、什么时候结束了。

数据链路层协议有SLIP协议、CSLIP协议、PPP协议等。交换机对帧解码并根据帧中包含的信息把数据发送到正确的接收方,所以交换机是工作在数据链路层的。

每个由包头(head)和数据(data)两部分组成:

其中head包含数据的说明信息,包括发送者、接收者、数据类型

  • 发送者/源地址:6字节
  • 接收者/目标地址:6字节
  • 数据类型:6字节

Data部分的长度,最长为1500字节,最短为46字节。因此,整个最短字节为64字节,最长为1518字节。如果数据过大,则需要分割成多个帧进行传输。

有了数据包的定义,那么计算机是如何标识谁是谁的?如何知道对方的地址的?这就设计到MAC地址和广播。

2.1 MAC地址

以太网规定,连入网络的所有设备都必须具备网卡。数据包的发送地址和接收地址指的就是网卡地址,也就是MAC地址。

MAC地址作为网络中计算机设备的唯一标识,从计算机在厂商中生产出来就被十六进制的数标识为MAC地址,MAC地址理论上是独一无二的。这也是为什么很多软件设备校验设备唯一性时,会用到MAC地址。

MAC地址长度为48位二进制,通常由12位十六进制树表示,前六位是厂商编号,后六位是流水号。

查看MAC地址命令:

1
ifconfig

有了MAC地址,那么两台机器之间是怎么找到对方进行通信的呢?

2.2 广播

在包含四个主机的一个子网中,主机1要向主机4发送一个数据包,数据包中包含接收方的MAC地址。计算机1会向子网中所有计算机都发送数据包(广播的方式),这时子网中的每台计算机(包括主机2和主机3)都会收到这个数据包,然后每台计算机都会把数据包中接收方的MAC地址取出来,与自身的MAC地址进行对比,如果二者相同则接收这个数据包,否则丢弃这个数据包。

3. 网络层

前面介绍了,通过广播机制可以实现在同一个子网内两台主机之间的寻址、通信;我们所处的网络由无数个子网构成,如果现实中的网络通信都通过广播这种原始的方式来实现,那么一台主机发送的数据包将会被全世界所有的主机收到,那将导致整个网络崩溃。为此,解决办法是如果在同一个子网内,就采用广播的方式发送数据包;如果不在同一个子网内,那就通过网关和路由向不同「广播域」/「子网」分发数据包。那就有了网络层,提供网络路由寻址功能。

网络层的作用是规定了通过哪些节点、什么样的网络路径来将数据(数据包)从发送方发送到接收方,向传输层提供最基本的主机到主机的数据传送服务。在网络层中,确定了从节点A发送数据到节点B的网络路径,经过哪些网络节点。网络层既可以建立LAN通信系统,更主要的是可以在WAN网络系统中建立通信,这是因为它有自己的路由地址结构,通过路由协议(或者可路由协议)进行网络通信的路由工作。网络层的协议包括:IP、ICMP和IGMP等协议。

可路由协议(routed protocol):定义数据包内各个字段的格式和用途,对数据进行网络层封装;

路由协议(routing protocol):在路由器之间传递信息,计算路由并形成路由表,为可路由协议选择路径;

网络层引入了一套新的协议来区分不同的广播域/子网,于是就有了IP协议。

3.1 IP协议

IP协议即互联网协议(Internet Protocol)。相对于上面提到的MAC地址,IP地址可以理解为逻辑地址,而MAC地址为物理地址;IP地址是动态分配的、不固定的,MAC地址是固定的。目前广泛采用的IPv4地址,同时IPv6地址正不断发展壮大。

IP发送的数据叫IP数据包,其也包含包头和数据两个部分:

  • 包头:版本,长度,IP地址等信息
  • 数据:IP数据包的具体数据

IP数据包的包头长度为20~60字节,整个数据包的最大长度为65535字节。

IP数据包的”包头”部分的长度为20到60字节,整个数据包的总长度最大为65535字节。

IPv4地址是由32位的二进制数组成,一般把它分成4段的十进制表示,地址范围为0.0.0.0~255.255.255.255。

IP地址分成两部分:网络部分(标识子网)和主机部分(标识主机)。网络部分和主机部分所占用的二进制位数是不固定的。

IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网。如果两个IP的网络部分相同,则说明它们处于同一个子网中。例如192.168.33.1和192.168.33.2,如果它们的网络部分为24位,主机部分为8位,网络部分都为 192.168.33,处于同一个子网中。但如果像192.16.10.1与192.16.10.2,并不知道网络部分和主机部分各几位,就不能确定是否处于同一子网。于是就有了子网掩码。

3.2 子网掩码

子网掩码是用来标识同一局域网中的IP地址信息的,它由32位二进制组成,前一部分都是1,后一部分都是0,例如:11111111.11111111.11111111.00000000,该子网掩码一共有24个1,也可以表示为/24。子网掩码的网络部分全部为1,主机部分全部为0。

比如IP地址为192.16.10.1/24,其中/24表示子网掩码有24个1,且子网掩码中的1均在前面,故该子网掩码为11111111.11111111.11111111.00000000,写成十进制为255.255.255.0;那么该IP地址的网络号为192.16.10,主机号为1

3.3 ARP协议

需要注意的是,在OSI参考模型的分层划分中,ARP协议是位于数据链路层的,而对于TCP/IP协议分层方式中ARP协议位于网络层层,此处为保证内容的连贯性,将ARP协议放在此处介绍。

有了IP协议,就可以判断计算机属于哪个子网了;但在数据链路层是通过MAC地址进行通信的,现在只有目标IP地址,那么如何获取目标MAC地址呢?这就需要用到ARP协议。

ARP 协议是 地址解析协议,即 Address Resolution Protocol,它能够根据 IP 地址获取物理地址(MAC地址)。主机发送信息时会将包含目标 IP 的 ARP 请求广播到局域网络上的所有主机,并接受返回消息,以此来确定物理地址。收到消息后的物理地址和 IP 地址会在 ARP 中缓存一段时间,下次查询的时候直接从 ARP 中查询即可。

3.4 ICMP协议

我们知道IP协议并不能提供可靠传输,即如果发生丢包,IP协议并不能通知传输层是否丢包及丢包的原因,于是就有了ICMP协议。

ICMP协议(Internet Control Message Protocol)主要用于在IP主机和路由器之间传递控制消息。当遇到IP无法访问目标或IP路由器无法按照当前速率转发数据包时,会自动发送ICMP消息,从这个角度看,ICMP协议可以看做是错误侦测和回报机制,帮助我们检查网络状况、确保连线的准确性。

ICMP协议的主要功能:

  • 确认IP包是否成功抵达目标地址
  • 通知在发送过程中IP包被丢失的原因

需要注意的是:

  1. ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议;
  2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6。

我们平时使用的ping命令其实就是使用到了ICMP协议。

4. 传输层

经过数据链路层和网络层的支持,我们已经可以正常进行两台计算机之间的通信了,但是计算机上会同时运行多个程序,比如同时开着QQ和WX,那怎么区分消息是QQ还是WX的呢?这就需要依靠传输层来实现。

通常我们的计算机上运行的不同程序都会分配不同的端口,而传输层的功能就是建立端口到端口的通信,是数据能够传送到不同的应用程序。端口是每个使用网卡程序的编号,每个端口号标识一个可执行程序;端口号是065535之间的一个整数,正好是16个二进制位,01023为系统占用端口,其他应用程序只能占用端口号大于1023的端口。

至此,通过IP+端口号的方式就可以唯一确定互联网中的一个应用程序,进而实现网络间的通信。

传输层主要包含两大协议:

  • TCP协议
  • UDP协议

4.1 UDP协议

UDP协议(User Datagram Protocol,用户数据报协议)就是在数据前面加上端口号。包头部分定义了发送方端口号和接收方端口号,共8个字节;数据部分就是具体内容,总长度不超过65535个字节,正好可以放进一个IP数据包中。

UDP协议提供一种不可靠的数据交付,即UDP协议不保证数据是否到达目标节点;UDP协议是一种无连接的协议,传输之前源端和终端是不需要建立连接的,不对数据报进行检查与修改,无需等待对方应答。

  • 缺点:不保证数据传输的可靠性,会出现分组丢失、重复、乱序等现象
  • 优点:实现简单,具有较好的实时性,传输效率高

4.2 TCP协议

TCP协议(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输协议,TCP协议通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠传输,同时还具备流量控制、拥塞控制等特点。

  • 缺点:实现复杂,消耗更多资源
  • 优点:保证数据可靠传输,具备拥塞控制功能

TCP数据包没有长度限制,理论上是可以无限大的,但是为了保证网络传输的效率,通常TCP数据包的长度不会超过IP数据包的长度,即一般不超过65536字节。TCP协议是非常复杂的,本文不展开介绍。

5. 会话层

会话层建立在传输层之上,利用传输层提供的服务建立和维持会话,负责在网络中的两个节点之间建立、维持和终止通信。会话层利用检验点可使通信会话在通信失效时从检验点继续恢复通信,即对信息的交互实现控制,这种能力对于大文件的传输极为重要。

6. 表示层

表示层向上对应用进程服务,向下接收会话层提供的服务,其主要作用将设备固有数据格式转换为网络标准传输格式。除此之外,表示层还可以对数据进行加密和解密。

7. 应用层

应用层是 OSI 标准模型的最顶层,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务,包括文件传输、电子邮件、远程登录、远程端口调用等。应用层协议包括httpftpsmtpDNS等协议。

7.1 DNS协议

DNS协议(Domain Name System,域名系统协议)是一个将域名和IP相互映射的分布式数据库系统,DNS缓存能够加快网络资源的访问。

DNS 不仅适用于 IPv4,还适用于 IPv6。