文章目录
- 第一部分:IPv4(IP 协议版本 4)
-
- 1 IP 数据报
-
- 1.1 IP 数据报格式
- 1.2 相关例题
- 2 分类编址(两级结构,网络号定长)
-
- 2.1 IP 地址的表示方法
- 2.2 IP 分类编址
- 2.3 IP 地址的特殊用途
- 3 无分类编址 CIDR(两级结构,网络前缀不定长)
-
- 3.1 网络前缀和地址块
- 3.2 地址掩码
- 3.3 构造超网和路由聚合
- 4 划分子网编址(三级结构,网络号定长)
-
- 4.1 子网掩码
- 4.2 定长子网掩码(FLSM)划分子网
-
- 例 1:假设申请到的 C 类网络为 218.75.230.0
- 例 2:假设地址块为 192.168.252.0/24
- 4.3 变长子网掩码(VLSM)划分子网
-
- 例 1:假设申请到的地址块为 218.75.230.0/24
- 例 2:假设地址块为 192.168.252.0/24
- 例 3:若将 101.200.16.0/20 划分为 5 个子网
- 5 IP 层转发分组的过程
-
- 5.1 IP 地址与 MAC 地址
- 5.2 IP 数据报的发送和转发过程
- 5.3 分组转发算法
- 5.4 最长前缀匹配
- 5.5 网络地址转换 NAT
-
- 例 1:分析 NAT 路由器的工作流程
- 例 2:假定一个 NAT 路由器的公网地址为 205.56.79.35
- 第二部分:IPv6(IP 协议版本 6)
-
- 1 IPv6 的特点
- 2 IPv6 数据报
- 3 IPv6 地址
- 4 IPv4 向 IPv6 过渡的策略
第一部分:IPv4(IP 协议版本 4)
1 IP 数据报
1.1 IP 数据报格式
IP 数据报的格式如下:
首部(发送在前) | 数据部分 |
---|---|
固定部分(20B)+ 可变部分 | 数据信息 |
IP 数据报首部的格式如下:
IP 首部的字段含义如下:
- 版本(4b):IP 协议版本,广泛使用的版本号为 4。
- 首部长度(4b,单位 4B):可表示的最小十进制为 5,最大十进制数为 15,以 4B 为单位,最大值为 60B(15 x 4B),用于指示首部的长度。
首部长度字段 | 首部长度 |
---|---|
5 | 20B |
6 | 24B |
7 | 28B |
… | … |
14 | 56B |
15 | 60B |
- 区分服务(DS)(8b):用来获得更好的服务,只有在使用区分服务时才起作用。
- 总长度(16b,单位 1B):首部和数据之和的长度,单位为字节。数据报的最大长度为 216-1 = 65535B,但是一个数据报的长度不能超过以太网帧的最大传送单元(MTU = 1500B),所以还需把数据报分片。
- 标识(16b):一个计数器,每产生一个数据报就加 1,但并不是序号,因为 IP 是无连接服务。
- 标志(3b):只有低两位有意义。
0/1 | 无意义(MSB) | DF(Don’t Fragment) | MF(More Fragment)(LSB) |
---|---|---|---|
0 | – | 不能分片 | 若干数据片中的最后一个 |
1 | – | 可以分片 | 后面还有数据片 |
- 片偏移(13b,单位 8B):某数据报片相对于数据字段的终点,以 8 个字节为偏移单位。除最后一个数据报片外,其他每个分片的长度一定是 8 字节的整数倍。
【例 1】原始数据报的总长度为 4000B(首部 20B,数据部分 3980B),标识号为 12345,需要转发到一条 MTU = 1500B 的以太网链路上,则 IP 分片为:
数据片报 | 位于原始数据报数据部分的位置 | 数据部分长度 | 总长度 | 标识 | MF | DF | 片偏移 |
---|---|---|---|---|---|---|---|
数据报片 1 | 0B ~ 1479B | 1500B – 20B = 1480B | 1500B | 12345 | 1 | 0 | 0 |
数据报片 2 | 1480B ~ 2959B | 2960B – 1480B = 1480B | 1500B | 12345 | 1 | 0 | 1480 / 8 = 185 |
数据报片 3 | 2960B ~ 3980B | 3980B – 2960B = 1020B | 1040B | 12345 | 0 | 0 | 2960 / 8 = 370 |
【例 2】原始数据报的总长度为 3820B(首部 20B,数据部分 3800B),标识号为 777,需要转发到一条 MTU = 1420B 的链路上,则 IP 分片为:
数据片报 | 位于原始数据报数据部分的位置 | 数据部分长度 | 总长度 | 标识 | MF | DF | 片偏移 |
---|---|---|---|---|---|---|---|
数据报片 1 | 0B ~ 1399B | 1420B – 20B = 1400B | 1420B | 777 | 1 | 0 | 0 |
数据报片 2 | 1400B ~ 2799B | 2800B – 1400B = 1400B | 1420B | 777 | 1 | 0 | 1400 / 8 = 175 |
数据报片 3 | 2800B ~ 3800B | 3800B – 2800B = 1000B | 1020B | 777 | 0 | 0 | 2800 / 8 = 350 |
- 生存时间(TTL)(8b):标识该数据报在网络中的寿命。路由器在转发数据报前,TTL 减 1。若 TTL 为 0,则该分组丢弃。注意,TTL 不是秒数,而是跳数,意义是数据报能在互联网最多可经过多少个路由器。
- 协议(8b):指出该数据报携带的数据使用何种协议。
协议名 | ICMP | TCP | UDP |
---|---|---|---|
协议字段值 | 1 | 6 | 17 |
- 首部校验和(16b):只校验首部,不校验数据部分。
- 源地址(32b):发送 IP 数据报的主机的 IP 地址。
- 目的地址(32b):接收 IP 数据报的主机的 IP 地址。
- 可选字段(0~40B):用来支持排错、测量以及安全等措施,内容丰富。
- 填充:全 0,把首部补充为 4B 的整数倍。
1.2 相关例题
【例 1】若路由器向 MTU = 800B 的链路转发一个总长度为 1580B 的 IP 数据报(首部长度为 20B)时,进行了分片,且每个分片尽可能大,则第 2 个分片的总长度字段和 MF 标志位的值分别是( )
A. 796, 0
B. 796, 1
C. 800, 0
D. 800, 1
【解】数据部分大小 = 1580B-20B = 1560B,则每个分片的情况:
分片 | 首部 | 数据部分 | MF |
---|---|---|---|
1 | 20B | 780B | 1 |
2 | 20B | 780B | 0 |
但是!数据部分的长度必须能被 8 整除,780 不能被 8 整除,所以要将 780 改成最大能被 8 整除的数即 776!
分片 | 首部 | 数据部分 | MF |
---|---|---|---|
1 | 20B | 776B | 1 |
2 | 20B | 776B | 1 |
3 | 20B | 8B | 0 |
答案选 B。
2 分类编址(两级结构,网络号定长)
2.1 IP 地址的表示方法
IP 地址指明了连接到某个网络上的一个主机或路由器。
- IP 地址的格式:
IP 地址 ::= {<网络号>, <主机号>}
- 点分十进制:每隔 8 位插入一个“.”,把 8 位二进制数转换为十进制数。
【例】
128.14.35.72
在计算机中表示为10000000.00001110.00100011.00000111
。
2.2 IP 分类编址
- A 类(网络号 1~126,单播地址):
0b~7b | 8b~32b |
---|---|
0 网络号 | 主机号 |
- B 类(网络号 128~191,单播地址):
0b~15b | 16b~32b |
---|---|
10 网络号 | 主机号 |
- C 类(网络号 192~223,单播地址):
0b~23b | 24b~32b |
---|---|
110 网络号 | 主机号 |
- D 类(网络号 224~339,多播地址):
0b~32b |
---|
1110 多播地址 |
- E 类(网络号 240~255):
0b~32b |
---|
1111 保留为今后使用 |
2.3 IP 地址的特殊用途
(需记忆)有些 IP 地址用作特殊用途,不用做 IP 地址(-1 表示所有位上都是 1):
网络号 | 主机号 | 作为源地址 | 作为目的地址 | 例子 | 用途 |
---|---|---|---|---|---|
0 | 0 | √ | x | 0.0.0.0 | 本网络上的本主机 |
-1 | -1 | x | √ | 255.255.255.255 | 只在本网络上进行广播 |
net-id | -1 | x | √ | 202.98.174.255 | 对网络号为 net-id 的所有主机进行广播 |
0 | host-id | √ | x | 0.0.0.250 | 在本网络上主机号为 host-id 的主机 |
127 | 非 0 且非 -1 | √ | √ | 127.0.0.1 | 用于本地软件环回测试 |
(需记忆)A 类、B 类、C 类地址的使用范围:
网络类别 | 最大可用网络数 | 每个网络中最大可用主机数 | 可用的网络号 |
---|---|---|---|
A | 27-2(减去 0 和 -1 的情况) | 224-2(减去 0 和 -1 的情况) | 1 ~ 126 |
B | 214 | 216-2(减去 0 和 -1 的情况) | 128.0 ~ 191.255 |
C | 221 | 28-2(减去 0 和 -1 的情况) | 192.0.0 ~ 223.255.255 |
3 无分类编址 CIDR(两级结构,网络前缀不定长)
3.1 网络前缀和地址块
- CIDR 地址的格式:
IP 地址 ::= {<网络前缀>, <主机号>}
- CIDR 记法(斜线记法):
IP 地址/网络前缀所占位数
- CIDR 地址块:把网络前缀都相同的所有连续 IP 地址组成一个 CIDR 地址块。
- 网络前缀越短的地址块所包含的地址数越多。
【例】
128.14.35.72/20
,前 20 位是网络前缀:1000 0000. 0000 1110. 0010 0011. 0000 0111
该地址块可表示为:
1000 0000. 0000 1110. 0010*
或128.14.32/20
若不需要指明网络地址时,可表示为:
/20地址块
该地址块的最小地址:
1000 0000. 0000 1110. 0010 0000. 0000 0000
,即128.14.32.0
该地址块的最大地址:
1000 0000. 0000 1110. 0010 1111. 1111 1111
,即128.14.47.255
该地址块能分配的最大可用主机数 = 212-2
- 特殊用途:
网络前缀 | 记法 | 用途 | 说明 |
---|---|---|---|
32b | a.b.c.d/32 | 没有主机号,用于主机路由 | 对特定目的主机的 IP 地址专门指明一个路由,方便管理人员控制和测试网络 |
31b | a.b.c.d/31 | 只有两个主机号 0 和 1,用于点对点链路 | |
0b | a.b.c.d/0 | 用于默认路由 | 不管分组的目的地址在哪里,都由指定的路由器 R 来处理 |
3.2 地址掩码
- 地址掩码:由一连串的 1 和一连串的 0 组成,1 的个数即为网络前缀的长度。
- 计算得到网络地址:把二进制的 IP 地址和地址掩码进行按位与运算,即可得到网络地址。
- A 类、B 类、C 类地址的地址掩码:
网络类别 | 地址掩码 |
---|---|
A 类 | 255.0.0.0 |
B 类 | 255.255.0.0 |
C 类 | 255.255.255.0 |
- 地址掩码中的二进制和十进制转换:
二进制 | 十进制 |
---|---|
1000 0000 | 128 |
1100 0000 | 192 |
1110 0000 | 224 |
1111 0000 | 240 |
1111 1000 | 248 |
1111 1100 | 252 |
1111 1110 | 254 |
1111 1111 | 255 |
【例】
128.14.35.72/20
,则/20地址块
的子网掩码:1111 1111. 1111 1111. 1111 0000. 0000 0000
与
128.14.35.72
进行按位与运算,得到网络前缀(网络地址):
十进制 IP 地址 | 128 | 14 | 35 | 72 |
---|---|---|---|---|
二进制 IP 地址 | 1000 0000 | 0000 1110 | 0010 0011 | 0000 0111 |
二进制子网掩码 | 1111 1111 | 1111 1111 | 1111 0000 | 0000 0000 |
按位与运算结果 | 1000 0000 | 0000 1110 | 0010 0000 | 0000 0000 |
十进制网络地址 | 128 | 14 | 32 | 0 |
3.3 构造超网和路由聚合
- 构造超网:CIDR 地址块包含了多个 C 类地址,因此 CIDR 编址又称为构成超网。
- 路由聚合:大的 CIDR 地址块中包含很多较小的地址块,我们可以用较大的 CIDR 地址块来代替许多较小的地址块。
- 路由聚合的方法:找共同前缀。
- 注意:地址块的数字越小,地址块越大。比如地址块
/27
比地址块/30
大。
【例】某路由表中有转发接口相同的 4 条路由表项,其目的网络地址分别为 35.230.32.0/21, 35.230.40.0/21, 35.230.48.0/21 和 35.230.56.0/21,将该 4 条路由聚合后的目的网络地址为( )
A. 35.230.0.0/19
B. 35.230.0.0/20
C. 35.230.32.0/19
D. 35.230.32.0/20
【解】先将四个地址化为二进制,再找出公共前缀,即可得知选 C,如下表所示。
地址 | 8b | 8b | 8b | 8b |
---|---|---|---|---|
地址 1 | 35 | 230 | 0010 0000 | 0 |
地址 2 | 35 | 230 | 0010 1000 | 0 |
地址 3 | 35 | 230 | 0011 0000 | 0 |
地址 4 | 35 | 230 | 0011 1000 | 0 |
4 划分子网编址(三级结构,网络号定长)
4.1 子网掩码
- 三级 IP 地址格式:
IP 地址 ::= {<网络号>, <子网号>, <主机号>}
- 子网掩码:由一连串的 1 和一连串的 0 组成,1 的个数即为网络号和子网号的长度。
- 计算得到网络地址:把二进制的 IP 地址和子网掩码进行按位与运算,即可得到网络地址。
【注】子网掩码和地址掩码其实是同一个概念,只不过指示的内容不同。
4.2 定长子网掩码(FLSM)划分子网
- 定长子网掩码划分子网:所划分出的每一个子网都使用同一个子网掩码。
- 特点:每个子网所分配的IP地址数量相同,容易造成地址资源的浪费。
例 1:假设申请到的 C 类网络为 218.75.230.0
【例 1】假设申请到的 C 类网络为218.75.230.0
,使用定长的子网掩码划分子网来满足需求:网络 1 需要 IP 地址数量为 9,网络 2 需要 IP 地址数量为 28,网络 3 需要 IP 地址数量为 15,网络 4 需要 IP 地址数量为 13,网络 5 需要 IP 地址数量为 4。
【解】因为有 5 个子网,因此可以从主机号借来 3 个比特作为子网号使用,则子网掩码为:11111111.11111111.11111111.1110000 --> 255.255.255.224
该 C 类网的格式如下表所示,子网号一共 3 个比特,可划分 8 个子网;主机号一共 5 个比特,说明每个子网可供 32 个主机使用:
网络号 | 子网号 | 主机号 |
---|---|---|
218.75.230. | 000 | 00000 |
218.75.230. | 000 | 00001 |
… | … | … |
218.75.230. | 000 | 11110 |
218.75.230. | 000 | 11111 |
218.75.230. | 001 | 00000 |
… | … | … |
218.75.230. | 111 | 11110 |
218.75.230. | 111 | 11111 |
所以一共划分为 8 个子网,可供上述 5 个子网选择使用:
子网 | 网络地址 | 该子网的可分配地址 | 广播地址 |
---|---|---|---|
1 | 218.75.230.0 | 218.75.230.1 ~ 218.75.230.30 | 218.75.230.31 |
2 | 218.75.230.32 | 218.75.230.33 ~ 218.75.230.62 | 218.75.230.63 |
3 | 218.75.230.64 | 218.75.230.65 ~ 218.75.230.94 | 218.75.230.95 |
4 | 218.75.230.96 | 218.75.230.97 ~ 218.75.230.126 | 218.75.230.127 |
5 | 218.75.230.128 | 218.75.230.129 ~ 218.75.230.158 | 218.75.230.159 |
6 | 218.75.230.160 | 218.75.230.161 ~ 218.75.230.190 | 218.75.230.191 |
7 | 218.75.230.192 | 218.75.230.193 ~ 218.75.230.222 | 218.75.230.223 |
8 | 218.75.230.224 | 218.75.230.225 ~ 218.75.230.254 | 218.75.230.255 |
例 2:假设地址块为 192.168.252.0/24
【例 2】假设地址块为 192.168.252.0/24,使用定长的子网掩码划分子网来满足需求:网络 1 需要 IP 地址数量为 63,网络 2 需要 IP 地址数量为 23,网络 3 需要 IP 地址数量为 13,网络 4 需要 IP 地址数量为 4。
【解】因为有 4 个子网,因此可以从主机号借来 2 个比特作为子网号使用,则子网掩码为:11111111.11111111.11111111.11000000 --> 255.255.255.192
该地址块的格式如下表所示,子网号一共 2 个比特,可划分 4 个子网;主机号一共 6 个比特,说明每个子网可供 64 个主机使用:
网络号 | 子网号 | 主机号 |
---|---|---|
218.75.230. | 00 | 000000 |
218.75.230. | 00 | 000001 |
… | … | … |
218.75.230. | 00 | 111110 |
218.75.230. | 00 | 111111 |
218.75.230. | 01 | 000000 |
… | … | … |
218.75.230. | 11 | 111110 |
218.75.230. | 11 | 111111 |
所以一共划分为 4 个子网,可供上述 4 个子网选择使用:
子网 | 网络地址 | 该子网的可分配地址 | 广播地址 |
---|---|---|---|
1 | 218.75.230.0 | 218.75.230.1 ~ 218.75.230.62 | 218.75.230.63 |
2 | 218.75.230.64 | 218.75.230.65 ~ 218.75.230.126 | 218.75.230.127 |
3 | 218.75.230.128 | 218.75.230.129 ~ 218.75.230.190 | 218.75.230.191 |
4 | 218.75.230.192 | 218.75.230.193 ~ 218.75.230.254 | 218.75.230.255 |
4.3 变长子网掩码(VLSM)划分子网
- 变长子网掩码划分子网:所划分出的每一个子网可以使用不同的子网掩码。
- 特点:每个子网所分配的IP地址数量可以不同,尽可能减少对地址资源的浪费。
- 在地址块中选取子块的原则:每个子块的起点位置不能随便选取,只能选取主机号部分是块大小整数倍的地址作为起点。建议先为大的子块选取。
例 1:假设申请到的地址块为 218.75.230.0/24
【例 1】假设申请到的地址块为218.75.230.0/24
,使用变长的子网掩码划分子网来满足需求:网络 1 需要 IP 地址数量为 9,网络 2 需要 IP 地址数量为 28,网络 3 需要 IP 地址数量为 15,网络 4 需要 IP 地址数量为 13,网络 5 需要 IP 地址数量为 4。
【解】各网络的情况如下表所示:
网络序号 | 需要 IP 地址数量 | 主机号位数 | 网络前缀位数 | 地址块 | 可使用的地址数量 |
---|---|---|---|---|---|
1 | 9 | 4 24=16) | 32-4=28 | /28 | 16 |
2 | 28 | 5 25=32) | 32-5=27 | /27 | 32 |
3 | 15 | 4 24=16) | 32-4=28 | /28 | 16 |
4 | 13 | 4 24=16) | 32-4=28 | /28 | 16 |
5 | 4 | 2 22=4) | 32-2=30 | /30 | 4 |
从地址块 218.75.230.0/24 中取出 5 个地址块(/30,/28,/28,/28,/27):
IP 地址 | 用途 |
---|---|
218.75.230.0 ~ 218.75.230.31 | 供网络 2 使用,拥有 32 个地址,主机号为 0 |
218.75.230.32 ~ 218.75.230.47 | 供网络 1 使用,拥有 16 个地址,主机号为 32 |
218.75.230.48 ~ 218.75.230.63 | 供网络 3 使用,拥有 16 个地址,主机号为 48 |
218.75.230.64 ~ 218.75.230.79 | 供网络 4 使用,拥有 16 个地址,主机号为 64 |
218.75.230.80 ~ 218.75.230.83 | 供网络 5 使用,拥有 4 个地址,主机号为 80 |
218.75.230.84 ~ 218.75.230.255 | 剩余待分配 |
例 2:假设地址块为 192.168.252.0/24
【例 2】假设地址块为 192.168.252.0/24,使用变长的子网掩码划分子网来满足需求:网络 1 需要 IP 地址数量为 63,网络 2 需要 IP 地址数量为 23,网络 3 需要 IP 地址数量为 13,网络 4 需要 IP 地址数量为 4。
【解】各网络的情况如下表所示:
网络序号 | 需要 IP 地址数量 | 主机号位数 | 网络前缀位数 | 地址块 | 可使用的地址数量 |
---|---|---|---|---|---|
1 | 63 | 6 26=64) | 32-6=26 | /26 | 64 |
2 | 23 | 5 25=32) | 32-5=27 | /27 | 32 |
3 | 13 | 4 24=16) | 32-4=28 | /28 | 16 |
4 | 4 | 2 22=4) | 32-2=30 | /30 | 4 |
从地址块 192.168.252.0/24 中取出 5 个地址块(/30,/28,/27,/26):
IP 地址 | 用途 |
---|---|
192.168.252.0 ~ 192.168.252.63 | 供网络 1 使用,拥有 64 个地址,主机号为 0 |
192.168.252.64 ~ 192.168.252.95 | 供网络 2 使用,拥有 32 个地址,主机号为 64 |
192.168.252.96 ~ 192.168.252.111 | 供网络 3 使用,拥有 16 个地址,主机号为 96 |
192.168.252.112 ~ 192.168.252.115 | 供网络 4 使用,拥有 4 个地址,主机号为 112 |
192.168.252.116 ~ 192.168.252.255 | 剩余待分配 |
【注】若还要继续分配网络,则不能在 192.168.252.116 处开始分配,因为 116 不能被 4、8、16、32、64、… 整除,所以该地址不能分配大小为 4、8、16、32、64、… 的地址块。那么应该从哪里开始分配地址呢?见下表:
分配的地址块大小 | 起始地址 |
---|---|
4 | 192.168.252.120 |
8 | 192.168.252.120 |
16 | 192.168.252.128 |
32 | 192.168.252.128 |
64 | 192.168.252.128 |
128 | 192.168.252.128 |
… | … |
例 3:若将 101.200.16.0/20 划分为 5 个子网
【例 3】若将 101.200.16.0/20 划分为 5 个子网,则可能的最小子网的可分配 IP 地址数是( )
A. 126
B. 254
C. 510
D. 1022
【解】地址块 101.200.16.0/20 主机号位数为 32-20=12,即 101. 200. 0001 0000. 0000 0000,包含地址数量为 212=4096 个。
若要求最小子网,则不能采用均匀分配,要采用不均匀的子网划分,因此采用哈夫曼编码的方式确定子网号。
- 子网 1:101. 200. 0001 0000. 0000 0000,子网号为 1 位,IP 地址数为 2048 个
- 子网 2:101. 200. 0001 1000. 0000 0000,子网号为 2 位,IP 地址数为 1024 个
- 子网 3:101. 200. 0001 1100. 0000 0000,子网号为 3 位,IP 地址数为 512 个
- 子网 4:101. 200. 0001 1110. 0000 0000,子网号为 4 位,IP 地址数为 256 个
- 子网 5:101. 200. 0001 1111. 0000 0000,子网号为 4 位,IP 地址数为 256 个
去掉网络地址和广播地址,可分配 IP 地址数为 254 个,选 B。
(请参考《(考研复习)子网划分小题解析》)
5 IP 层转发分组的过程
5.1 IP 地址与 MAC 地址
数据报传送过程中 IP 地址(逻辑地址)与 MAC 地址(硬件地址)的变化情况:
- 在数据包的传送过程中,数据包的源 IP 地址和目的 IP 地址保持不变。
- 在数据包的传送过程中,数据包的源 MAC 地址和目的 MAC 地址逐链路(或逐网络)改变。
- 若仅使用 MAC 地址进行通信:包含海量 MAC 地址的路由信息需要路由器具备极大的存储空间,并且会给分组的查表转发带来非常大的时延。
【例 1】下图中各主机和路由器各接口的 MAC 地址和所配置的 IP 地址都已标注在它们的旁边,假设主机 H1 要给 H2 发送一个 IP 数据报,该 IP 数据报会被封装成以太网帧进行发送,则当 H2 收到该帧时,其首部中的源 MAC 地址以及所封装的 IP 数据报首部中的源 IP 地址分别是( )
A. 00-a1-b2-c3-d4-61,192.168.1.254
B. 00-a1-b2-c3-d4-61,192.168.0.1
C. 00-a1-b2-c3-d4-51,192.168.0.1
D. 00-a1-b2-c3-d4-51,192.168.1.254
【解】答案为选项 B,见下表:
传输区间 | 网络层 IP 数据报首部的源 IP 地址 | 网络层 IP 数据报首部的目的 IP 地址 | 数据链路层帧首部的源 MAC 地址 | 数据链路层帧首部的目的 MAC 地址 |
---|---|---|---|---|
H1 –> R | 192.168.0.1 | 192.168.1.1 | 00-a1-b2-c3-d4-51 | 00-a1-b2-c3-d4-52 |
R –> H2 | 192.168.0.1 | 192.168.1.1 | 00-a1-b2-c3-d4-61 | 00-a1-b2-c3-d4-62 |
【例 2】路由器 R 通过以太网交换机 S1 和 S2 连接两个网络,R 的接口、主机 H1 和 H2 的 IP 地址与 MAC 地址如下图所示。若 H1 向 H2 发送一个 IP 分组 P,则 H1 发出的封装 P 的以太网帧的目的 MAC 地址、H2 收到的封装 P 的以太网帧的源 MAC 地址分别是( )
A. 00-a1-b2-c3-d4-62,00-1a-2b-3c-4d-52
B. 00-a1-b2-c3-d4-62,00-1a-2b-3c-4d-61
C. 00-1a-2b-3c-4d-51,00-1a-2b-3c-4d-52
D. 00-1a-2b-3c-4d-51,00-a1-b2-c3-d4-61
【解】答案为选项 D,见下表:
传输区间 | 网络层 IP 数据报首部的源 IP 地址 | 网络层 IP 数据报首部的目的 IP 地址 | 数据链路层帧首部的源 MAC 地址 | 数据链路层帧首部的目的 MAC 地址 |
---|---|---|---|---|
H1 –> R | 192.168.3.2 | 192.168.4.2 | 00-a1-b2-c3-d4-52 | 00-a1-b2-c3-d4-51 |
R –> H2 | 192.168.3.2 | 192.168.4.2 | 00-a1-b2-c3-d4-61 | 00-a1-b2-c3-d4-62 |
【注】查表转发的结果可以指明IP数据报的下一跳路由器的 IP 地址,但无法指明该 IP 地址所对应的 MAC 地址。因此,在数据链路层封装该 IP 数据报成为帧时,帧首部中的目的 MAC 地址字段就无法填写,该问题需要使用网际层中的地址解析协议 ARP 来解决。
5.2 IP 数据报的发送和转发过程
- 目的地址与路由器 R 的路由表第一行的地址掩码进行按位与运算,运算结果与目的网络不匹配。
- 目的地址与路由器 R 的路由表第二行的地址掩码进行按位与运算,运算结果与目的网络匹配。
- 若目的地址是
192.168.0.127
或255.255.255.255
(本网络的广播地址),则路由器不转发广播 IP 数据报(路由器 R 会隔离广播域)。如果因特网中数量巨大的路由器收到广播 IP 数据报后都进行转发,则会造成巨大的广播风暴,严重浪费因特网资源。
【注】默认网关和默认路由的区别:
- 默认网关:是一个 IP 地址;是与主机直接相连的路由器端口。
- 默认路由:是路由表中的一项,一般通往互联网的方向。
【例】某网络拓扑如下图所示,其中 R 为路由器,主机 H1~H4 的 IP 地址配置以及 R 的各接口 IP 地址配置如图中所示。现有若干台以太网交换机(无 VLAN 功能)和路由器两类网络互连设备可供选择。
请回答以下问题:
(1)设备 1、设备 2 和设备 3 分别应选择什么类型网络设备?
(2)设备 1、设备 2 和设备 3 中,哪几个设备的接口需要配置 IP 地址?并为对应的接口配置正确的 IP 地址。
(4)若主机 H3 发送一个目的地址为 192.168.1.127 的 IP 数据报,网络中哪几个主机会收到该数据报?
【解】(1)H1 和 H2 的网络前缀相同,因此设备 1 是交换机;同理,H3 和 H4 的网络前缀相同,因此设备 2 也是交换机。由于 H1 和 H3 的网络前缀不相同,因此设备 3 是路由器。
(2)路由器 IF1 = 192.168.1.254/30,IF2 = 192.168.1.1,IF3 = 192.168.1.65。
(4)192.168.1.127 为 H3 所在网络的广播地址,因此主机 H3 和 H4 都能收到该数据报。
5.3 分组转发算法
- 基于终点的转发:分组在互联网上传送和转发是基于分组首部的目的地址。
- 分组转发算法(前缀已按长短顺序排列):
- 从收到的 IP 分组的首部提取目的主机的 IP 地址 D。
- 用本网络的子网掩码和 D 进行按位与运算,若运算结果与网络地址匹配,则把分组直接交付,若不匹配则进行下一步。
- 若路由表中有特定地址为 D 的特定主机路由,则把分组传送给路由表中所指的下一跳路由器,否则执行下一步。
- 对路由表中的每一行,用子网掩码与 D 进行按位与运算,其结果为 N。若 N 与该行的目的网络地址匹配,则把分组传送给该行指明的下一跳路由器。否则执行下一步。
- 若路由表中有一个默认路由,则把分组传送给所指明的默认路由器。否则执行下一步。
- 报告转发分组出错。
【例】如图所示有三个子网,两个路由器,以及路由器 1 的部分路由表。现在源主机 H1 向目的主机 H2 发送分组。试着讨论 R1 收到 H1 向 H2 发送的分组后查找路由表的过程。(来源《使用子网时的分组转发算法》)
【解】源主机 H1 首先判断目的主机 H2 是否在本网络上:
十进制目的主机 IP 地址 | 128 | 30 | 33 | 138 |
---|---|---|---|---|
二进制目的主机 IP 地址 | 128 | 30 | 33 | 1000 1010 |
二进制本网络的子网掩码 | 255 | 255 | 255 | 1000 0000 |
按位与运算结果 | 128 | 30 | 33 | 1000 0000 |
十进制网络地址 | 128 | 30 | 33 | 128 |
因此得出的网络地址与本网络的网络地址不匹配,说明 H2 不在 H1 所在的网络中,必须把分组交给路由器 R1,让 R1 根据转发表来处理这个分组。
用 H2 的 IP 地址(128.30.33.138)与转发表每一行的子网掩码进行按位与运算,看是否匹配目的地址:
目的网络 | 子网掩码 | 下一跳 | 子网掩码与 H2 的 IP 地址的按位与运算 | 是否匹配 |
---|---|---|---|---|
128.30.33.0/25 | 255.255.255.128 | 接口 0 | 128.30.33.128 | x |
128.30.33.128/25 | 255.255.255.128 | 接口 1 | 128.30.33.128 | √(此时不再往下匹配) |
128.30.36.0/24 | 255.255.255.0 | R2 |
于是 R1 把分组从接口 1 交付给 H2。
5.4 最长前缀匹配
- 最长前缀匹配:使用 CIDR 查找路由表时可能会得到不止一个匹配结果,此时应当从匹配结果中选择具有最长网络前缀的路由。
- 网络前缀越长,其地址块就越小,路由越具体。
- 当使用 CIDR 后,由于不知道目的网络的前缀,使得转发表的查找过程更复杂了,因此采用二叉线索查找转发表。
- 分组转发算法(最长前缀匹配):
- 从收到的 IP 分组的首部提取目的主机的 IP 地址 D。
- 用本网络的子网掩码和 D 进行按位与运算,若运算结果与网络地址匹配,则把分组直接交付,若不匹配则进行下一步。
- 若路由表中有特定地址为 D 的特定主机路由,则把分组传送给路由表中所指的下一跳路由器,否则执行下一步。
- 对路由表中的每一行,用子网掩码与 D 进行按位与运算,其结果为 N。若 N 与该行的目的网络地址多个匹配,则取前缀最长的目的网络,把分组传送给该行指明的下一跳路由器。否则执行下一步。
- 若路由表中有一个默认路由,则把分组传送给所指明的默认路由器。否则执行下一步。
- 报告转发分组出错。
【例】路由器 R0 的路由表见下表,若进入路由器 R0 的分组的目的地址为 132.19.237.5,该分组应该被转发到( )下一跳路由器。
目的网络 | 下一跳 |
---|---|
132.0.0.0/8 | R1 |
132.0.0.0/11 | R2 |
132.19.232.0/22 | R3 |
0.0.0.0/0 | R4 |
A. R1
B. R2
C. R3
D. R4
【解】见下表:
目的网络 | 子网掩码 | 下一跳 | 子网掩码与目的地址的按位与运算 | 是否匹配 |
---|---|---|---|---|
132.0.0.0/8 | 255.0.0.0 | R1 | 132.0.0.0 | √ |
132.0.0.0/11 | 255.224.0.0 | R2 | 132.0.0.0 | √ |
132.19.232.0/22 | 255.255.252.0 | R3 | 132.19.236.0 | x |
0.0.0.0/0 | 0.0.0.0 | R4 | 0.0.0.0 | √ |
0.0.0.0/0 为默认路由,只有路由表中的所有网络都不能和分组的目的网络匹配时才使用。有三个目的网络均匹配,则选择前缀最长的路由,所以答案为选项 B。
5.5 网络地址转换 NAT
- 网络地址转换(NAT):通过将专用网络地址转换为公用地址,从而对外隐藏内部管理的 IP 地址。
- 私有 IP 地址:只用于 LAN,不用于 WAN,允许私有 IP 地址被 LAN重复使用。
- 私有 IP 地址网段:
网络类别 | 地址范围 | 网段个数 |
---|---|---|
A | 10.0.0.0 ~ 10.255.255.255 | 1 个 A 类网段 |
B | 172.16.0.0 ~ 172.31.255.255 | 16 个 B 类网段 |
C | 192.168.0.0 ~ 192.168.255.255 | 256 个 C 类网段 |
- 专用互联网(本地互联网):采用私有 IP 地址的互联网络
- NAT 路由器:在连接专用网和因特网的路由器上安装了 NAT 软件
- NAT 转换表:存放了
{本地 IP 地址: 端口}
到{全球IP 地址: 端口}
的映射,将多个私有 IP 地址映射到一个全球 IP 地址
【注】将 NAT 和运输层端口号结合使用,称为网络地址与端口号转换(Network Address and Port Translation,NAPT),但一般又称为 NAT。
例 1:分析 NAT 路由器的工作流程
【例 1】假设主机 A 端口号为 30000,主机 B 端口号为 80,(1)用户主机 A 向目的主机 B 发送分组,(2)用户主机 B 向目的主机 A 发送响应分组,请分析 NAT 路由器的工作流程。
【解】(1)用户主机 A 向目的主机 B 发送分组的过程如下。
- 在网络层(IP 层)的数据报:
IP 首部 | 运输层首部 | 应用层报文 |
---|---|---|
源 IP:192.168.0.3;目的 IP:213.18.2.4 | 源端口:30000;目的端口:80 | xxx |
- NAT 路由器收到 IP 数据报后,为该数据报生成一个新端口号 40001,在 NAT 转换表中新增一个表项:
WAN 端(外网) | LAN 端(内网) |
---|---|
172.38.1.5: 40001 | 192.168.0.3: 30000 |
- 通过 NAT 转换表,改写数据报,转发到主机 B:
IP 首部 | 运输层首部 | 应用层报文 |
---|---|---|
源 IP:172.38.1.5;目的 IP:213.18.2.4 | 源端口:40001;目的端口:80 | xxx |
(2)用户主机 B 向目的主机 A 发送响应分组的过程如下。
- 在网络层(IP 层)的数据报:
IP 首部 | 运输层首部 | 应用层报文 |
---|---|---|
源 IP:213.18.2.4;目的 IP:172.38.1.5 | 源端口:80;目的端口:40001 | xxx |
- NAT 路由器收到 IP 数据报后,通过 NAT 转换表,改写数据报,转发到主机 A:
IP 首部 | 运输层首部 | 应用层报文 |
---|---|---|
源 IP:213.18.2.4;目的 IP:192.168.0.3 | 源端口:80;目的端口:30000 | xxx |
例 2:假定一个 NAT 路由器的公网地址为 205.56.79.35
【例 2】假定一个 NAT 路由器的公网地址为 205.56.79.35,并且有如下表项:
转换端口 | 源 IP 地址 | 源端口 |
---|---|---|
2056 | 192.168.32.56 | 21 |
2057 | 192.168.32.56 | 20 |
1892 | 192.168.48.26 | 80 |
2256 | 192.168.55.106 | 80 |
它收到一个源 IP 地址为 192.168.32.56,源端口为 80 的分组,其动作是( )。
A. 转换地址,将源 IP 变为 205.56.79.35,端口变为 2056,然后发送到公网
B. 添加一个新的条目,转换 IP 地址以及端口然后发送到公网
C. 不转发,丢弃该分组
D. 直接将分组转发到公网上
【解】NAT 的表项需要管理员添加,这样可以控制一个内网到外网的网络连接。题目中主机发送的分组在 NAT 表项中找不到(端口 80 是从源端口找,而不是转换端口),所以服务器就不转发该分组。选 C。
第二部分:IPv6(IP 协议版本 6)
1 IPv6 的特点
- 更大的地址空间:IPv6 将 IPv4 的 32 比特地址空间增大到了 128 比特,在采用合理编址方法的情况下,在可预见的未来是不会用完的。
- 扩展的地址层次结构
- 灵活的首部格式
- 改进的选项
- 允许协议继续扩充
- 支持即插即用(即自动配置)
- 支持资源的预分配
2 IPv6 数据报
与 IPv4 相比,IPv6 数据报首部的某些字段作了以下更改:
- 取消首部长度字段,因为首部长度已被固定为 40B
- 取消服务类型字段
- 取消总长度字段
- 取消标识、标志、片偏移字段
- 将 TTL 字段改为跳数限制字段
- 取消协议字段
- 取消校验和字段
- 取消选项字段
3 IPv6 地址
- 三种类型:单播、多播、任播
- 冒号十六进制记法:
68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF
- 零压缩(只能使用一次):
- 连续零:
68E6:0:0:0:0:0:0:FFFF
–>68E6::FFFF
- 左侧零:
0:0:0:0:0:0:128.10.2.1
–>::128.10.2.1
- 左侧零:
0:0:0:0:0:0:0:FFFF
–>::FFFF
- 左侧零:
0:0:0:0:0:0:0:0
–>::
- 连续零:
4 IPv4 向 IPv6 过渡的策略
- 双协议栈技术
- 隧道技术
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2204050.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
【计算机网络-网络层】IPv4 和 IPv6
文章目录第一部分:IPv4(IP 协议版本 4)1 IP 数据报1.1 IP 数据报格式1.2 相关例题2 分类编址(两级结构,网络号定长)2.1 IP 地址的表示方法2.2 IP 分类编址2.3 IP 地址的特殊用途3 无分类编址 CIDRÿ……
设计模式-第25章(模式总结)
模式总结设计模式分类六大设计原则创建型模式总结结构型模式总结行为型模式一行为型模式二总结设计模式分类
设计模式分为三个类别,分别是创建型模式,结构型模式和行为型模式。 创建型模式有单例模式,工厂方法模式,抽象工厂模式&……
Java 各种锁的理解与实现-1
一. volatile 是轻量级锁: 可见性:当某一个线程修改了某个共享变量的值,其他线程是否能立即知道该变更 只能修饰在变量上,使得 cpu 每次对于该变量的修改和读取都从内存中操作,而不是从CPU cache 中操作,保……
Linux驱动——procfs接口创建
文章目录procfs接口创建procfs新接口上篇介绍了Linux驱动中sysfs接口的创建,今天介绍procfs接口的创建。
procfs:可实现类似cat /proc/cpuinfo的操作
procfs接口创建 实现效果:
例如, 在/proc下创建一个clk节点,通过cat /proc/……
91卫图助手免费获取高清影像
…
【MySQL】分库分表问题
将原本存储于单个数据库上的数据拆分到多个数据库,把原来存储在单张数据表的数据拆分到多张数据表中,实现数据切分,从而提升数据库操作性能。分库分表的实现可以分为两种方式:垂直切分和水平切分
水平:将数据分散到多……
一个几乎全民都会的算法——二分查找
为什么说二分查找是全民都会的算法?
20年前央视2套有一档叫《幸运52》的综艺节目,其中一个环节叫《幸运超市》,每一期已故著名主持人咏哥都会给佳宾们出示几个商品,凡是佳宾猜中价格的,就能获赠这件商品。这档节目红极……
嵌入式 LINUX 应用程序开发标准教程
嵌入式 Linux(Embedded Linux)是指对标准 Linux 经过小型化裁剪处理之后,能够固化在容量只有几 KB或者几 MB 的存储器芯片或者单片机中,是适合于特定嵌入式应用场合的专用 Linux 操作系统。 改善的内核结构。 Linux 内核采用的是整……
【Vue+Element】实现日历任务展示
【VueElement】实现日历任务展示
效果图 代码
新建Calendar.vue
<template><div><!– 日历头部 –><div class"calendar-header"><div class"calendar-header-btn"><i class"el-icon-d-arrow-left" click&q……
如何快速入门部署自己的Flask程序(本地+云服务器)?
一、需求背景:人工智能训练好的模型model,需要放到服务器上,作为基础能力提供给应用侧,否则model只能中电脑本地处理。那么怎么解决这个部署到服务器上的问题呢?
二、解决思路:web应用部署,有3……
cocos2d-js 中scrollview详解
/****
开头的一些废话:
1、多思考,善于思考
2、懂得变通
3、多多查询API首先复制一段 API中的源码:(UIScrollView.js)这段代码可以看出 scrollview
中的容器是一个node,并且他的位置是:代码最后……
cocos2d-js中的回调函数中世界坐标系和节点坐标系的相互转换
世界坐标系和节点坐标系都是OPENGL 坐标系 1、世界坐标系原点就是屏幕的左下角; 2、节点坐标系的原点就是一个节点的左下角; 3、两个坐标系可以通过已经写好的cocosAPI进行想换转换; 4、所有的节点需要转为一个节点上或者是统一的世界坐标系……
通过JavaScript实现漂浮
<html>
<head><meta http-equiv"Content-Type" content"text/html"; charset"gb2312" /><title>漂浮广告</title><style type"text/css">div{position:absolute;}</style>
</head>
&……
序列动画和图片内存问题
一、帧动画问题 /*** 帧动画总结:* 1、如果精灵进行新建时,加载了纹理,那么setRestoreOriginalFrame可以设置为false或者true* 2、如果精灵新建时,没有加载纹理的话,那么setRestoreOriginalFrame需要设置为false&#……
冒泡排序的两种写法
//第一种写法: #include <iostream> using namespace std; void bubbleSortint arr[], int n) { for int i 0; i < n-1; i) { int temp 0; for int j i1; j <n; j) { if arr[i] ……
c++中this详解
http://blog.csdn.net/ugg/article/details/606396…
编程是可以从事一生的职业吗
暂且不论这个话题,留待以后再添加见解。
目前而言,编程符合自己的性格和兴趣,且可以解决自我的生活,一举两得,总算是做了自己喜欢的事情。2016-7-24
在此立文以自勉!
2016-8-30: 1、编程就是一个不断和自我的惰性做……
STL中常用容器详解
常用的容器
一、顺序容器 1、vector 向量 :随机访问(按照下标)任何一个元素,在尾部增删元素,相当于是一个动态的数组。 vector容器,在头部增加、删除元素,其时间消耗和元素数目成正比ÿ……
c++中的继承的讲解
cpp中的继承的总结: 1、继承方式对于之列继承自父类的成的访问权限的影响 对于父类本身没有影响,对于子类扩展成员也没有影响。 2、子类中从父类继承的成员,其访问权限不能高于继承声明时使用的访问权限。 私有继承: 子类中所有继……
c++虚函数的讲解
废话少说,直接上测试代码 #include<iostream> #include<stdlib.h>usingnamespace std;//有虚函数的类 class A{public:A);~A);virtual void f){cout<<"this is A f)"<<endl;}virtual void g){cout<<"this is A g……
编程日记2023/4/16 15:01:18