前言:ABCD类地址等基础不再说明,以快速说明主题。
CIDR
1.对于ABCD类地址,格式描述为<网络号><主机号>
,其网络号位数是确定的。
2.为了增加灵活性充分利用,以此为基础,占用主机号的部分位充当子网号,形成<网络号><子网号><主机号>
,实际就是<网络前缀><主机号>
,这个网络前缀可认为就是网络号,这样基本只是为了兼容、不混淆原有概念。
3.使用子网掩码用于确定网络前缀有多少位,它也是4个字节组成的。如11111111 11111111 11110000 00000000
,它指示网络前缀有20位。(严格来说是运用“位与”运算的特点,如把两个主机IP地址和子网掩码位与运算,结果相同则认为他们网络前缀相同,在同一个网络。通俗而言就是看有多少个二进制的1从而决定网络前缀的位数)
4.学习使用中我们经常要指明IP地址对应的子网掩码,此时即使写成255.255.240.0的十进制形式也很浪费时间和空间,而且其作用就是用来指明网络前缀的位数。因此我们也可写成192.168.0.1/20
,在IP地址后加一个斜杠和其网络前缀的位数。它的含义就是IP:192.168.0.1 子网掩码:255.255.240.0
。
5.由于上述机制,看到192.168.0.1/20
仍然可以说它是一个C类地址,但是此时这个“C类”的意义不大,网络前缀的位数确定并不依赖于ABCD这种分类。因此称呼其为CIDR(Classless Inter-Domain Routing)无类别域间路由
6.把话说通俗了就不够严谨,细节定义请右转教科书
NAT
网关特指路由器的IP地址,路由器至少两个网关。其他东西应该不用说明。核心思想示意图:
把运输层中的端口也利用起来,形成IP-端口映射。即不同主机地址有不同对应的路由器端口,路由器收到回传时根据对应关系把地址相应修改一下就行了。
当然,NAT具有多种实现方式,上面展示的是NAPT核心做法,更多细节和方式右转教科书。
这里有个小问题,端口是运输层的东西,而路由器工作在网络层,似乎有点毛病?
没办法,的确就这样,虽然有点跨界但我们还是把路由器归为网络层。
虚拟机NAT联网
以vmware为例,其本地子网掩码均为255.255.255.0,核心思想示意图:
这个虚拟路由器是为了方便理解画上去的,实际能不能这么叫我也不知道。
虚拟机们发出的IP数据包就这样原封不动的发出去肯定是有问题的,因此vmware把它们IP都改成真机IP再发出去,就是NAT这个操作。
至于vmware构建的虚拟网络号是什么,其实没什么限制,设置192.168.2.0也是可以的,子网掩码对应着设置不要填到有矛盾就可以。内部网关同理,只是一般都默认取最小的主机号罢了。
有个小问题,上图中192.168.1.1去哪了?
如果只是像上图那样,真机是无法和虚拟机直接通信的(但虚拟机和外界联网没问题)。比如说虚拟机开了个80端口当服务器,浏览器中输入192.168.1.3会有用吗?浏览器怎么知道vmware、虚拟网络的存在?
实际上打开网络你会发现自己多了个虚拟网卡,而它地址就是192.168.1.1。这个就是让真机和虚拟机直接网络通信的基础,系统会把访问192.168.1.0/24网络的数据包通过这个虚拟网卡发出去,让真机变成虚拟网络中的一个成员,从而使它们可直接通信。