哈喽,大家好呀,我是呼噜噜,好久没更新文章了,还记得当初在学校学习网络的岁月,直接上来就是各种分层模型,各种协议,各种参数配置,天花乱坠,只能死记硬背,但很容易就忘记了。
今天我们就来讲讲,计算机网络为什么要分层?分层模型有哪些?网络各层的作用?并手画了多张动图帮助大家理解,全程干货满满,通俗易懂。
我们知道在计算机网络中一般有OSI七层模型、TCP/IP四层模型和TCP/IP五层模型,这些模型将复杂的网络通信过程划分为不同的层次,每一层次都有其特定的功能和协议,共同协作完成网络通信。那这些模型分别是什么、相互之间有什么区别呢?
OSI七层模型产生的历史
为了让世界上各个国家或地区,各个不同计算机厂家,生产出的各个不同体系结构的计算机设备,各种网络协议,能够互相通信(这是一个非常复杂的过程)。
国际标准化组织ISO于1977年提出了"开放系统互联参考模型",即著名的OSI模型, Open System Interconnection Model,一个试图使各种不同的计算机或者设备在世界范围内互连为网络的标准模型,使得计算机所依赖硬件和软件技术跨越地理和政治界限协同工作,允许两个独立系统通过基于当前操作层的标准化接口或协议进行通信,来在更大的范围内建立计算机网络
OSI模型包括七个层次,自上而下依次为:应用层(Application Layer)、表示层(Presentation Layer)、会话层(Session Layer)、传输层(Transport Layer)、网络层(Network Layer)、数据链路层(Data Link Layer)、物理层(Physics Layer)
将计算机网络进行分层,是为了简化网络设计和实现的复杂性,将复杂的通信过程分为若干个相对独立的层次。每一层都负责特定的功能,进行跨软件和硬件组件封装每种类型的网络通信,例如数据格式化、数据传输控制、路由选择等,这样较高层可以直接使用较低层技术,而不必关心底层的实现细节
TCP/IP四层模型和TCP/IP五层模型
我们再来看看,什么是TCP/IP四层模型和TCP/IP五层模型,它们其实都和OSI七层模型有关
OSI模型提出时,英特网已抢先在全世界范围内广泛流行起来,全部推倒重来已不可能,它使用TCP/IP协议族,通过与OSI模型的结合,从理论上补足了⽹络接⼝层的缺失,最终演变成如今的TCP/IP四层模型,用于从理论上描述互联网协议(IP)的工作方式。它包括四个层次:应用层、传输层、网络层和网络接口层,其中应用层由OSI模型的应用层、表示层、会话层合并而来,网络接口层由OSI模型的数据链路层和物理层合并而来。
OSI七层模型虽然是理论上标准,但既复杂⼜不实⽤,部分功能在多个层次中重复出现,TCP/IP四层模型则是个更为实用的模型,也是如今事实标准,但最下⾯的⽹络接⼝层并没有具体内容,所以我们用来学习或者讲解的话,一般都采用TCP/IP五层模型,它在TCP/IP四层模型基础上,将网络接口层重新划分为数据链路层和物理层,更接近实际应用的网络结构。
本文也将用TCP/IP五层模型来讲述,许多初学者不理解这些层为什么要这样划分?我们接下来将这些层串起来,看看他们是如何互相配合作用的。
物理层
物理层,主要规定网络的传输媒介的物理特性,来传递0和1的电信号,即它负责在传输媒介上传输原始比特流。物理层传输的单位是比特,比如2台主机直接通过双绞线电缆来连接,传递信号,但是如果随着网络中加入的主机变多,每台直接相连,会让接口数和网线数几何式上升,布线变得异常复杂。所以引入中间设备,每个主机只需和这个中间设备相连即可,比如总线、集线器等,当然这个中间设备需要足够的稳定,不然一旦挂了,会影响整个网络。
物理层确定传输媒介的接口特征:
物理层连接多个电脑设备的常用传输媒介有:集线器、同轴电缆、双绞线电缆、光纤、光缆、无线电波等,这些媒介严格上不在物理层协议之内的而是在物理层协议之下
另外不同的传输媒介,需要选择合适的编码方式以及调制技术,来将原始比特流变换成相应的电信号,以保证数据的可靠传输和抗干扰能力
数据链路层
数据链路层,主要是解决数据包在一个网络或一段一段的链路上可靠传输问题。在物理层我们把各个主机物理上连在一起,现在需要解决的是信号如何传递给对应主机,这个时候就需要来标识网络中的每一个主机,这个叫做网卡(MAC)地址,是硬件的唯一标识符。所以数据链路层也被称为MAC层
MAC地址: 设备的硬件地址,也是网络中计算机设备的唯一标识,12位十六进制的数,它由设备出厂时就决定了,一般无法修改。比如07:00:20:0A:6C:6D就是一个MAC地址,其中前6位16进制数07:00:20代表网络硬件制造商的编号,即组织唯一标识符OUI,它由IEEE分配,而后6位16进制数0A:6C:6D代表该制造商所制造的某个产品的系列号,即扩展唯一标识符EUI。以此来保证世界上每个以太网设备都具有唯一的MAC地址
集线器功能比较简单粗暴,只能将信息广播到整个网络的所有主机上,各个主机在通过消息中的MAC地址,来确认是否是发给自己的消息,这样既不安全也浪费网络的带宽。所以在数据链路层采用交换机,自学习维护一个转发表,来转发帧,记录消息从哪里来,到哪里去,来实现主机接入控制
数据链路层还解决了数据包的封装格式问题,将数据包封装成帧,同时负责建立和管理节点间的链路,通过各种控制协议,实现差错控制
数据链路层传输单位是帧frame,每帧的组成是由帧头、数据、帧尾组成:
数据链路层还实现了透明传输,不必考虑物理层如何实现比特传输的细节,这个由物理层进行保证
透明传输是指不管所传输的数据是什么样的比特组合,都应当能够在链路上传送。尽可能地屏蔽掉不同传输媒体和通信手段的差异。通俗点讲,就是链路层就“看不见”有什么妨碍数据传输的东西
常用协议有:以太网(Ethernet)、高级数据链路控制协议HDLC、点对点协议PPP等,常用设备有:网桥、交换机
网络层
网络层,对应OSI模型的网络层,提供主机间的通信服务,负责数据包在多个网络之间的路由和寻址(IP 地址),确保数据可以在不同网络间传输;也叫网际层或IP层
在数据链路层,我们实现了在单个网络中网络的通信,但在世界上各个不同的地理位置上,有几十亿个设备互相组成大大小小的异构网络,要想把它们连在一起,交换机+MAC地址就远远不够了,IP互联网协议就应运而生,提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异,来解决多网络互连的问题
IP互联网协议,是TCP/IP协议栈中最核心的协议之一,通过IP地址(逻辑地址),来标识网络和网络中的各主机,实现了网络通信的面向无连接和不可靠的传输功能。IP地址可以表达网络中的子网的概念(子网掩码)
以常见的IPv4协议为例,IP地址共32位,分成了四段如192.168.0.1,IP地址得向IANA机构申请,一旦分配后一般不会改变,IPv4总共有43亿个地址,由于欧美的先发优势,分到的IP地址资源非常丰富,我们国内就严重不足,早在2011年IPv4地址就被分配完了。如今的解决办法,是采用NAT技术或者IPv6(增加IP地址长度)
网络层传输单位是包packet,在数据链路层的帧基础上,继续封装数据包成IP数据包
网络层还有一个作用就是,路由选择,通过路由选择算法,为数据包选择最适当的路径,控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接,将信息从一个网络设备传送到另一个网络设备
常用设备:路由器,主要用来连接不同的网络时,交换机无法再维护庞大的转发表,而路由器会自动⽣成路由表,依据路由表转发数据包⾄下⼀个网络
路由器的每个端口都会有一个自己的MAC地址。路由器能将一个IP分配给超多个主机使用,主机对外ip也是同一个。而交换机是可以将不同的主机连接起来,对外表现的IP也可各有不同;交换机隔离冲突域,但不隔离广播域,而路由器既隔离冲突域又隔离广播域,不会转发广播数据,减少广播风暴和安全漏洞。路由器还提供防火墙的服务
常用协议:IP(IPv4、IPv6)、地址解析协议ARP、网际控制报文协议ICMP、网际组管理协议IGMP等
传输层
传输层,对应OSI模型的传输层,建立主机端到端的连接,为主机中的进程之间通信,提供数据传输服务,为应用层提供端到端可靠且透明的数据传输服务,包括全双工或半双工、流控制和错误恢复服务,确保数据能完整的传输到网络层。
建立主机端到端的连接,这里的端是端口port,当通过网络层获取IP地址后,数据包可以通过IP地址找到对应的主机,但是主机一般是多进程,每一个进程都是一个任务,那么如何确定是哪一个任务?
所以引入端口的概念,当进程需要网络通信服务时,向操作系统申请一个端口,通过端口号来标识这个进程,从而让网络中数据包,分辨出主机中哪一个进程是接收者
传输层主要有两个协议:
为什么在这层引入这2个协议呢?
这是因为在网络层上,IP协议没法区分端口,UDP协议在IP协议的基础上增加了源端口和目的端口字段,这样就可以区分端口了,另外IP协议又是无连接不可靠的,传输数据容易差错,引入TCP协议,通过三次握手四次挥手等一系列机制,来确保数据的可靠传输
传输层有复用和分用的功能,一个主机可以同时运行多个进程,应用进程又可以利用传输层传送应用层报文
应用层
应用层,是最上层,也是我们用户能够直接接触到的,比如手机、电脑、各种家庭设备等等,它对应OSI的应用层、表示层和会话层
主要专注于为用户提供网络服务,直接面对应用程序,如文件传输、电子邮件、远程登录等,它并不需要关心数据是如何传输的,但需要数据的格式进行转换表示,让目的应用程序能看懂数据的内容
常用应用层的协议有:网络请求协议HTTP、文件传输协议FTP、简单邮件传输协议SMTP、域名解析协议DNS等
应用层传输单位是报文message,是对传输层的数据包进一步封装。
我们再来看看,TCP/IP模型的应用层对应OSI的应用层、表示层和会话层,分别有什么作用:
最后笔者再吐血画了张图,帮助大家快速回顾,网络的各个分层的作用和重点信息:
补充:数据是如何传递的?
在上文,我们分别介绍了网络的各层的特点,其中每层的数据单元大家是不是比较模糊,我们这就梳理HTTP报文传输过程,来将这些全部串起来,来体会在TCP/IP协议的数据封装和分用过程中,数据包是如何网络各层中传递的
本文这里以一个HTTP请求的传输为例,请求从HTTP客户端(如浏览器)和HTTP服务端应用(比如QQ邮箱、知乎)的传输过程,如下图所示:
数据在客户端发送时在经过每一层的时候都要被该层对应的协议包装(添加上对应层的头部,其中包含了协议标识),这个过程叫封装;而到达终端的时候,又要被一层一层的解包,这个过程叫分用。
另外在网络传输中,网络包都必须是完整的,可以没有上层只有下层,但一定不能只有上层而没有下层,基础不牢,大厦不稳
理解这些网络分层模型,会让我们对计算机网络的世界有更宏观的认识,后续再配合抓包工具,会对于我们进行网络的学习与实践,有非常不错的帮助。