有了IP协议,电脑就可以很轻松地把数据传给任意一台其他电脑,而不论它在什么地方。
现在,我们来了解一下网络的分层理论。
我们一直在说的“数据”、“信息”,到底是什么?
电脑虽然诞生于美国,但并不是说电脑认识英文。电脑处理的一切数据、信息,都是用二进制表示的。
归根到底,电脑只是人类的一种工具,不同国家的人可能会通过不同的语言使用它,不同的人可能也会通过不同的应用使用它。
我可能有时下载个软件,有时发个E-mail,有时打开网页看看新闻,有时面目狰狞地打着LOL……
我们所做的这一切,都是不同应用程序提供的功能。应用程序会产生五花八门、各种各样的数据,比如图片、动画、声音、文档等等。相同类型的应用程序之间可以交换数据。比如,我给你发QQ消息,你用微信可收不到。
但是,我们发的消息都是中文或其他有自然语言,电脑可不懂。要使应用程序之间能交换数据,那就要把这些数据“变成”电脑能“看懂”的二进制,才能在网络上传输。
“变”的方法有很多,不过这是应用程序关心的,我们知道会变就可以了。
应用程序之间要传输数据,还需要打开传输数据的“通道”。很多时候,可能还会打开多个“通道”传输数据,不同“通道”之间要互相隔离。
比如我们下载软件,浏览器通常是一个数据通道单线程下载,而下载软件通常是多个数据通道多线程同时下载,速度会更快。
我们前面了解的IP封装、以太网封装,都像快递小哥一样,只关心如何传输数据,还有三个问题不能解决:
一是数据到底是谁,收件人收到数据后该交给哪个应用程序?怎么知道用QQ接收还是用微信接收?你可能会说,IP格式中不是有个Protocol吗?你不是说IP会根据它来区分应该把数据交给谁吗?道理是对的,可是你注意到没有,Protocol只占一个字节,最多只能区分256个应用,这可不够用。
二是怎么保证可靠传输。IP是不可靠的,它只答应“我尽力”,可没拍着胸脯保证过什么,数据传丢了它可不负责。
三是怎么控制传输流量。什么是控制传输流量,我们举个栗子:电脑A的配置很高端,处理速度非常快,电脑B配置较低,处理速度很慢。如果电脑A通过一个应用程序发送大量数据给电脑B,电脑B由于应用程序处理速度较慢,跟不上电脑A的发送速度,导致电脑B会丢弃来不及处理的数据。
显然,还不能直接把应用程序数据交给IP来传输,还需要一个解决这些问题的办法。
这个办法就是应用程序不要把数据交给不靠谱的IP,而是交给一个“传输层”!
传输层并不是像IP一样真正去传数据,而是解决数据传输中可能遇到的问题。比如我们在运输货物之前,需要先协商一些运输中的细节问题,例如哪天开始,一天运多少,途中弄丢了怎么办,等等,是一种高层的设计,而IP、以太网是真正跑运输的人,他们只关心怎么把货送到目的地。
现在,我们就可以画出网络的所有层次了:
这个层次结构共有七层,我们把它称为“OSI七层参考模型”。前面的数字表示第几层,如网络层也可以叫“第三层“。
OSI是国际标准化组织ISO于1984年正式发布的“开放系统互联参考模型”,共有七层。它根据每一层的功能和定义,开发了相应的协议来支持数据传输。
但这个模型实在太复杂了,而且有的功能在不同层被重复定义,同时,它还规定应用层数据必须从第七层到第一层,层层封装,缺一不可。
我们曾经说过,复杂最终都会被简单取代!
网络的出现比OSI发布七层参考模型时间要早得多。1969年,美国国防部下属ARPA(后来改叫DARPA,后来又改回APRA,后来又改叫DARPA)就开始建立APRAnet网络。1973年,DARPA的罗伯特·卡恩和文顿·瑟夫开发出了TCP和IP协议,并应用于APRAnet网络,他俩还做了个有趣的实验来证明。从此以后,大部分网络都遵守TCP/IP协议。直到今天,TCP/IP协议成为了网络的主流协议。
需要指出的是,TCP/IP并不是TCP和IP两个协议,而是基于TCP/IP模型的协议的总称。有时也叫TCP/IP协议族。
TCP/IP模型只有四层,它的应用层包含了OSI模型的应用层、表示层和会话层。其实表示层和会话层都是应用程序要考虑的东西,合并起来合理又简单。
其实说“合并”不太准确,因为TCP/IP模型比OSI模型要早得多。
TCP/IP还把数据链路层和物理层合并为网络接口层,但我们还是习惯分开叫数据链路层和物理层。
相比OSI模型,TCP/IP模型还有个很重要的不同:跨层封装!
什么是跨层封装?就是说,不必一定从应用层向下层层封装,如果不需要哪一层,可以不要!
这就简单、方便太多了!
回忆下ARP协议,没有传输层,也没有网络层,ARP报文是不是直接被以太网封装的!
我们常常看到数据包、报文、帧这些名词,啥意思啊?
报文,是指能够实现某种网络功能的协议封装,与其他层封装没有关系;
数据段,被传输层封装后的叫法;
数据包,被网络层封装后的叫法;
数据帧,被数据链路层封装后的叫法;
但需要说明的是,由于TCP/IP可以跨层封装,所以报文不是只存在于应用层。如ARP报文直接被链路层以太网封装、OSPF报文直接被网络层IP封装,等等。
接下来,我们需要好好讨论下传输层了。
小Q:既然OSI七层参考模型并没有普及使用,那为什么每本网络基础书上都还要让我们学习呢?只学TCP/IP模型不香吗?
欢迎留言讨论。