IP协议的相关特性
- 🔎地址管理
- 动态分配
- NAT
- IPv6
- 🔎IP 地址的组成
- 网络主机号的划分
- IP 地址分类(A, B, C, D, E)
- 子网掩码
- 特殊的 IP 地址
- 🔎路由选择
图片来自网络
🔎地址管理
IP地址, 本质上是一个32位的整数
通常会把32位的整数, 转换成点分十进制的表示方式
32位, 4个字节, 最多能表示42亿9千万个不同的地址(-2 ^ 31 ~ 2 ^ 31 - 1)
这个数字对于全世界来说是不够用的
(电脑, 手机, 服务器, 路由器, 电子手表…都需要分配 IP 地址)
于是引出了下面的解决方案
⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇⬇
动态分配
当设备需要上网时才会进行 IP 地址的分配
当设备处于关机等状态时就不会进行 IP 地址的分配
(并没有增加 IP 的数量, 只能一定程度的缓解, 不能彻底解决问题)
NAT
将所有 IP 地址分为两大类
(1)内网 IP (2)外网 IP
内网 IP
10.*.*.*
, 172.16.*.* ~ 172.31.*.*
, 192.168.*.*
* 表示 0 ~ 255 之间的数字
外网 IP
除去内网 IP 之外的 IP 地址
外网 IP 必须是唯一的, 内网 IP 可以重复出现(不同的局域网中)
内网设备访问外网设备时, 会给他分配一个外网 IP
但是这个外网 IP 不是这个设备独有的, 而是这个内网中的所有设备共用这一个外网 IP
(一个外网 IP 代表了该局域网内的所有设备)
举个栗子🥝
滑稽老哥和同事访问外网设备
此时路由器就会触发 NAT 机制
将源 IP 替换成路由器自己的 IP, 利用这个外网 IP 去访问其他的外网设备
访问时, 路由器会记录所替换的设备
以便在访问结束后, 将访问的结果返回给相应的设备
外网设备 访问 外网设备, 不需要 NAT, 直接访问
内网设备 访问 其他内网设备, 不允许
外网设备 访问 内网设备, 不允许
内网设备 访问 外网设备, 需要 NAT
IPv6
IPv4, 使用4个字节, 32位表示 IP 地址
IPv6, 使用16个字节, 128位表示 IP 地址
IPv6 的地址数量可以为地球上的的每一粒沙子分配一个 IP 地址
既然 IPv6 提供的地址数量足够多, 那么为什么不直接用 IPv6 呢?
因为 IPv4 和 IPv6 不兼容
对于大部分人, 使用目前的 IPv4 并不会影响日常生活, 也就没有升级 IPv6 的想法
🔎IP 地址的组成
- IP 地址
- 网络号
- 标识网段, 保证相互连接的两个网段具有不同的标识
- 主机号
- 标识主机, 同一网段内, 主机之间具有相同的网络号, 但是具有不同的主机号
- 网络号
一个普通的路由器有两个 IP 地址(WAN 口, LAN 口), 分别作用域不用的局域网中
图中的网络号分别为 192.168.0 和 192.168.1 标识相互连接的两个网段
同一网段内, 每个设备的主机号各不相同
网络主机号的划分
IP 地址分类(A, B, C, D, E)
图片来自网络
- A 类 IP
- 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。
- B 类 IP
- 在IP地址的四段号码中,前两段号码为网络号码,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。
- C 类 IP
- 在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话。C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“10”。
- D 类 IP
- D类地址用于在IP网络中的组播,D类地址的前4位恒为1110。
- E 类 IP
- E类地址保留为将来使用。
子网掩码
- A 类网络默认子网掩码 255.0.0.0
- B 类网络默认子网掩码 255.255.0.0
- C 类网络默认子网掩码 255.255.255.0
子网掩码中对应的网络号为1, 主机号为0
1111 1111 -> 255(全1的网络号对应的值是255)
0000 0000 -> 0(全0的主机号对应的值是0)
特殊的 IP 地址
以子网掩码是 255.255.255.0 举例
- 主机号为全1的 IP
192.168.0.255(广播地址)
- 环回 IP
127.*.*.*
- 主机号为1的 IP
192.168.0.1(一般作为网关 IP, 不绝对)
🔎路由选择
路由选择
可以理解为 A 给 B 发送消息时, 发送的消息需要走哪条路线(A -> B)
IP 数据报, 在进行网络转发的过程中, 就是一个 “问路” 的过程
每个路由器只能认识周围的情况, 很可能问的目标, 并不知道
此时就会走路由器指出的默认路径(路由表中的 “下一跳表项”)
举个栗子🥝
滑稽老哥从当前位置出发, 想要来到翻斗花园
滑稽老哥碰到了一个路人, 问去翻斗花园怎么走呀?
路人说翻斗花园具体在哪我不知道
但是我听邻居张大妈说翻斗花园附近是旺仔小学
于是滑稽老哥就沿着路人所指方向去了旺仔小学
到了旺仔小学
滑稽老哥碰到了一个路人, 问去翻斗花园怎么走呀?
路人说翻斗花园具体在哪我不知道
但是我听邻居杨大妈说翻斗花园附近是葵花子菜市场
于是滑稽老哥就沿着路人所指方向去了葵花子菜市场
到了葵花子菜市场
滑稽老哥碰到了一个路人, 问去翻斗花园怎么走呀?
路人说翻斗花园具体在哪我不知道
但是我听邻居李大妈说翻斗花园附近是欢迎你医院
于是滑稽老哥就沿着路人所指方向去了欢迎你医院
到了欢迎你医院
滑稽老哥碰到了一个路人, 问去翻斗花园怎么走呀?
路人说翻斗花园具体在哪我不知道
但是我听邻居范大妈说翻斗花园附近是有点东西大饭店
于是滑稽老哥就沿着路人所指方向去了有点东西大饭店
到了有点东西大饭店
滑稽老哥碰到了一个路人, 问去翻斗花园怎么走呀?
路人说往前走500米就是了
于是滑稽老哥最终来到了翻斗花园
上述过程就是 “问路” 的过程
类似于路由选择的过程