从这篇文章开始就要进入到网络层的学习了,这是计算机网络中实现通信的最后一层(到运输层就是端对端协议了),而且这一层的内容比较复杂,所以大家做好心理准备,这层有三个很重要的组成部分必须掌握:IP协议,ICMP协议,和路由选择协议(RIP,BGP,OSPF)。其中IP协议是整个网络层中最基本的部分,也是大家最常见的部分,因此我会从IP协议开始讲起。
IP协议,就是Internet Protocol,它的功能就是实现整个网络的互联,这篇文章的主要内容就是讲述IP的编址,不说了,先上图。
这个图应该是大家比较熟悉的一张图了,我会按这张图中的信息来介绍IP协议,ARP协议,DHCP协议,CIDR和NAT协议,这里只介绍上半部分的东西,DNS部分可以看我之前的文章。
首先,每个连接互联网的设备都需要有一个IP地址(IP address),那么怎么对IP地址进行编址就成了首要任务,对此我们用32个位来表示IP地址,为了方便记忆,每8位之间用”.”隔开,然后用二进制表示,比如 00101101 01101100 0011110111111100 这个地址就可以用45.108.61.252来表示,其中按IP地址容量又可以分为ABCDE五类。
第一眼看上去有没有“这是个什么东西”的感觉?因为这是按位分的,所以我们换成二进制就一目了然了。
这样我们可以看到,A类地址以0开头,B类地址以10开头,C类地址以110开头,D类地址以1110开头,E类地址表示剩下的部分。
当ISP(网络服务供应商)获得一类IP地址的时候,网络号是固定的,只有主机号是可以分配的,比如A类地址有24位主机号,就是说最多可以分配2的24次方台主机,B类最多65536台,C类是256台,D类作为多播组号,这个暂时不讲,E类留待后用。
事实上,这些类别的地址数不是2的x次方,而应该是2的x次方-2,每个起始的IP(比如0.0.0.0)代表一个IP地址未知的主机,而最后一个IP(比如255.255.255.255)代表广播地址,向这个地址发送数据报相当于向整个网络发送数据报,因此C类地址应该只有256-2=254个地址可用。
每组网络号都可以分配一个子网,比如144.54.3.66/24后面的/24代表网络号的长度,那么这个IP地址就是是一个C类地址,属于144.54.3.0/24这个子网,但是144.54.3.66/16和上面IP的不同,因为它在144.54.0.0/16子网下,属于B类地址,这两个IP地址其实是两个不同的地址。
在实际分配中很快就会发现一个问题,比如一个公司有1000台主机,用C类地址不够,用B类地址又及其浪费,那怎么办?那就不分类好了,也就是CIDR(无类别域间路由选择, ClasslessInterdomain Routing),1000接近且小于1024(2的10次方),那么就分配给它一个主机号位为10的地址就可以了,这时候网络号是22,随便举个例子,比如起始IP是45.108.60.0,那么划分给该区域的IP范围就是45.108.60.0/22 - 45.108.63.255/22,看不懂没关系,转成二进制就明显了,因为主机号是10位,所以除了最后的八位之外还要加上前面的两位。
看懂了吗?
到这里我们也就明白了CIDR是个什么东西了吧,原来只有/8,/16,/24三个网络号(也就是对应的A、B、C类),现在将这个类别去掉了,就可以规定任意数(大于1小于32)作为网络号了,这样在一定的情况下保证了用户按需分配。
关于子网掩码(subnetmask),其实就是IP地址后面的/xx,但是它还有另一种写法,比如/24就可以写成255.255.255.0,在上面那张图中主机的IP就是192.168.2.196/24。
在这里说一下网关(gateway)的概念,从字面意思上来理解就是,通向网络的大门,那么我们知道,互联网是通过路由器连接起来的,我们用到的主机都是网络的终端部分(边缘部分),接入网络时需要与网络最边缘的路由器进行交流,因此,通向网络的大门当然也就是指路由器了,相应地,默认网关就是直连你主机的路由器。
在我们自己的电脑中看到的可能不是手动输入的IP地址,而是“自动获取IP地址”,这意思就是说,不用自己手动配置IP地址和子网掩码,系统可以自动获取,那么这就涉及到另一个协议了——DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)。
举个例子来说明DHCP出现的必要性,比如在大学里面,你需要使用网线或者学校的WIFI(例如DLMU-test)才可以连接上校园网,而且学生们用的全都是笔记本,手机,平板这样的移动设备,指不定什么时候就会连接或断开,我插上网线或使用WIFI时才会连接网络,其他时间并不需要专门分配一个IP地址给我,假如学校有两万学生,但是同时在线的不超过五千,那就没必要分配两万个IP地址,而且,考虑到我有可能带着电脑从宿舍到图书馆,再到教室,很有可能在每个位置都会连接到一个新的子网,这样我在每个位置都需要一个新的IP地址,因此,给设备分配一个临时的IP地址就是非常有必要的了。
DHCP是一个典型的即插即用协议(plug and play protocol),不用手工分配IP地址,非常方便,需要注意的是,DHCP并不是网络层协议,而是应用层协议,它使用67端口,建立在UDP协议上,下面我们来看一下DHCP协议的工作原理:
①子网中建立至少1台DHCP服务器,用于管理IP地址的分配;
②当有一台新设备接入子网中,它会使用UDP协议向端口67发送一个DHCP发现报文(DHCP discovermessage),因为不知道DHCP服务器的IP地址,所以它会发送到广播地址255.255.255.255,这时候设备的IP地址为0.0.0.0;
③附近的DHCP服务器收到报文,找出一个可用的IP地址,加上子网掩码和IP地址租借期,组成DHCP提供报文(DHCP offer message)并响应,但由于不知道设备的地址,因此会发到广播目的地址255.255.255.255;
④设备收到DHCP服务器提供的IP地址(1个或多个,因为DHCP服务器不一定只有一个),之后选出一个IP地址,并向提供该IP地址的DHCP服务器发送一个DHCP请求报文(DHCP request message);
⑤服务器用DHCP ACK报文进行响应,确认该设备的参数
一旦客户收到DHCPACK报文后,交互就完成了,该客户就可以使用服务器提供的IP地址了,当然也有可能出现客户使用时间超过租借时间的情况,这时候客户就会重新向DHCP服务器发送该IP的请求报文,DHCP服务器回应ACK后即可实现续借。
虽然有32位表示的IP地址,虽然有子网划分,但是随着电子产品的爆炸式增长,这些地址终究是不够用的,比如一个三口之家,2台电脑,3部手机,1台在线电视,可能还会有游戏机,平板电脑等等一堆需要联网的设备,这样的话上面所说的IP地址是远远不够用的,其实早在二十多年前就已经有人意识到这个问题了,但是他们提出了一个方法,让这个眼看着地址就快要用尽的问题推迟了二十多年,それはNATです(Network Address Translation,网络地址转换)。
这个名字听起来可能有点陌生,但是你们听说过内网和外网吧?没错,NAT就是这么个东西。
使用NAT需要至少一个有效的外部全球IP地址,拥有该IP地址的是NAT路由器,它作为整个网络的“网关”,网络内部可以使用自己指定的IP地址而不用去考虑会不会和外界冲突,因为该网络内的所有主机访问外网时都会通过NAT路由器转成路由器的IP地址,只要保证路由器的IP地址是唯一的就行了。
NAT有很多实现技术,其中最常用的是PAT(port address Translation,端口地址转换,也叫端口地址复用),每台主机都会在路由器上使用一个端口来标识自己,这个对应关系记录在NAT路由器中的NAT转换表中。当内部主机要和外网通信时,外网其实是在和NAT路由器进行数据交互,而NAT路由器的作用就是把主机发送的数据通过指定端口发到外网,和将外网发送过来的数据发送到对应端口的主机上去。
大致意思就是,我一个IP地址能养活一个机房!
内网IP同样根据地址需要的多少分成了三类,分别对应IP的A、B、C类
NAT已经得到了广泛的应用,但这并不代表它没缺点,首先在转换IP的时候需要修改IP头部信息,这可能会导致校验和不符等问题,其次,端口号本来是用于进程编址,在NAT中则使用了主机编址,这是不符合原则的,第三,NAT内网的主机不能充当服务器,也就是说它们只能主动的发起连接,这导致P2P应用无法在内网主机上使用,因为P2P协议在主机上是服务器端和客户端并存的,不过这个“NAT穿透”问题已经解决了,有兴趣的可以去搜一下,这里不多做解释。
尽管很多人反对NAT,认为它只是防止地址用尽的权宜之计,真正解决IP地址短缺问题的方法是使用IPv6,但是不可否认,NAT已经成为因特网的一个重要组件,是网络中不可或缺的组成部分,毕竟续了二十年。
IPv6的内容我下一次会讲,看一看这个号称“为世界上每一粒沙子提供一个IP地址”的协议到底是怎么解决地址紧缺问题的(顿时感觉很牛X的样子)。
那么,下期再见!
领取专属 10元无门槛券
私享最新 技术干货