之前我们学习了传输层的TCP和UDP,今天我们就来看看网络层的IP协议,话不多说,直接开整。
我们说了解一个协议就要先了解这个协议的实现,也就是这个协议的各个字段
IP地址在网络中唯一标识一台主机
IPv4是无符号4字节整数(42亿9千多万),虽然不少但是肯定是不够用的。
解决方案:DHCP(动态地址分配)、NAT(网络地址转换)
既然是动态地址分配,IP怎么合理分配才会避免冲突?
答案是按网络进行分配。
给个网络负责指定一批IP地址的分配,每个网络指定的不同,则分配就不会冲突了。
并且路由器会对网络中的数据进行路径选择,必须能够指定某个地址属于哪个网络(地址分配必须有规律,表示这个IP地址属于哪个网络)
IP地址组成:网络号 + 主机号
网络号:IP地址所属网络的标识,一个网络中所分配的IP地址都会包含相同的网络号(也就是我们通常说的网段)
主机号:用于在网络中标识一台主机 – 一个相同的网络中的主机拥有相同的网络号,但主机号不能相同
一个网络中,只要同一网络中主机号分配不重复,每个网络的网络号不同,就能保证整个网络的IP地址分配不会冲突。
并且路由器转发数据时,就能根据对端IP地址,知道这个IP是属于哪个网络,然后进行转发。
A类:高1位置0,7位网络号,24位主机号
网络号范围:0~127
IP地址范围:0.0.0.0~127.255.255.255
A类网络有128个,每个网络中可以有256x256x256台主机,通常用于组建大型网络。
B类:高2位置为10,14位网络号,16位主机号
网络号范围:128.0~191.255
IP地址范围:128.0.0.0~127.255.255.255
B类网络有64x256个,每个网络中可以有256x256台主机,通常用于组建中型网络。
C类:高3位置为110,21位网络号,8位主机号
网络号范围:192.0.0~223.255.255
IP地址范围:192.0.0.0~223.255.255.255
B类网络有32x256x256个,每个网络中可以有256台主机,通常用于组建小型网络。
DE类网络比较特殊,在此不做介绍
进行网络分配的时候根据要组建网络的大小直接分配一个A类/B类/C类网络。
我们知道一个A类网络可以有16,777,216IP地址,那么被分配到A类网络的地方能不能把IP地址用完呢?
应该很难保证每个IP地址都用到,那么这样的IP地址分配就有很大的浪费。
因此在此基础上,引入了CIDR方案进行划分网络,使用子网掩码进行网络的划分,使网络的划分更加灵活。
子网掩码是一个uint32_t类型的数据,这个整数必须由连续的二进制1和0组成
比如:255.255.255.0 ==> 11111111 11111111 11111111 00000000
1和0都必须连续
那子网掩码有什么用呢?
1. 子网掩码决定了一个网络中可以有多少个主机号。
子网掩码取反可以得到网络中的最大主机号
以255.255.255.0举例,取反得到0.0.0.255。表示改网络中最多有256个主机号 0~255。
2. 子网掩码与IP地址作&操作可以得到网络号
192.168.10.10 & 255.255.255.0 ==> 192.168.10 (网络号)
说白了就是子网掩码有几位1,网络号就有几位,比之前的ABC类网络划分更加灵活
所以一个网络中能分配的主机号是:最大数 - 2
因为这里要和其他技术进行对比,所以写在另外一篇~
感兴趣请戳:典型协议和技术:DNS + NAT/NAPT + 代理
为流经路由器的数据进行路径选择,依托于网络地址管理方式以及每个路由器上的路由表。
每个路由器会记录路由表,里面有与自己相连的设备信息。
路由选择的过程就是拿目标IP地址与路由表中的子网掩码作&操作得到目的网络号,如果目的网络号在路由表中则直接转发,如果不在,则转发到default指定的网络。