IP协议主要分为三个
1. 地址管理
每个网络上的设备, 要能分配一个唯一的地址
2. 路由选择
小A 给小B 发消息, 具体应该走什么路线
3. 地址管理
IP 地址. 本质上是一个 32 位的整数
通常将, 32 位的整数使用点分十进制来表示, 如 192.168.1.1
一共可以表示 42 亿 9 千万个地址
但是目前这些 IP 地址并不够用
如何解决 IP 不够用的问题呢???
1. 动态分配 IP 地址
设备上网才分配, 不上网就不分配 -> 这样就可以剩下一大批的 IP 地址
但是并没有增加 IP 地址的数量, 只能一定程度上缓解, 并不能彻底解决问题
2. NAT 机制
将所有的 IP 地址分成两大类
-
内网 IP:10.* 172.16.* 172.31.* 192.168.*
-
外网 IP : 剩下的 IP
-
内网 IP: 可以重复出现 (在不同的局域网中)
-
外网 IP: 必须是唯一的
-
内网设备如果要访问外网的话, 会给他分配一个外网 IP
-
这个外网 IP 不是这个设备独占的, 而是内网中的所有设备都共用这一个外网 IP
小栗子
比如我上网买个衣服
收货地址 : 福建省, 福州市, xxxx大学
而一个大学有上万人, 每个人都填这个大学, 这个大学地址是唯一的, 但是代表的人不是唯一
大学里的人就是内网, 里面的人都用同一个外网的 IP
简单模拟一下内网访问外网
在之后, 当服务器发送响应数据报的时候, 路由器本身知道替换, 所以将数据报各自发给我和小a 的主机
由于 NAT 机制, 导致电脑处在内网中, 无法被外部直接访问
两个误区
- 不是所有的数据通过路由器转发, 就一定会触发 NAT 功能
- 只要求外网的 IP 必须唯一 , 但是内网的 IP 在不同的局域网里是允许重复的 (同一个局域网内不允许重复)
在 NAT 的背景下如何进行通信???
- 外网设备 -> 外网设备, 不需要任何的 NAT, 就可以直接通信
- 内网设备 -> 其他的内网设备, 不允许 ×
- 外网设备 -> 内网设备, 不允许 ×
- 内网设备 -> 外网设备, 对应的内网设备的路由器, 触发 NAT 机制, 进行 IP 替换, 此时会将这个数据报的源 IP 替换成路由器的 IP
通过 动态分配 + NAT ==> 解决 IP 地址不够用的问题
补充
DHCP是路由器自动给你的设备分配一个局域网内唯一一个 IP
IPv6
IPv4 是使用传统的 IP 协议, 使用 4 个字节, 32 位来表示 IP 地址
IPv6 是新的 IP协议, 使用 16个字节, 128 位来表示 IP 地址
IP 地址的组成
IP 地址分为两个部分, 网络号和主机号
- 网络号:标识网段 ,保证相互连接的两个网段具有不同的标识 -> 标识一个局域网
- 主机号:标识主机 ,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号 -> 标识一个局域网内部的主机
一个路由器中, 有两个 IP 地址, 分别是在不同的局域网里
路由器的作用 -> 把两个局域网连起来
WAN:用于连接外部网络 , 通常连接到互联网, 属于广域网接口
LAN:用于连接内网设备, 提供本地网络的连接, 属于局域网接口
比如以上我画的拓扑图, 其中路由器就是把两个局域网连接到了一起,
此时这两个局域网就被称作 " 相邻 " 的局域网, 这两个局域网的网络号是不可以重复的
IP 地址的划分
1. (ABCDE)划分
这种早已不再使用, 只有教科书中会考, 所以了解即可
2. 子网掩码
如图是我的电脑的 IP 地址 以及子网掩码
IP 地址的前 24 位都是网络号, 因为都是 1 , 剩下的八位是主机号
特殊的 IP 地址
假设子网掩码是 255.255.255.0
-
主机号为 0 的 IP 192.168.0.0 局域网内不应该存在某个主机的主机号为 0
-
主机号全为1 192.168.0.255 是广播地址, 向这个地址发送 UDP 数据报, 此时这个数据报就会被转发给整个局域网的所有主机
-
IP 为 127 开头的比如 127.* 称作环回 IP 127.0.0.1 (是最常用的) 其他如127.1.1.1 也都是环回 IP , 环回 IP 有很多个
-
主机号为 1 的比如图上的 192.168.3.1 一般作为网关 IP (指的是大部分情况下, 并不是强制的)
路由选择
比如你要从 A -> B 其中有很多的路线, 具体路线应该如何走, 这就是路由选择需要做的事情
由于网络环境非常复杂, 某一个路由器无法将网络环境全部记录下来
路由器只能记录周围的情况 (也就是只知道附近的路由器是谁)
路由器内部使用 路由表 这种数据结构来记录周围邻居的信息
实际的转发过程, 类似像问路一样, 不断接近最终目标
如图, IP 数据报在转发的过程中, 就是不断问路的过程
-
由于每个路由器只认识自己周围的情况, 很可能想去的地方, 其实并不知道 (目的 IP 在路由表中, 没有匹配的结果)
-
如果在自己的表中找不到, 此时就会给你指出一条默认的路径, (路由表中的 "下一条表项" ) ==> 把 IP 数据报指引向更上级的路由器(越上级的路由器就知道越多的内容)
以上是路由选择转发的过程**(简化版)**
其中细节部分还有 路由表是如何生成的, 路由表如何进行匹配 ...(具体不多阐述)