一、网络地址转换NAT
• 网络地址转换 NAT 方法于1994年提出。
• 需要在专用网连接到因特网的路由器上安装 NAT 软件。装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球地址 IPG。
• 所有使用本地地址的主机在和外界通信时都要在 NAT 路由器上将其本地地址转换成 IPG 才能和因特网连接。
二、专用地址
• 10.0.0.0 到 10.255.255.255
• 172.16.0.0 到 172.31.255.255
• 192.168.0.0 到 192.168.255.255
• 这些地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。
• 专用地址只能用作本地地址而不能用作全球地址。在因特网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。
• 普通路由器在转发IP数据报时,不改变其源IP地址和目的IP地址。而NAT路由器在转发IP数据报时,一定要更换其IP地址(转换源IP地址或目的IP地址)。
• 为了更有效的利用NAT路由器上的全球IP地址,现在常用的NAT转换表把传输层的端口号也利用上。使用端口号的NAT也叫做网络地址与端口号转换NATP(Network Address and PortTranslation)
• 普通路由器仅工作在网络层,NAT路由器因为“看到了”端口号,所以工作在传输层
三、子网划分
• 由于两级IP地址的设计不够合理,带来了如下一些问题
1)IP地址空间的利用率有时很低
2)给每个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏
3)两级的IP地址不够灵活
1. 从两级 IP 地址到三级 IP 地址
2. 从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
IP地址 ::= {<网络号>, <子网号>, <主机号>}
3. 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机。
• 当没有划分子网时,IP地址是两级结构。划分子网后IP地址变成了三级结构。划分子网只是把IP地址的主机号这部分进行再划分,而不改变IP地址原来的网络号。
• 需要注意的是,原子网号不能全为0或全为1,现在随着无分类编址CIDR的广泛使用,子网号也可以全0或全1了,但要求路由器有软件支持。无论IPv4还是CIDR,主机号全0或全1都不能分配。主机号全0是子网网络号,主机号全1是子网广播地址。
一个未划分子网的 B 类网络145.13.0.0
划分为三个子网后对外仍是一个网络
子网掩码
• 从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
• 使用子网掩码(subnet mask)可以找出 IP 地址中的子网部分。
(IP 地址) AND (子网掩码) =网络地址
默认子网掩码
使用子网掩码的分组转发过程
• 路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
• 路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
• 若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
• 但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
• 因此分组转发的算法也必须做相应的改动。
在划分子网的情况下路由器转发分组的算法
(1) 从收到的分组的首部提取目的 IP 地址D。
(2) 先用各网络的子网掩码和D 逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行(3)。
(3) 若路由表中有目的地址为D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行(4)。
(4) 对路由表中的每一行的子网掩码和D 逐位相“与”,若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
四、CIDR
• 无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
• CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。
• CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号。
• IP 地址从三级编址(使用子网掩码)又回到了两级编址。
• 无分类的两级编址的记法是:IP地址 ::= {<网络前缀>, <主机号>}
• CIDR 还使用“斜线记法”(slash notation),它又称为CIDR记法,即在 IP 地址面加上一个斜线“/”,
然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。
• CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。
CIDR 地址块
• 128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这
个地址的主机号是 12 位)。
• 这个地址块的起始地址是 128.14.32.0。
• 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
• 128.14.32.0/20 地址块的最小地址:128.14.32.0
• 128.14.32.0/20 地址块的最大地址:128.14.47.255
• 全 0 和全 1 的主机号地址一般不使用。
路由聚合(route aggregation)
• 一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个
项目可以表示很多个(例如上千个)原来传统分类地址的路由。
• 路由聚合也称为构成超网(supernetting)。
最长前缀匹配
• 使用 CIDR 时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成。在查找路由表时可能
会得到不止一个匹配结果。
• 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(longest-prefix matching)。
• 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。
• 最长前缀匹配又称为最长匹配或最佳匹配。
使用CIDR转发分组的过程
(1) 从收到的分组的首部提取目的IP地址D.
(2)先用其网络的子网掩码和D逐位相“与”,看是否和相应的网络地址匹配。若匹配,则将分
组直接交付。否则就是间接交付,执行(3)。
(3)若路由表中有目的地址为D的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执
行(4)。
(4)对路由表中的每一行(网络前缀、下一跳地址),将其中的掩码和D逐比特相与,若仅有一行
匹配,则将数据报传输给指明的下一跳路由器;若有多行匹配,则从匹配结果中选择具有最长网
络前缀的路由,将数据报传输给指明的下一跳路由器;否则,没有一行匹配,执行(5)
(5)若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行
(6)报告转发分组出错。
五、IPv6
IPv4取得了极大的成功,但IPv4地址资源的紧张限制了Inernet的进一步发展,网络地址转换NAT、
无类别编制由CIDR、可变长子网掩码VLSM等技术的使用仅仅暂时缓解了IPv4地址紧张, 但不是根
本解决办法。解决地址耗尽的根本措施就是采用具有更大地址空间的新版本的IP,即IPv6.
• 和IPv4相比,IPv6的主要特点如下:
1)更大的地址空间。IPv6把地址从IPv4的32位增大到128位,使地址空间增大了296倍。
2)扩展的地址层次结构。IPv6由于地址空间很大,因此可以划分为更多的层次。
3)灵活的首部格式。IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且还可提高
路由器的处理效率,这是因为路由器对扩展首部不进行处理(除逐跳扩展首部外)。
4)改进的选项。IPv6允许数据报包含有选项的控制信息,因而可以包含--些新的选项。但IPv6的首
部长度是固定的,其选项放在有效载荷中。
5)允许协议继续扩充。因为技术总是在不断地发展(如网络硬件的更新)而新的应用也还会出现。
6)支持即插即用(即自动配置)。因此IPv6不需要使用DHCP。
7)支持资源的预分配。IPv6支持实时视像等要求保证一定的带宽和时延的应用。
8)IPv6首部长度必须是8B的整数倍。
• 一般来讲,一个IPv6数据报的目的地址可以是以下三种基本类型地址之一。
(1)单播(unicast)单播就是传统的点对点通信,单播地址标识单个网络接口。
(2)多播(multicast)多播是一点对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有采
用广播的术语,而是将广播看作多播的--个特例。多播地址标识--组网络接口,典型的是在不同的位
置,可以把一个分组发送给在该组中所有的网络接口。
(3)任播(anycast)这是IPv6增加的一种类型。任播的终点是一组计算机,但数据报只交付其中的一
个,通常是距离最近的一个。任播地址也标识一组网络接口,但是分组仅仅被发送到在该组中的一
个网络接口,通常是离发送方最近的一个接口。
IPv6把实现IPv6的主机和路由器均称为结点。IPv6给结点的每一个接口指派一个IP地址。一个结点
可以有多个单播地址,而其中任何一个地址都可以当作到达该结点的目的地址。
• IPv6地址128位长,用冒号十六进制记法表示,即用冒号将128位分割成8个16位的部分,每个部
分包括4位的16进制数字。在冒号十六进制记法中,允许把数字前面的0省略:
如6000:0000:0000:0000:00D0:0234:ABCD:89A0 可表示为6000:0:0:0:D0:234:ABCD:89A0
也允许零压缩(zero compression),即一连串连续的零可以为一对冒号(::) 所取代,并规定在任
一地址中只能使用一次零压缩:
如6000:0000:0000:0000:00D0:234:ABCD:89A0可表示为 6::D0:234:ABCD:89A0。
• 冒号十六进制记法可结合使用点分十进制记法的后缀。CIDR的斜线表示法仍然可用。
• IPv4向IPv6过渡可以采用两种策略,即使用双协议栈和隧道技术。