时至今日,互联网已经是大家日常生活中不可或缺的一部分,购物、点餐、刷剧、网课,已经融入了我们生活的方方面面。但网络具体是怎么工作的呢? 特别是我们具体从事软件研发、ICT行业的同学,理解和掌握这个我们产品运行的基础设施尤为必要。
本文,我们会力争用最简单易懂的方式,弄清网络协议的地基:OSI七层模型
和 TCP/IP四层模型
网络的起源
要说 OSI 七层模型,我们首先还是要回顾下网络技术本身的发展和渊源。
现今的网络技术,其实最初是军事目的,萌芽于美苏争霸的冷战背景下。1957 年苏联成功发射第一颗人造卫星,引起美国恐慌,并成立了APRA(Advanced Research Project Agency,美国国防部高级研究计划局)。
1961 年,苏联又成功试射了 R-16 洲际导弹,使核打击美国本土成为可能。为了应对可能来临的攻击,美国国防部授权 APRA 研发一种 “分布式”的军事指挥系统。
1966年,这个系统的雏形,被命名为 ARPANET (阿帕网),它也就是现代互联网的前身。
1969年,美国国防部正式对 ARPANET 开始商业招标,BBN公司中标,并在同年组建了研发中心。
1969年底,第一个 ARPANET 诞生,将加利福尼亚州大学洛杉矶分校、加州大学圣巴巴拉分校、斯坦福大学、犹他州大学四所大学的 4 台大型计算机进行了互联。人类社会开始进入 “网络时代”。
在 ARPANET 的继续演进过程中,网络协议的需求被提出,以解决不同节点间的信号识别问题。最开始建立的网络协议叫 NCP (net control protocol)
1977年,为了解决 NCP 本身要求同构系统的缺点,以及支持的主机数量有限,提出了传输控制协议 TCP V1和V2版本。
1978年,TCP V3版本基于分层思想,将原先的协议分为了TCP协议和IP协议。前者负责可靠传输,后者负责寻址互联。并进一步演进到稳定的V4版本。
到1984年,美国国防部将 ARPANET 划分为军用和民用两部分。Internet 至此诞生
同样在1984年,为了解决不同系统间的互操作问题,国际标准化组织 ISO, 提出了 OSI (Open System Interconnect)开放系统互联模型,并大力推广。
与此同时,Unix操作系统中捆绑了TCP/IP协议,并随着Unix系统的推广流行,TCP/IP被后续各种操作系统支持,TCP/IP的四层模型成为在实际中被采用更多的实现。
但 OSI 七层模型和 TCP/IP 四层模型虽然定义不同,但基本上是可以匹配对应的。OSI 模型更偏理论,TCP/IP则实际采用更多。
OSI七层网络模型
下面我们来具体说明 OSI 七层模型是如何划分,每一层具体的作用和它所处的角色。
物理层
现代计算机网络技术的基础,其实最底层还是数字电路技术。也就是将电磁波形信号中的电压位对应的高电平信号和低电平信号,处理为二进制中的1和0。也就是二进制中的位 Bit。 我们在电脑、手机上的各种操作,最后通过网络传送出去的,最终实际上就是一连串的二进制信号bits,也就是比特流。
所以物理层的作用,处理的就是物理意义上的连通,通过网卡、网线,或者光纤、无线电磁波信号等,把我们当前使用的设备,跟目标主机之间的通信通道建立起来。通过这个通道,把比特流传导到对端。
数据链路层
但是比特流只是一串二进制的信号,这串信号要发去哪里,物理层其实是不知道的。这就是数据链路层的作用了:
-
在这一层,首先会把二进制的比特流,以8位一组转换为字节(1个字节对应8位),字节也就是我们计算机存储的基本单位。 按字节分组组织好的数据,定义上把这个叫做帧(frame)。链路层的第一个作用,是对数据进行重组,将比特转换为帧。
-
另一个链路层的关键作用,还包括MAC地址的添加。用来标记要发送的数据去到哪里。 这里的mac地址,也叫网络物理地址,是我们每一个网卡,在网卡出厂的时候就被烧录进去的一个唯一地址,不可变更。通过这个唯一的地址,我们就能知道这个数据具体是要发给谁的。就像写信时我们要有个地址一样,这样信件才能知道发到哪里。 但是一开始如果并不知道通过物理层连接的这个设备的mac地址, 就还需要寻址。 寻址是通过寻址协议(ARP),先发送一个广播消息,带上自己的mac地址和从网络层拿到的IP地址,在当前网络中询问要访问的目标IP对应的MAC地址。而对应的目标,在收到广播消息后,就会根据收到消息中的源mac地址,将自己的mac地址发送给他,这样,原来的发送方拿到目标mac地址后,就能够完成数据帧的封装,并根据地址进行正确的传递。
这一层中,通常会存在二层交换机在当前网络中,用来进行消息的转发。
所以数据链路层的主要作用就是帧的封装,以及mac寻址。(而通过交换机,还能完成一些差错检测和纠正,以及流量控制的目的)
网络层
在链路层我们说的寻址,是要在同一个网络下,通过广播喊上一嗓子,对方能够收到,然后才能把mac地址告诉你。但实际中我们访问互联网,目标服务器和自己相隔十万八千里,这时要怎么找到对方并完成通信呢?
这时就有了不同网络的概念,互联网实际上是由大大小小各种各样不同的网络构成的。在不同网络之间完成通信,你的数据可能会经过很多个不同网络的计算机才能到达对端,同时我们还要找出最快速的路径来让传输的效率更高。
所以,我们的电脑要联网,其实都有一个IP地址,相对mac地址对应物理地址,IP地址是逻辑地址。ip地址按照IP协议定义,我们目前常用的是IPV4,也就是我们常见的四段十进制点分数字(形如192.168.101.11这样),对应到二进制,它实际是一个32位的二进制数串。 当然,现在因为IPV4地址已经用尽,目前网络IP也在向128位的IPV6转化,但相当长时间内,IPV4还是会继续使用。
在这32位的IP中,会同时标明当前电脑所在的网络号和主机号。而区分网络号和主机号,是IP地址中子网掩码的作用(具体IP协议的梳理理解,我们后续文章再总结)
而这里就是网络层的主要作用,会把IP地址封装到数据包中,也就是这一层经过封装的数据叫做包(package)。会包括源IP和目标IP,经过下一层链路层的继续封装,补上MAC地址,就会发送到当前网络的默认网关(也就是默认路由),默认网关收到这个包后,如果发现目标地址不是当前网络的,会通过保存的路由表来选择最优的路径来进行数据包的路由转发。经过一系列的转发,终于到达目标网络,再由目标网络的网关将收到的这个数据包,转换成帧,最后转发给目标主机。
所以,网络层,主要是完成数据包的封装并进行路由转发。在整个网络通信过程中,极为关键的一层。
传输层
之前几层我们讨论的数据传输是从主机到主机,但我们在计算机上运行着很多不同的程序,听着歌,开着QQ,打着游戏… 这些不同的程序都会产生网络通信,那这些传输的数据都怎么正确区分,让不同程序处理各自所需要的数据呢?
这就是传输层要做的。操作系统会通过端口来对应不同的应用程序,不同应用对应的数据,加上它对应的端口封装起来,这样封装的数据叫做段(segment)。 在段中主要就是添加上了源端口,和目的端口。 此外,段的作用,还有一点,就是应用要处理的数据可能会比较多,要保证数据处理的连贯性和完整性,不可能等所有数据都拿到以后再一次性处理,所以传输层还有个作用就是将数据进行分割,一段一段来传输。在传输层有有两个最重要的协议,一个是TCP(Transmission Control Protocol)、一个是UDP(User Datagram Protocol)。主要是完成对数据进行分段、排序、重组。
会话层
从这一层向上,是OSI模型中的上三层,主要是程序层面的处理。在TCP/IP模型中,这三层统一看作一层。
会话层的作用是建立两端通信实体之间的连接,负责通信过程中认证、鉴权以及检查点记录,以便在会话意外中断时还能够继续传输数据。如会话保持、登录信息的记录,断点记录等。
表示层
表示层,主要是为了消除通信两端不同系统之间的一些差异,负责数据的表示和编解码,实现不同系统之间的数据格式转换和表示方式的统一。通俗地说就是完成两个系统翻译部分的工作。另外还包括像数据的加密和压缩、瘦身,也是定义在这一层来完成。
应用层
应用层是我们平时使用各种应用时直接接触的一层。主要负责对用户的操作进行处理,完成用户的应用需求。 比如最常用的互联网协议http协议就在这一层。此外还有像邮件协议SMTP、POP3、文件传输协议FTP、远程登录协议telnet等,都是属于应用层。
用一张图来体现数据在各层的传递如下图
对OSI模型的通俗理解
以上是从技术原理层面对这个模型进行的分析。 如果用一个我们生活中的例子来类比,会更方便理解:
双十一到了,要买一个心心念念的笔记本
- 首先各种比价,找到一个平台,性价比满意,决定在这个平台购买。 这里这个平台,其实就是应用层,满足购物需求。(应用层:具体的应用服务)
- 下完订单,卖家在发货前,肯定会把电脑以及各种配件、赠品重新打包好,确保到你手上时没有损坏。那这个打包、保护的过程,就相当于表示层的工作。(表示层:数据编解码,格式化)
- 在你下订单前,可能还会联系客服,确认赠品,备注发货时间,挑选颜色这些,这个跟客服沟通的过程,就是会话层 (会话层:维持双方的沟通通道)
- 确认无误,商家给你发货,这时要有一个快递公司负责送货,这个快递公司是顺丰或者四通一达,目的都是负责把笔记本安全按时交到你手上。 这里快递公司的作用就是传输层。(传输层:负责数据的可靠传递)
- 快递公司怎么送货呢?当然要知道商家地址和买家地址,并根据地址选择最优路径的快递员取货、送货,这就是网络层 (网络层:负责逻辑寻址和路由)
- 买的笔记本从卖家那里送到了自己所在的区域站点了,这时还会有个快递小哥送货上门,通常都会打个电话,联系你是不是在家。通过电话确定你的具体位置,相当于物理寻址。这是数据链路层 (链路层:物理寻址并传递数据帧)
- 最后,整个送货的过程中,会用到卡车、送货面包车、小哥的三轮和双腿,这就是物理层,具体的交通工具 (物理层:物理介质传递比特流)
通过这样的类比,我们是不是就比较清楚 OSI 七层模型具体怎么工作了呢?