计算机⽹络为什么要分为五层结构?其依据是什么?
⼀、实体层
1、什么是实体层
实体层也称为物理层,是参考模型的最低层,也是OSI模型的第⼀层。它实现了相邻计算机节点之间⽐特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关⼼⽹络的具体传输介质。“透明传送⽐特流”的意思是经实际电路传送后的⽐特流没有发⽣变化,对传送的⽐特流来说,这个电路好像是看不见的。
⼆、链接层
1、定义
单纯的0和1没有任何意义,必须规定解读⽅式:多少个电信号算⼀组?每个信号位有何意义?这就是"链接层"的功能,它在"实体层"的上⽅,确定了0和1的分组⽅式。
2、以太⽹协议
早期的时候,每家公司都有⾃⼰的电信号分组⽅式。逐渐地,⼀种叫做"以太⽹"(Ethernet)的协议,占据了主导地位。
以太⽹规定,⼀组电信号构成⼀个数据包,叫做"帧"(Frame)。每⼀帧分成两个部分:标头(Head)和数据(Data)。
"标头"包含数据包的⼀些说明项,⽐如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进⾏发送。
3、MAC地址
上⾯提到,以太⽹数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?
以太⽹规定,连⼊⽹络的所有设备,都必须具有"⽹卡"接⼝。数据包必须是从⼀块⽹卡,传送到另⼀块⽹卡。⽹卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。
每块⽹卡出⼚的时候,都有⼀个全世界独⼀⽆⼆的MAC地址,长度是48个⼆进制位,通常⽤12个⼗六进制数表⽰。
前6个⼗六进制数是⼚商编号,后6个是该⼚商的⽹卡流⽔号。有了MAC地址,就可以定位⽹卡和数据包的路径了。
4、⼴播
定义地址只是第⼀步,后⾯还有更多的步骤。
⾸先,⼀块⽹卡怎么会知道另⼀块⽹卡的MAC地址?
回答是有⼀种ARP协议,可以解决这个问题。这个留到后⾯介绍,这⾥只需要知道,以太⽹数据包必须知道接收⽅的MAC地址,然后才能发送。
其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收⽅?
回答是以太⽹采⽤了⼀种很"原始"的⽅式,它不是把数据包准确送到接收⽅,⽽是向本⽹络内所有计算机发送,让每台计算机⾃⼰判断,是否为接收⽅。
上图中,1号计算机向2号计算机发送⼀个数据包,同⼀个⼦⽹络(同⼀个路由下)的3号、4号、5号计算机都会收到这个包。它们读取这个包的"标头",到接收⽅的MAC地址,然后与⾃⾝的MAC地址相⽐较,如果两者相同,就接受这个包,做进⼀步处理,否则就丢弃这个包。这种发送⽅式就叫做"⼴播"(b
roadcasting)。有了数据包的定义、⽹卡的MAC地址、⼴播的发送⽅式,"链接层"就可以在多台计算机之间传送数据了。
三、⽹络层
1、⽹络层的由来
以太⽹协议,依靠MAC地址发送数据。理论上,单单依靠MAC地址,北京的⽹卡就可以到纽约的⽹卡了,技术上是可以实现的。
但是,这样做有⼀个重⼤的缺点。以太⽹采⽤⼴播⽅式发送数据包,所有成员⼈⼿⼀"包",不仅效率低,⽽且局限在发送者所在的⼦⽹络。也就是说,如果两台计算机不在同⼀个⼦⽹络,⼴播是传不过去的。这种设计是合理的,否则互联⽹上每⼀台计算机都会收到所有包,那会引起灾难。
互联⽹是⽆数⼦⽹络共同组成的⼀个巨型⽹络,很像想象上海和洛杉矶的电脑会在同⼀个⼦⽹络,这⼏乎是不可能的。
因此,必须到⼀种⽅法,能够区分哪些MAC地址属于同⼀个⼦⽹络,哪些不是。如果是同⼀个⼦⽹络,就采⽤⼴播⽅式发送,否则就采⽤"路由"⽅式发送。(“路由"的意思,就是指如何向不同的⼦⽹络分发数据包,这是⼀个很⼤的主题,本⽂不涉及。)遗憾的是,MAC地址本⾝⽆法做到这⼀点。它只与⼚
商有关,与所处⽹络⽆关。
这就导致了"⽹络层"的诞⽣。它的作⽤是引进⼀套,使得我们能够区分不同的计算机是否属于同⼀个⼦⽹络。这套地址就叫做"⽹络地址”,简称"⽹址"。
于是,"⽹络层"出现以后,每台计算机有了两种地址,⼀种是MAC地址,另⼀种是⽹络地址。两种地址之间没有任何联系,MAC地址是绑定在⽹卡上的,⽹络地址则是管理员分配的,它们只是随机组合在⼀起。⽹络地址帮助我们确定计算机所在的⼦⽹络,MAC地址则将数据包送到该⼦⽹络中的⽬标⽹卡。因此,从逻辑上可以推断,必定是先处理⽹络地址,然后再处理MAC地址。
2、IP协议
规定⽹络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。
⽬前,⼴泛采⽤的是IP协议第四版,简称IPv4。这个版本规定,⽹络地址由32个⼆进制位组成。
习惯上,我们⽤分成四段的⼗进制数表⽰IP地址,从0.0.0.0⼀直到255.255.255.255。
互联⽹上的每⼀台计算机,都会分配到⼀个IP地址。这个地址分成两个部分,前⼀部分代表⽹络,后⼀部分代表主机。⽐如,IP地址172.16.254.1,这是⼀个32位的地址,假定它的⽹络部分是前24位(172.
16.254),那么主机部分就是后8位(最后的那个1)。处于同⼀个⼦⽹络的电脑,它们IP地址的⽹络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同⼀个⼦⽹络。
但是,问题在于单单从IP地址,我们⽆法判断⽹络部分。还是以172.16.254.1为例,它的⽹络部分,到底是前24位,还是前16位,甚⾄前28位,从IP地址上是看不出来的。
那么,怎样才能从IP地址,判断两台计算机是否属于同⼀个⼦⽹络呢?这就要⽤到另⼀个参数"⼦⽹掩码"(subnet mask)。
所谓"⼦⽹掩码",就是表⽰⼦⽹络特征的⼀个参数。它在形式上等同于IP地址,也是⼀个32位⼆进制数字,它的⽹络部分全部为1,主机部分全部为0。⽐如,IP地址172.16.254.1,如果已知⽹络部分是前24位,主机部分是后8位,那么⼦⽹络掩码就是
11111111.11111111.11111111.00000000,写成⼗进制就是255.255.255.0。
知道"⼦⽹掩码",我们就能判断,任意两个IP地址是否处在同⼀个⼦⽹络。⽅法是将两个IP地址与⼦⽹掩码分别进⾏AND运算(两个数位都为1,运算结果为1,否则为0),然后⽐较结果是否相同,如果是的话,就表明它们在同⼀个⼦⽹络中,否则就不是。
⽐如,已知IP地址172.16.254.1和172.16.254.233的⼦⽹掩码都是255.255.255.0,请问它们是否在同⼀
socket通信在哪一层个⼦⽹络?两者与⼦⽹掩码分别进⾏AND运算,结果都是172.16.254.0,因此它们在同⼀个⼦⽹络。
总结⼀下,IP协议的作⽤主要有两个,⼀个是为每⼀台计算机分配IP地址,另⼀个是确定哪些地址在同⼀个⼦⽹络。
3、IP数据包
根据IP协议发送的数据,就叫做IP数据包。不难想象,其中必定包括IP地址信息。
但是前⾯说过,以太⽹数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加⼀个栏位呢?
回答是不需要,我们可以把IP数据包直接放进以太⽹数据包的"数据"部分,因此完全不⽤修改以太⽹的规格。这就是互联⽹分层结构的好处:上层的变动完全不涉及下层的结构。
具体来说,IP数据包也分为"标头"和"数据"两个部分。
"标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太⽹数据包后,以太⽹数据包就变成了下⾯这样。
IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最⼤为65,535字节。因此,理论上,⼀个IP数据包的"数据"部分,最长为65,515字节。前⾯说过,以太⽹数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成⼏个以太⽹数据包,分开发送了。
4、ARP协议
关于"⽹络层",还有最后⼀点需要说明。
因为IP数据包是放在以太⽹数据包⾥发送的,所以我们必须同时知道两个地址,⼀个是对⽅的MAC地址,另⼀个是对⽅的IP地址。通常情况下,对⽅的IP地址是已知的(后⽂会解释),但是我们不知道它的MAC地址。
所以,我们需要⼀种机制,能够从IP地址得到MAC地址。
这⾥⼜可以分成两种情况。第⼀种情况,如果两台主机不在同⼀个⼦⽹络,那么事实上没有办法得到对⽅的MAC地址,只能把数据包传送到两个⼦⽹络连接处的"⽹关"(gateway),让⽹关去处理。
第⼆种情况,如果两台主机在同⼀个⼦⽹络,那么我们可以⽤ARP协议,得到对⽅的MAC地址。ARP协议也是发出⼀个数据包(包含在以太⽹数据包中),其中包含它所要查询主机的IP地址,在对⽅的MAC地址这⼀栏,填的是FF:FF:FF:FF:FF:FF,表⽰这是⼀个"⼴播"地址。它所在⼦⽹络的每⼀台主机,都会
收到这个数据包,从中取出IP地址,与⾃⾝的IP地址进⾏⽐较。如果两者相同,都做出回复,向对⽅报告⾃⼰的MAC地址,否则就丢弃这个包。
总之,有了ARP协议之后,我们就可以得到同⼀个⼦⽹络内的主机MAC地址,可以把数据包发送到任意⼀台主机之上了。
四、传输层
1、传输层的由来
有了MAC地址和IP地址,我们已经可以在互联⽹上任意两台主机上建⽴通信。
接下来的问题是,同⼀台主机上有许多程序都需要⽤到⽹络,⽐如,你⼀边浏览⽹页,⼀边与朋友。当⼀个数据包从互联⽹上发来的时候,你怎么知道,它是表⽰⽹页的内容,还是表⽰的内容?
也就是说,我们还需要⼀个参数,表⽰这个数据包到底供哪个程序(进程)使⽤。这个参数就叫做"端⼝"(port),它其实是每⼀个使⽤⽹卡的程序的编号。每个数据包都发到主机的特定端⼝,所以不同的程序就能取到⾃⼰所需要的数据。
"端⼝"是0到65535之间的⼀个整数,正好16个⼆进制位。0到1023的端⼝被系统占⽤,⽤户只能选⽤⼤于1023的端⼝。不管是浏览⽹页还是,应⽤程序会随机选⽤⼀个端⼝,然后与服务器的相应端⼝联系。
"传输层"的功能,就是建⽴"端⼝到端⼝"的通信。相⽐之下,“⽹络层"的功能是建⽴"主机到主机"的通信。只要确定主机和端⼝,我们就能实现程序之间的交流。因此,Unix系统就把主机+端⼝,叫做"套接字”(socket)。有了它,就可以进⾏⽹络应⽤程序开发了。
2、UDP协议
现在,我们必须在数据包中加⼊端⼝信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式⼏乎就是在数据前⾯,加上端⼝号。UDP数据包,也是由"标头"和"数据"两部分组成。
"标头"部分主要定义了发出端⼝和接收端⼝,"数据"部分就是具体的内容。然后,把整个UDP数据包放⼊IP数据包的"数据"部分,⽽前⾯说过,IP数据包⼜是放在以太⽹数据包之中的,所以整个以太⽹数据包现在变成了下⾯这样:
UDP数据包⾮常简单,"标头"部分⼀共只有8个字节,总长度不超过65,535字节,正好放进⼀个IP数据包。
3、TCP协议
UDP协议的优点是⽐较简单,容易实现,但是缺点是可靠性较差,⼀旦数据包发出,⽆法知道对⽅是否收到。
为了解决这个问题,提⾼⽹络可靠性,TCP协议就诞⽣了。这个协议⾮常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出⼀个数据包都要求确认。如果有⼀个数据包遗失,就收不到确认,发出⽅就知道有必要重发这个数据包了。
因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。
TCP数据包和UDP数据包⼀样,都是内嵌在IP数据包的"数据"部分。TCP数据包没有长度限制,理论上可以⽆限长,但是为了保证⽹络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
五、⽤户层
应⽤程序收到"传输层"的数据,接下来就要进⾏解读。由于互联⽹是开放架构,数据来源五花⼋门,必须事先规定好格式,否则根本⽆法解读。"应⽤层"的作⽤,就是规定应⽤程序的数据格式。
举例来说,TCP协议可以为各种各样的程序传递数据,⽐如Email、WWW、FTP等等。那么,必须有不同协议规定电⼦邮件、⽹页、FTP 数据的格式,这些应⽤程序协议就构成了"应⽤层"。这是最⾼的⼀层,直接⾯对⽤户。它的数据就放在TCP数据包的"数据"部分。因此,现在的以太⽹的数据包就变成下⾯这样。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论