之前我们说到来的TCP/UDP等协议是传输层的协议,在网络层中也有一个很知名的协议--IP协议。IP能够让世界上任何两台计算机之间机型通信,IP协议主要负责的是将数据包发送给最终的目标计算机。网络层的主要作用是实现终端节点之间的通信,这种终端节点之间的通信也叫做点对点的通信,之前我们说过,网络层的下一层数据链路层的作用主要是在局域网之间进行包传递,一旦跨越多种数据链路,就需要借助网络层,网络层可以跨越不同的数据链路,即使不在同一个局域网之间也能进行数据包传输。 那为什么需要将网络层和数据链路层分开,两个之间又有什么区别呢?举个例子,现在放寒假我要从西安会到河北的家里,在这个过程中,我需要先乘坐公交车然后乘坐地铁之后高铁再打车会到家里边,并且有一个详细的行程时间表,高铁票是只能在某个区间才乘坐的,地铁也是如此,这个区间内的出发地点和目的地点就如同数据链路层中的源地址和目标地址,整个全程的行程表的作用就相当于网络层。 数据链路层的MAC地址是用来标识同一个局域网中的不同计算机的一种识别码,而网络层的IP地址,是用于区别网络中任一一台主机的。 网络情况是很复杂的那么多台计算机,怎么才能将分组的数据发送到最终的目标地址,这里就用到了路由控制,一旦路由控制出现了异常,分组数据极有可能丢失,无法到达最终的目的地,因此一个数据包之所以能够成功的到达最终的目的地全靠路由控制。在数据包出发的时候,他只知道我是要从这个IP发送到那个IP,但是中间我该怎么走?这些都是有路由来控制的,没经过一个路由路由都会给你一个方向,每个路由器中都维护着一张路由控制表,这个表就是记录着下一步该发给哪个路由器,192.168.给路由器A,192.122给路由器B 用寄快递的例子更容易理解,当双十一我们在淘宝网购之后,卖家会给我们发货,快递当上只有发件人xxx收件人xxx,当发货人交给快递公司之后,快递公司来处理中间的过程,从北京发往西安,北京的快递小哥在拆分的时候看到这个快递是给西安的,先给石家庄发过去,这时候快递只知道我现在在北京,我要去石家庄,最终目的是西安,到了石家庄再往哪走,不知道,到了石家庄再说,到了石家庄之后快递小哥再次拆分,把快递指向了太原方向,就这么一步一步的走,知道最终到达西安。这里我的地址和卖家地址就是IP地址,中间这些站点就是路由器,而从北京到石家庄这区间是通过我们的MAC地址找到路径走过去的。 IP不同于TCP是面向无连接的,在发包之前不需要建立链接,主要原因为为了两点:1.简化,2.提速。面向连接相对来说更复杂一些,并且对于数据的可靠性,我们已经在TCP采用了面向连接的,那为什么不让IP直接来实现有链接的可靠性,而让两个分开呢?因为如果要让一种协议实现所有的功能和作用,那么这个协议就会变得十分的复杂,相比之下通过分层,明确每层协议的作用,针对每层进行编码更利于协议的实现。 IP地址(IPV4)由32位整数来表示,IP地址由网络号和主机号两部分表示组成 并且我们把IP地址分成四个级别,分别是A类,B类,C类,D类, 从0.0.0.0.~127.0.0.0是A类的网络地址,A类地址的后24位相当于主机标识。 B类地址128.0.0.1~191.255.0.0B类中后16位相当于主机标识 C类中IP地址前三位为从192.168.0.0~239.255.255.0,C类中后8位相当于主机标识 D类中为224.0.0.0~239.255.255.255,D类中没有主机标识,常被用于多播 在分配IP地址的主机号的时候要注意,不可以主机号全为0或者全为1,因为只有0在表示对应的网络地址和IP地址不可获知的情况下才使用,而全为1则代表主机地址作为广播地址。 因为对IP地址进行了分类,不同的IP地址中主机号所占的长度就不同,主机号占位越长就说明这类网络中可以拥有的主机就越多,B类中后16位是主机,那么这个网段里可以容纳的主机上限就是65534个,C类中的后八位是主机号那这个网段的主机上限就是254个,但是通常对于一个公司来说,254个主机不够用,6w多个又太多,这就在很大程度上造成了IP地址的浪费。 因此就有了子网掩码这个东西,他是用来确定网络号和主机号的,现在的IP地址已经不在受到地址类别的限制,而是通过子网掩码来区分这个IP地址中哪些是网络号哪些是主机号,让IP地址和子网掩码进行按位与操作,消去的部分就是我们的网络号,剩下的部分就是主机号。