自学 Linux 14—Linux 用户层网络编程之 TCP/IP 协议族简介— OSI 网络分层介绍
互联网最初是由于军事用途出现的,现在网络己经走进千家万户,成为生活的一部分。联网的各个终端之间能否进行交互的软件基础是网络协议栈,目前主流的网络协议栈是 TCP/IP 协议栈。TCP/IP 协议栈的基本知识,主要包括有:ISO/OSI 的网络模型架构;TCP/IP 网络模型;Internet 协议,即 IP 协议;TCP/IP 模型中的 TCP 和 UDP 协议及 ICMP 协议;地址解析协议 ARP;IP 地址的组成、掩码及建网时如何进行子网划分及端口的含义;主机字节序和网络字节序。
OSI 网络分层介绍
网络结构的标准模型是 OSI 模型,它是由国际互联网标准化组织(International Organization for Standardization, ISO)定义的网络分层模型。虽然目前没有完全按照这种模型实现的网络协议栈,但是这种模型对于理解网络协议内部的架构很有帮助,为学习网络协议提供了很好的参考模型。这个模型般称为ISO/OSI 开放互联模型(ISO, Open System Interconnection Reference Model),在实际中 TCP/IP 协议桟应用更为广泛。
1. OSI 网络分层结构
ISO/OSI 开放互联模型采用 7 层结构,如下图(ISO/OSI 的 7 层网络模型)所示:
在 OSI 的 7 层模型结构中,从纵向即单个主机的角度来看,每一层与本层的上下两层从逻辑上是分开的,如 A 的网络层和数据链路层是分开的。这种方式使得每一层为上一层提供服务,依赖于下层的数据并为上一层提供接口。同时各层之间的规则是相互独立的,例如数据的格式、通信的方式等,这称为本层的协议。
不同主机相同层之间是对等的,例如主机 A 中的应用层和主机 B 中的应用层是相同的层次,这两个层互为对等层,对等层之间的规则是一致的,但实现不一定相同。例如,UNIX 网络协议栈运行在主机 A 上,Windows 的网络协议找运行在主机 B 上,只要它们的规则一致就可以。例如 A 上的 FTP 服务器可以与 B 上的 FTP 客户端实现互相通信。
一个主机上运行的网络规则实现的集合称为协议栈,主机利用协议栈来接收和发送数据。OSI/ISO 的 7 层网络结构模型可以将网络协议栈的不同层的实现划分为不同的层次,将问题简化,方便网络协议栈的实现。同时,7 层模型为网络中不同厂商的软硬件产品的兼容性提出了解决的办法。由于 7 层模型的方式实现起来太复杂,所以并没有一个实际使用的 7 层网络协议栈。
2. OSI 的 7 层网络结构
在 OSI 的 7 层结构中,自下而上,每一层规定了不同的特性,完成不同的功能。共有以下 7 个层次。
█ 物理层(Physical Layer):它规定了物理线路和设备的触发、维护、关闭物理设备的机械特性、电气特性、功能特性和过程,为上层的传输提供了一个物理介质,本层是通信端点之间的硬件接口。本层中数据传输的单位为比特(b)。属于本层定义的规范有 EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45 等,实际使用中的设备如网卡等属于本层。
█ 数据链路层(Data Link Layer):数据链路层在物理介质基础之上提供可靠的数据传输,在这一层利用通信信道实现无差错传输,提供物理地址寻址、数据层帧、数据的检测重发、流量控制和链路控制等功能。在数据链路层中数据的单位为帧(frame)。属于本层定义的规范有 SDLC、HDLC、PPP、STP、帧中继等,实际中的 MAC 属于本层。
█ 网络层(NetWork Layer):网络层负责将各个子网之间的数据进行路由选择,将数据从一个主机传送到另一个主机,其功能包括网际互联、流量控制和拥塞控制等。在本层中数据的单位为数据包(packet)。属于本层定义的规范有 IP、IPX、 RIP、OSPF 等,实际中的路由器属于本层。
█ 传输层(Transport Layer):传输层将上层的数据处理为分段的数据,提供可靠或者不可靠的传输,为上层掩盖下层细节,保证会话层的数据信息能够传送到另一方的会话层(但不一定传送到另一方的应用层)。在传输层中数据的单位为数据段(segment)。属于本层定义的规范有 TCP、UDP、SPX 等。
█ 会话层(Session Layer):会话层管理主机之间的会话过程,包括会话的建立、终止和会话过程中的管理,来提供服务请求者和提供者之间的通信。属于本层定义的规范有 TCP、UDP、SPX 等。
█ 表示层(Presentation Layer):表示层对网络传输的数据进行变换,使得多个主机之间传送的信息能够互相理解,包括数据的压缩、加密、格式的转换等,例如图片数据的发送前压缩和接收后的解压。属于本层定义的有 ASCII、JPEG、MPEG 等标准。
█ 应用层(Application Layer):应用层为应用程序提供访问网络服务的接口,为用户提供常用的应用,例如经常使用的电子邮件应用程序、网络浏览器等都基于本层,在本层之上定义。属于本层定义的规范有 Telnet、FTP、HTTP、SNMP、P2P 等应用层协议。
OSI 的 7 层结构中的底 3 层即物理层、数据链路层和网络层构成了通信子网层,它为网络的上层提供通信服务。需要注意的是,OSI 模型并不是一个网络结构,因为它并没有定义每个层所拥有的具体的服务和协议,它只是告诉我们每一个层应该做什么工作。但是,ISO 为所有的层次提供了标准,每个标准都有其自己的内部标准定义。
3. OSI 参考模型中的数据传输
如下图(OSI 的 7 层参考模型中的数据传输过程)所示为一个运行于主机 A 上的应用程序,通过网络发送数据到主机 B 上的应用程序,数据流通过在主机 A 上由上至下依次经过网络协议桟,通过网络发送给主机 B, 在主机 B 上又自下而上地经过 OSI 的 7 层网络协议结构。
主机 A 的过程是一个封装的过程,数据从应用程序依次经过应用层、表示层、会话层、传输层、网络层、数据链路层和物理层发送给主机 B。
█ 当主机 A 的应用程序需要发送数据时,数据由应用程序调用应用层接口,进入协议栈的应用层。
█ 在网络协议栈的应用层,应用程序将要发送的应用程序数据被协议栈加上应用层的报头,包装成形成应用层协议数据单元,然后将数据传递给协议栈中应用层的下一层——表示层。
█ 在表示层,它不关心应用层传递过来的数据内容,把应用程序发送的数据和网络协议栈应用层头部作为一个整体进行处理,加上表示层的报头。然后,递交到下层会话层。
█ 与表示层类似,在会话层、传输层、网络层、数据链路层协议栈分别将其上层传递的数据加上自己的包头,然后,传递给自己层的下一层。即数据分别又加上会话层的报头、传输层的报头、网络层的报头和数据链路层的报头。在数据链路层,与其他层不一致的地方是还要加上一个数据链路层的尾部,打包成一个数据帧,然后,传递给物理层。数据链路层的尾部通常是数据的校验和,一般采用 CRC16 的校验方式。
█ 在物理层,主机 A 的网络设备将数据链路层传递过来的数据发送到网络上。
主机 B 的过程与主机 A 相反,是一个解封的过程,数据依次经过物理层、数据链路层、网络层、传输层、会话层、表示层和网络层,将主机 B 发送的数据接收和解包,最后数据传递给应用程序。
█ 主机 B 的物理层网络设备接收到数据到来的信号后,将接受到的数据保存下来,然后传递给它的上一层——数据链路层。
█ 数据链路层把从物理层获得的数据去掉头部和尾部后,进行数据校验,发现没有出错,把数据传递给其上一层——网络层。
█ 与数据链路层类似,网络层、传输层、会话层、表示层、应用层分别将从其下一层获得的数据一层层剥去报头,传递给对应的上一层。
█ 最后,主机 A 发送的数据到达主机 B 上的应用程序中。