IP 协议作为网络层至关重要的协议,我们需要了解 IP 地址的含义,从之前美国国防部推出的 IPv4 到现在 为解决 IP 地址不够用的问题诞生的 IPv6。这一节记录着 IP 地址的层次和子网掩码的概念以及应用十分广泛的子网划分。
IP地址精讲
IP 层次结构
层次化 IP 地址 将32位的IP地址分为 网络ID 和 主机 ID 。
网络地址
网络地址(网络号)唯一指定了每个网络。 同一网络中的每台计算机都共享相同的网络地址,并用它作为自己 IP 地址的一部分。
传统 IP 地址 还分了类,
常用的二进制和十进制转换总结如下:
10000000 | 128 |
---|---|
11000000 | 192 |
11100000 | 224 |
11110000 | 240 |
11111000 | 248 |
11111100 | 252 |
11111110 | 254 |
11111111 | 255 |
第一位是 0 的是 A 类地址,可用范围为 1~126,(127比较特殊,环回测试)
前几位是10的为 B 类地址,范围是 128~191.
C类地址(110), 范围是 192~223.
之后可以对应上面各个类别的网络对应的网络位直接写出 子网掩码
127.0.0.1 本地环回地址(类似网上邻居这个功能)
169.254.7.28 (DHCP服务器出故障后默认分配的地址)
保留的私网地址 10.0.0.0、172.16.0.0—172.31.0.0 192.168.0.0—192.168.255.0 (这些地址都是不可能 ping 通的)
我的公网IP地址 47.114. 58.45 (Ping 下试试看?滑稽)
路由器转发分组的步骤
- 先按所要找的 IP 地址中的网络号把目的网络找到。
- 当分组到达目的网络后,再利用主机号host-id 将数据报直接交付给目的主机。
- 按照整数字节划分 net-id 字段和 host-id字段,就可以使路由器在收到一个分组时能够更快地将地址中的网络号提取出来。
IP数据报格式
一个 IP数据报由首部和数据两部分组成。
首部的前一部分是固定长度,共20字节,是所有 IP 数据报必须具有的。
IP数据报的长度必须为 4 的整数倍,不够则填充.
原则: IP首部是4字节对齐的。
- 版本(version)
占 4 位,表示 IP 协议的版本。通信双方使用的 IP 协议版本必须一致。目前广泛使用的IP协议版本号为 4,即 IPv4。 - 首部长度
占 4 位,可表示的最大十进制数值是 15。这个字段所表示数的单位是 32 位字长(1 个 32 位字长是 4 字节)。因此,当 IP 的首部长度为 1111 时(即十进制的 15),首部长度就达到 60 字节。当 IP 分组的首部长度不是 4 字节的整数倍时,必须利用最后的填充字段加以填充。 - 总长度(totlen)
首部和数据之和,单位为字节。总长度字段为 16 位,因此数据报的最大长度为 2^16-1=65535 字节。
- 标识
计数器,用来标识数据报,占 16 位. - 标志
占3位。第一位未使用,其值为 0。第二位称为 DF(不分片),表示是否允许分片。取值为 0 时,表示允许分片;取值为 1 时,表示不允许分片。第三位称为 MF(更多分片),表示是否还有分片正在传输,设置为 0 时,表示没有更多分片需要发送,或数据报没有分片。 - 片偏移(offsetfrag)
占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。
- 源地址
表示数据报的源 IP 地址,占 32 位。 - 目的地址
表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。
子网掩码
IP地址和子网掩码做与运算结果后,主机地址全为0,最后变为网络地址. 可以直接从 子网掩码中看出来网络为是几位(写出二进制)
比如:
255.255.255.128 是 子网掩码向右移了一位.
子网划分 (重点)
目的 : 让本不充裕的IP地址充分利用
补充一个非常重要的知识点
主机部分不能全为零(全零代表这个网段,不能用), 主机部分不能全为 1(广播).
- 例子1(划分成两个子网,子网掩码要移一位):
第一位是 0 的 对应0-128 的,这是一个子网了,可用范围为 1-126 ,(127主机位全是1了,是广播)
第一位是 1的 对应129-255 的,这是一个子网了,可用范围为 129-254,(255主机位全是1了,是广播)
确定子网掩码,网络就确定了。分成两个网段如上,路由器的地址就是网关,一般使用网段第一个地址。
- 例子二 (子网掩码右移两位)
第一个网段可用地址 1-62
第二个网段可用地址 65-126
第三个网段可用地址 129-190
第四个网段可用地址 193-254
点到点式网络 子网掩码最好是 252,就剩两位是 主机位。(也是最小非空子网的子网掩码255.255.255.252)不可以是254,因为它只有一位是主机位,又因为主机位为0是网络号,1为广播号。
划分了子网的网络转发
划分了子网了的网络转发的时候仅仅有网络地址和下一跳是不行的。还需要有子网掩码。
举个例子:
将目的地址和子网掩码进行 “与”操作,得到的结果(即网络地址)和路由表中第一列地址比较,相同则是在同一子网,找到下一跳路由就 OK了。
无分类编址
划分子网一定程度上缓解了 IP地址划分的紧张,但还是面临着IP地址严重不足的问题。
改善: 使用变长子网掩码 VLSM 可进一步提高IP地址资源的利用率。
在 VLSM 的基础上又进一步研究出 无分类编址方法,它的正式名字是 无分类域间路由选择 CIDR(Classless Inter-Domain Routing)。
网络前缀
- CIDR 消除了传统的A类、B类、C类地址以及划分子网的概念,因而可以更加有效分配 IPv4地址空间。
- CIDR 使用各种长度的“网络前缀”来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址。
类似于网络号与子网号,但不同的是可占用网络号地址.
CIDR 把网络前缀都相同的连续的 IP地址组成 “CIDR地址块”。
128.14.32.0/20 表示的地址块共有 2^12 个地址(因为斜线后面的20是网络前缀的位数,所以这个地址的主机号是12位)。
路由聚合
- 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,也称为构成超网,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
- 路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能
- CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词。
- 例如对于 /20 地址块,它的掩码是20个连续的1.
- 10.0.0.0/10 可简写为 10/10,也就是把点分十进制中低位连续的0省略。
最长前缀匹配
- 使用 CIDR 时,路由表中的每个项目由**“网络前缀”和“下一跳地址”组成。** 在查找路由表时可能会得到不止一个匹配结果。
- 应当从匹配结果中选择具有最长网络前缀的路由: **最长前缀匹配,**又称为最长匹配或最佳匹配。
- 网络前缀越长,其地址块就越小,因而路由就越具体。
具体做法
通过/22 可以看出掩码,将掩码和目的IP地址相与(同子网划分),再和/22前面的网络地址比较,如果有几个都满足,则选择前缀长的,(能一步到位找具体的当然优先啦!)