网络基础 -- 互联网协议--五层模型
介绍网络的工作原理,物理设备到底是怎样与各种协议合作组成的信道网络。
原博客地址:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
这里将按照分层的方式来了解网络组成,按照功能分成五个层次,这个不是一个标准的分层,也没有标准,方便理解的去模糊划分。

实体层
实体层就是将电脑连入网络的网线, 像上面宽带、光纤、无线电波一类的东西,就是信号传输的线路。
链路层
首先在实体层中传输的数据本质上都是0和1,所以要规定出我们要如何去传输和识别这些01数据,这个层确定了这些0和1的分组方式。
一开始大家都有自己的分组方式,但是这样明显不方便,不能相互的沟通,后来叫“以太网“的协议占据了主导地位,这种协议规定一组电信号构成一个数据包,叫做帧,每个帧又分为”标头“和”数据“两个部分。标头里存储了发送者、接收者、数据类型等信息;数据里就是需要传输的数据。标头的长度固定为18个字节,数据部分的长度为46到1500之间,所以一个帧的最短长度为64字节,最长为1518字节;
MAC地址,上面有说标头里面包含了发送者和接收者的信息,那就要提取出每个发送和接收设备的身份标识,这个标识就是MAC地址,那这个地址是怎么来的呢,这个地方一个设备想要接入互联网,那一定要有一个叫做“网卡”的设备,这个设备在被生产的时候就为他分配了一个全世界唯一的MAC地址,长度为48位的二进制数,通常用12个十六进制数来表示,所以我们平时查找的MAC地址都是6对字符组成;
广播,当有了mac地址作为标识之后,我们已经能够区分出谁是谁了,相当于人有了名字,而当设备接入网络后就能相互通信了,也就相当于人们在同一个屋子里说话大家都能听到了,所以把帧数据丢到网络中去,大家都取来看看标头里的接收者是不是自己,是就将数据取出来,这样数据的传输就实现了。
网络层
存在原因:为什么要有网络层,链路层的时候不就已经是实现了数据的传输了吗,链路层传输数据的方法是把数据丢到网络中每个人的手里,所以导致一些问题,一个是每个人都要去接收数据看看是不是发给自己的,现在有几十亿网民,而网络设备数量更多,很难想象如果每个人发的数据都去接过来看看接收者,这个资源占有会有多大,另一个是整个互联网其实由大量的子网络构成,两台通讯设备不一定在同一个子网络中,这样的话就没法直接通过mac地址来找到对方了。
我们需要一种方法来判断通讯的mac地址是否在同一个子网络中,如果是就用广播的方式传输数据,如果不是就用路由的方式传输数据,路由这个概念很广泛,这里不详述,这种判断的依据就是网络层了,他是一套新的地址,用于区分两台计算机是否在同一个子网络中。这套地址叫“网络地址”简称–网址;
IP协议:规定网络地址的协议叫做IP协议,它所定义的地址叫做IP地址,目前广泛使用的是第四版协议,所以叫做IPv4,这个版本中网络地址有32位二进制构成,但使用中我们用4段的十进制来表示IP地址,从0.0.0.0一直到255.255.255.255;IP地址也被分为两个部分,前一部分代表了网络,后一部分代表了主机,但是这个地方两个部分的长度是不固定的所以无法区分,为了区分引入一个新的参数–子网掩码,它也是一个32位的二进制数字,他的网络部分全为1,主机部分全为0,比如11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0,通过子网掩码我们能够区分IP地址中的网络部分和主机部分,知道两个IP地址是否在同一个网络中;所以IP地址的主要作用有两个,一个是为每台设备分配IP地址,另一个是确认哪些地址是在同一个子网络中。
前面说了网络中数据传输的单元是以太网规范中的帧,但是帧的标头中只有mac地址的信息,现在我们加入了IP地址,这可咋整勒,人们决定将原本的帧的数据部分再分为两个部分,也就是包含了IP地址的标头和数据了,标头中包含了版本、长度、IP地址等信息,数据部分是IP数据内容,IP标头是20到60字节 ,整个数据包的最大总长度为65535字节,可以推出IP数据部分的最大长度可以为65515,但是前面说了这个东西整个就是放到了以太网的帧里面,而帧的最大长度是1500,当这个IP的数据包长度超过这个范围时,我们将它分成多个以太网的帧进行发送。
ARP协议:没看明白,后续补充
4.传输层
在网络层中通过IP地址和mac地址就已经能让两台主机在网络中相互通信了,但是一个终端上会有很多的程序会同时的使用网络,那个我们为了区分这些不同程序使用的端口,端口是16位二进制数组成,从0到65535,0到1023的端口被系统占用,用户只能选择大于1023的端口,所以传输层的作用是端口到端口的通讯,而前面的网络层的作用是主机到主机的通讯;(在Unix系统中把主机+端口叫做套接字socket,基于他进行网络应用的开发)
UDP协议:这是一个基于端口的协议,与前面的在以太网的协议上加入IP协议相同,这个基于端口的协议也分为了标头和数据部分,整个协议被写入了IP协议的数据部分 ,UDP协议标头部分共8字节,总长度不超过65535,和IP协议的长度相同。
TCP协议:UDP协议有个缺点,没有可靠性保证,只是把数据包丢出去,不知道对方到底有没有接收到,所以有了TCP协议,这个协议每个数据包都要发出去之后都要确认对方有没有收到,要是没有收到那就要重新发送,TCP协议能够保证数据不会丢失,但是由于它的实现复杂,所以会占用较多的资源。在长度这块,TCP协议没有长度的约束,但是为了保证效率,通常长度也是不会超过IP协议长度的,超过了就需要分割了。
5.应用层
应用程序收到具体的数据之后就要开始做解析了,由于来的数据可能是各种各样的数据,所以各个应用就要规定自己需要的数据的格式,所以有了邮件、网页之类的数据格式,由这些应用规定的数据标准组成了应用层。
