IP协议+网络层
个人主页:Lei宝啊
愿所有美好如期而遇
基本概念
协议头格式
首先我们介绍四位版本,他是用来指定IP协议的版本,对于IPV4来说,就是4.
四位首部长度,就是用来标识报头的大小,4位首部长度能表示的最大值为15,这里是按照乘4来计算,也就是说,他能表示的最大长度为60,前面固定的部分为20字节,我们也就可以通过这个字段来知道选项的大小。
8位服务类型,3 位优先权字段(已经弃用), 4 位 TOS 字段, 和 1 位保留字段(必须置为 0). 4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要。
16位总长度计算的是包含包头在内的整个报文的大小。
第二列我们不做介绍。
8位生存时间,就是说,假如一个报文在网络转发过程中出现了环路转发,那么这个报文将永远不会消失,一直在网络中占用资源,而如果这样的报文过多,那么网络就必然会拥塞,甚至无法再传输报文,所以这个字段规定了报文的生存时间,即使出现这样的问题,生存时间到了,也就不再转发这个报文,也就被销毁了。
8位协议,表示上层协议的类型,Udp或Tcp协议。
32位源Ip地址,这是IPV4,如果是IPV6,这个字段是128字节,所以说他们两者是不兼容的。32位目的IP地址也是如此。
网段划分
IP地址划分为两个部分,网络号和主机号,就像这样127.0.0.1/24,意思就是前24个比特位,就是网络号,后面8位就是主机号。
网络号用来标识不同的网段,而主机号用来标识同一网段下不同的主机,那么也就是说,不同网段下的主机号是可以相同的。
子网是什么?其实子网就是将网络号相同的主机放在一起,这样,主机之间发送消息时,一次筛选一个子网,效率就会高很多。如果在一个子网中新增一台主机,那么这个主机的网络号和子网的网络号相同,但是主机号不能和子网中任意主机的主机号重复。
这里我们要知道网络是被精心设计的,是被谁设计的呢?怎么设计的?我们来详谈。
网络是被运营商精心设计的,在没有路由器等基础设备时,仅仅只有局域网内通信,后来运营商将各种基础设施铺设到人们所在的城市,在这样的基础之上发展出了跨网络通信,但是随之而来的有一个问题,就是IP地址不足的问题,因为IP地址只有32位,也就能够支撑42亿多的主机,但是全球可不止这些主机,是怎么解决或缓解的呢?-->就是网段划分,过去曾经提出过一种方案,把所有IP地址划分为5类,如下图所示:
但是随着网络的飞速发展,这种方案的局限性很快就体现出来了,大多数组织都申请B类IP地址,导致B类地址很快分配完了,而A类却浪费了大量的地址,这里解释一下为什么大多数组织都申请B类地址,因为申请了一个B类地址,理论上这样一个子网能够允许的主机有2的16次方,也就是六万五千多,不少也不多,A类太多,C类太少。
针对这种情况提出了CIDR,也就是子网掩码的方式,引入了一个子网掩码来区分网络号和主机号,子网掩码也是32位,将IP地址和子网掩码按位与,得到的结果就是该IP地址所在子网的网络号,而网络号与这个IP地址是什么类无关。这里我们也就能解释为什么需要进行子网划分,划分子网后,发送一个报文时,将他的目的IP地址与当前子网的掩码按位与,就能够判断当前报文是否要前往该子网,不是则继续向上转发(这个我们会画图解释)。
现在我们来解释运营商是如何精心设计网络的。
首先我们要知道,路由器是可以组建局域网的,而一个局域网内的主机是可以直接进行通信的。同时,路由器一般是要横跨两个网络的,他会有两个IP地址:
我们可以发现,不同运营商组件的子网,他们的子网IP是可以相同的,并且不同子网中的主机的IP可以重复,但是最外层运营商的IP就是公网IP了,他们是唯一的。
这里我们就要说明一下私有IP地址和公网IP地址,私有IP地址也就是内网地址,他们是可以在不同的子网中重复的,而公网IP是不允许重复的。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到 Internet 上, 理论上使用任意的 IP 地址都可以,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址:
我们看图:
首先,发送报文的主机能够判断出要发送的报文一定不是他所在的子网,因为他的IP地址与子网掩码按位与后得出的网络号是192.168.1.0,而dst与子网掩码按位与后得出的网络号是122.77.241.0,所以该报文就会被直接转发到家用路由器中,但是家用路由器也会发现,这个报文一定不是他所在的子网10.1.1.0,所以他只能接着转发,交给了运营商路由器,于是这个路由器就发现要去的报文是在他所在的子网中,而这个子网就是公网,于是他就将这个报文交给了服务器主机。但是我们会发现一个问题,服务器向谁发回报文呢?向192.168.1.201发回?但是,私有IP地址是不能出现在公网中的,即使他能,不同的子网中(内网),这种IP地址是可以重复的,也就无法确定是发回给哪台主机的,这个报文也就发不回去了。
这就有了NAT技术: