划分子网
原因:之前的二级IP结构地址,因为分类划分为A,B,C,D四类网址,有些时候总是不能满足需求,因为空间国过多或者空间过少造成了空间资源的浪费
从主机号借来若干个位,作为子网号subnet-id,而主机号host-id也就相应减少了若干个位
IP地址::={<网络号>,<子网号>,<主机号>}
原来的二级IP地址:
二级IP地址 | net-id | host-id |
网络号 | 主机号 |
三级IP地址:
三级IP地址 | net-id | subnet-id | host-id |
网络号 | 子网号 | 主机号 |
划分子网是公司内部的事情,如何知晓是否进行了子网的划分?如何计算子网号?
从一个IP数据报的首部并无法判断源主机或者目的主机所连接的网络是否进行了子网划分
使用子网掩码(subnet mask)可以找出IP地址中的子网部分
其实就是对于分布的子网再进行划分
衍生出来的问题:
首先,从一个IP数据报的首部无法判断源主机或者目的主机所连接的网络是否进行了子网划分
使用子网掩码(subnet mask)可以找出IP地址中的子网部分
IP地址的各字段和子网掩码
两级IP地址 | 网络号 | 主机号 | ||
145 | 13 | 3 | 10 | |
三级IP地址 | 网络号 | 子网号 | 主机号 | |
145 | 13 | 3 | 10 | |
子网掩码 | 子网号位3的网络的网络号 | 主机号 | ||
11111111 | 11111111 | 11111111 | 00000000 | |
子网的网络地址 | 255 | 255 | 255 | 0 |
145 | 13 | 3 | 0 |
现在可以获得的情报:
子网掩码的子网号为3的网络的网络号全为1,主机号为0
子网掩码是一个网络或者是一个子网的重要属性,路由器在和相邻路由交换路由信息时,必须把自己所在网络的子网掩码告诉相邻路由器。
路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码
若一个路由器连接在两个子网上就能拥有两个网络地址和两个子网掩码。
IP地址与子网掩码——逐位相与运算
(IP地址) and (子网掩码) = 网络地址
首先介绍与运算:0与1相与=0 1与0相与=0 1与1相与=1
例题:IP地址为141.14.72.24 子网掩码:255.255.192.0
两级IP地址 | 网络号 | 主机号 | 备注 | ||
141 | 14 | 72 | 24 | ||
三级IP地址 | 网络号 | 子网号 | 主机号 | ||
141 | 14 | 01001000 | 24 | 子网号化为2进制 | |
子网掩码 | 子网号位3的网络的网络号 | 主机号 | |||
题中子网掩码是255.255.192.0 | 11111111 | 11111111 | 11000000 | 00000000 | 子网掩码转化为二进制 |
子网的网络地址 | 141 | 14 | 01001000 | 24 | 子网号进行相与运算 |
网络地址(点分十进制) | 141 | 14 | 64 | 0 | 答案 |
现在可以获得的情报:不同的子网掩码可以得出相同的网络地址,但不同的掩码的效果是不同的。
结论:
1.在各类局域网络中得到了广泛应用
2.划分子网后,IP地址为网络号,子网号,主机号三级结构
3.网络地址变成了网络号+子网号,可以通过IP地址与子网掩码逐位相与得到。
问题:如何根据目的IP和子网掩码计算出目的网络地址后,如何实现分组在网络层的依次转发?
分组转发算法
上个问题的答案:查找路由表
根据目的网络地址确定下一跳路由器,这样做的结果
IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)
只有到达最后一个路由器时,才试图向目的主机进行直接交付。
这种路由器为特定的目的主机指明一个路由
采用特定主机路由可以使网络管理人员能更方便地控制网络和测试网络,同时也可在学要考虑某种安全问题时采用这种特定主机路由。
第二种路由:默认路由
优点:减少路由表所占用的空间和搜索路由表所用的时间
缺点:这种转发方式在一个网络只有很少的对外连接时是很有用的
如果一个主机连接在一个小网络上,而这个网络只用一个路由器和因特网连接,就可以使用默认路由。
查找路由表的过程
- 开始:从收到的分组的首部提取目的IP地址D。
- 步骤2:先用直接相连的各网络的子网掩码和D逐位相’与’,看是否和相应的网络地址匹配。
- 如果匹配:则将分组直接交付,然后结束。
- 如果不匹配:执行步骤3。
- 步骤3:检查路由表中是否有目的地址为D的特定主机路由。
- 如果有:则将分组传送给指明的下一跳路由器,然后结束。
- 如果没有:执行步骤4。
- 步骤4:对路由表中的每一行的子网掩码和D逐位相’与’,看其结果是否与该行的目的网络地址匹配。
- 如果匹配:则将分组传送给该行指明的下一跳踏由器,然后结束。
- 如果不匹配:执行步骤5。
- 步骤5:检查路由表中是否有一个默认路由。
- 如果有:则将分组送给路由表中所指明的默认路由器,然后结束。
- 如果没有:执行步骤6。
- 步骤6:报告转发分组出错,然后结束。
结论
1.查找路由表确定下一路由器,直至找到目的主机
2.特定主机路由,默认路径在特定情况下意义重大
3.分组转发算法在划分子网后,需要进行逐位相与计算
问题
划分子网虽然扩大了地址空间,但是IP地址仍然不够用,该如何解决?
CIDR(构造超网)
问题:是否能够有灵活些的地址快划分方法,将地址空间继续扩大?
答案:无分类编址CIDR
IPv4的空间不够用,不够用肯定是因为已经分配完了
就出现了VLSM
VLSM的英文全称是 Variable Length Subnet Mask,中文全称是 可变长子网掩码1234。它是一种网络管理技术,允许不同子网使用不同的子网掩码,根据不同子网所需要的IP地址数,各自划分子网和分配子网掩码4。这种技术可以最有效地利用现有的地址空间1。在现代网络设计中,VLSM是一项关键技术2
CIDR消除了传统的A类,B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv 4的地址空间
CIDR使用各种长度的'网络前缀'(network-prefix)来代替分类地址中的网络号和子网号
IP地址从三级编址(使用子网掩码)又回到了两级编址
IP地址:= { < 网络前缀> <主机号> }
CIDR的表示方法:
1.斜线记法(slash notation)
也叫CIDR记法,因为在IP地址后面加上一个斜线“/”,然后写上网络前缀所占的位数
2.星号表示法
网络后缀后面加上一个*的星号表示方法
CIDR将网络前缀都相同的连续IP地址组成CIDR地址块
为什么128.14.32.0/20地址块的最大地址是128.14.47.255?
这是因为在IP地址128.14.32.0/20中,"/20"表示子网掩码的长度。这意味着网络部分占用了前20位,而主机部分占用了后12位。
在二进制中,如果主机部分的所有位都被设置为1,那么就会得到该子网的广播地址,也就是该子网的最大地址。对于一个/20的子网,主机部分的所有位为1时,其值为
然后,我们将这个值添加到基础网络地址的主机部分。在这个例子中,基础网络地址是128.14.32.0。将32.0转换为二进制,得到00100000.00000000。将4095添加到这个值,我们得到00101111.11111111,转换回十进制就是47.255。
所以,128.14.32.0/20地址块的最大地址是128.14.47.255。
其中:
将4095(即主机部分所有位为1时的值)添加到基础网络地址的主机部分。这里是详细的步骤:
- 将32.0转换为二进制,得到00100000.00000000。
- 将4095转换为二进制,得到111111111111(这是12位,因为我们的子网掩码长度是20,所以主机部分长度是32-20=12)。
- 现在,我们需要将这个12位的二进制数添加到基础网络地址的主机部分。由于我们的基础网络地址是128.14.32.0,所以主机部分是32.0,即00100000.00000000。
- 将4095(即111111111111)添加到00100000.00000000,我们得到00101111.11111111。
- 最后,将00101111.11111111转换回十进制,得到47.255。
一个CIDR地址块可以包括多个传统的分类地址,这种地址的聚合常称为路由聚合,使得路由表中的一个项目可以表示多个(如上千个)传统分类地址的路由
CIDR虽然不使用子网,但仍然使用'掩码'这一名词(但不叫子网掩码),斜线记法中的数字就是掩码中1的个数
例如: /20地址块,它的掩码是20个连续的1:255.255 . 11110000.0即:255.255 . 240.0
路由聚合将会构成超网(Supernetting)前缀长度不超过23位的CIDR地址块都包含了多个C类地址,构成了超网。
各系按需分配到了网络前缀,资源利用率更高该ISP包含64个C类网络。分类IP地址中,每个路由器的路由表中,需要有64个项目。但CIDR路由聚合后,只需用1个项目206.0 . 64.0/18就能找到该ISP。
使用CIDR时,路由表中的每个项目由'网络前缀'和'下一跳址'组成。在查找路由表时可能会得到不止一个匹配结果网络前缀越长,其地址块就越小,因而路由就越具体应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配(Longest-prefix matching)。
结论
1.CIDR突破了IP地址的传统分类
2.实现了路由聚合,构成超网,减轻了路由器的项目数
3.分组转发过程中采用最长前缀匹配
问题
IP地址的划分为IP协议的实现奠定了基础,IP协议是一种尽最大努力交付的不可靠协议,如何提升其可靠性呢?
例题
一个自治系统有5个局域网,其连接图如图所示。LAN2至LAN5上的主机数分别为:180,60,15,20。该自治系统分配到的IP地址块为30.138.118/23。试给出每一个局域网的地址块,包括网络前缀
请看解答:
-
局域网1:180个主机
-
局域网2:60个主机
-
局域网3:15个主机
-
局域网4:20个主机
我们已经分配了30.138.170.0/23的IP地址块。现在,我们需要为每个局域网分配一个子网。
-
局域网1:需要
2^8=256
个IP地址,因为
2^7=128
不足以容纳180个主机。所以,子网掩码是/24,地址范围是30.138.170.0到30.138.170.255。
-
局域网2:需要
2^6=64
个IP地址,因为
2^5=32
不足以容纳60个主机。所以,子网掩码是/26,地址范围是30.138.171.0到30.138.171.63。
-
局域网3:需要
2^5=32
个IP地址,因为
2^4=16
不足以容纳15个主机。所以,子网掩码是/27,地址范围是30.138.171.64到30.138.171.95。
-
局域网4:需要
2^5=32
个IP地址,因为
2^4=16
不足以容纳20个主机。所以,子网掩码是/27,地址范围是30.138.171.96到30.138.171.127。
关于路由汇聚的题目可以看:设有2条路由21.1.193.0/24和21.1.194.0/24,如果进行路由汇聚,汇聚这两条路由的地址是_两个网络21.1.193.0/24和21.1.194.0/24汇聚之后为-CSDN博客
现在可以获得的情报:
1.每个局域网的地址范围应该是唯一的,不能重叠。而且,每个局域网的地址范围应该根据其子网掩码和主机数量来确定。
例如,对于一个有180个主机的局域网,它至少需要
2^8=256
个IP地址(因为2^7=128 不足以容纳180个主机)。所以,这个局域网的子网掩码应该是/24(因为32-8=24),这意味着网络部分占用了前24位,而主机部分占用了后8位。如果我们的网络地址是30.138.170.0/23,那么第一个/24局域网的地址范围将是30.138.170.0到30.138.170.255。
2.为什么地址范围是30.138.171.0到30.138.171.63?而不是30.138.171.59?
因为在IP地址中,我们使用二进制来表示地址。对于/26的子网掩码,主机部分有6位。当这6位全为1时,我们得到的是
2^6−1=63
,这就是为什么地址范围的最大值是30.138.171.63,而不是30.138.171.59。
换句话说,对于/26的子网,我们有64个可能的地址(从0到63),其中30.138.171.0通常被保留用作网络地址,30.138.171.63被保留用作广播地址,剩下的62个地址(从30.138.171.1到30.138.171.62)可以分配给主机。
ICMP报文及应用
IP依赖于多个协议来执行必要的控制和路由功能
控制功能(ICMP)
多播功能(IGMP)
建立路由表(RIP,OSPF,BGP, )
ICMP是什么?如何实现控制功能?
IP提供的无连接Best Effort服务,并不能解决网络低层的数据报丢失,重复,延迟或乱序等问题能解决网络故障或TCP在IP基础建立有连接服务解决以上问题,不能解决网络故障或其它网络原因无法传输的包的问题。
ICMP是IP的不可缺少的部分,所有的IP软件必须实现ICMP协议,ICMP可以分担IP的一部分功能ICMP主要用于差错报告(目的站不可达,源站抑制,超时,参数问题,重定向),查询(回显请求/应答,地址掩码请求/应答,时间戳请求等)
注:IP层的差错检测机制用于检测传输错误的头部检验
ICMP像一个更高层的协议一样使用IP(即ICMP消息被封装在IP数据报中)。
然而,ICMP是IP的一个组成部分,并且所有IP模块都必须实现它用来报告错误,是一个差错报告机制。源站把差错交给一个应用程序或采取其它措施来纠正问题不能用来报告ICMP消息的错误,这样就避免了无限循环。当ICMP查询消息时通过发送ICMP来响应对于被分片的数据报,ICMP消息只发送关于第一个分片中的错误不响应源地址为0,环回地址(Loopback Address),广播地址或组播地址广播或组播目的地址的数据报时。
ICMP数据包的两级封装
ICMP首部 | ICMP数据 | ||
IP数据报首部 | IP数据报数据区 | ||
帧首部 | 帧数据区 |
现在可以获得的情报:
每个ICMP报文放在IP数据报的数据部分中通过互联网传递,而IP数据报本身放在帧的数据部分中通过物理网络传递。
包括查询,差错报告两大类
ICMP查询
回送请求/应答:可对任一台主机的ICMP软件发请求/应答报文地址海码请求/应答:主机启动时,会广播一个地址掩码请求报文。
路由器收到地址掩码请求报文后,回送一个包含本网使用的32位地址掩码的应答报文时间戳请求/应答:主机发出查询当前时间的请求,应答报文建议值是自午夜开始计算的毫秒数UTC Coodinated Universal Time,协调统一时间。
ICMP差错报告
1.重定向Redirect当一个源主机创建的数据报发至某路由器,该路由器发现数据报应该选择其他路由,则向源主机发送改变路由报文。改变路由的报文能指出网络或特定主机的变化,一般发生在一个网络连接多路由器的情况下。
2.终点不可达Destination Unreachable当路由器检测到数据报无法传递到目的地时,向创建数据报的源主机发出目的地不可达报文。不可达分类:网络不通(如路由器故障),目的主机连不通(没开机),协议不可达,端口不可达共15种不同的情况,用不同代码表示
源站抑制Source Quench当路由器收到太多的数据报以致内存不够时,在丢弃所收数据报的同时,向创建数据报的源主机发送源抑制报文。源主机收到源抑制报文后,需要降低发送数据报的速率
3.超时Time Exceeded一种是路由器把数据报的生存时间减至零时,路由器丢弃数据报,并向源主机发送超时报文另一种是一个数据报的所有段到达前,重组计时到点,接收主机也会向源主机发送超时报文
参数问题Parameter Problem数据报头部的标志出现差错,或缺少必须的选项
ICMP的应用
Ping这个单词源自声纳定位,程序利用ICMP协议包来侦测另一个主机是否可达原理是用类型码为8的ICMP发请求,受到请求的主机则用类型码为0的ICMP回应。
计算间隔时间,并计算有多少个包被送达。用户据此判断网络的大致情况是应用层直接使用网络层ICMP的一个例子,不通过运输层的TCP或Ping UDP
Tracert(Trace Route的缩写)是路由跟踪实用程序,用于确定IP数据报访问目标所采取的路径Traceroute基于ICMP和UDP。
TTL为1的IP数据报发送给目的主机,定位第一个路由器。之后不断增大的TTL值重复该过程,标识出通往目的主机的路径上确切的路由器系列目的主机接收到TTL为1的IP数据报,不会丢弃该数据并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地
那么如何判断是否已经到达目的主机,从而结束追踪过程呢?
Tracert在发送数据报时,会选择一个一般应用程序不会使用的号码(30000以上)来作为接收端口号,所以当到达目的地后,目标主机会返回一个ICMP port unreachable(端口不可达)的消息。当tracert收到这个消息后,就知道目的地已经到达了。
MTU
Path MTU测试(Max Transmission Unit)用来测试链路上能够使报文转发不分片的最大MTU值,确定源到目的路径MTU对提高传输效率是非常必要的。
测试连通后RouterA向RouterC发起ICMP探测报文,报文大小为探测区间的最小值(可配置,默认为48字节)RouterA向RouterC继续发送ICMP报文,逐步增加步长(可配置,默认为10字节),直至连续三个报文发送超时,说明发送报文的大小已经大于路径上的最小MTU此时RouterA向RouterC再发送一个大小48字节的检测报文,探测网络是否连通,如果是,则第2步发送超时的报文大小即为路径MTU
关于安全性
Ping of Death:利用操作系统规定的ICMP数据包最大尺寸不超过64 KB这一规定,向主机发起'Ping of Death'(死亡之Ping)攻击,如果ICMP数据包的尺寸超过64 KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机ICMP
洪水攻击:程序发送数据包的速度达到了每秒1000个以上,它的性质就成了洪水产生器
第二种方法就是在主机上设置CMP数据包的处理规则,最好是设定绝所有的ICMP数据包
第一种方法是在路由器上对ICMP数据包进行带宽限制,将ICMP占用的带宽控制在一定的范围内,这样即使有ICMP攻击,它所占用的带宽也是非常有限的,对整个网络的影响非常少
结论
1.ICMP是IP协议的有效补充
2.主要包括查询和差错报告两类
问题
ICMP协助IP实现了控制功能,那么IP协议执行分组转发过程中所参考的路由表是如何建立和更新的呢?
内部网关协议RIP
网络可以划分为多个自治系统AS(Autonomous System) :在单一的技术管理下的一组路由器
内部网关协议IGP(Interior Gateway Protocol) :在一个自治系统内部使用的
路由选择协议:如RIP和OSPF协议IGP
外部网关协议EGP(External Gateway Protocol) :数据报传到一个自治系统的边界时,就需要使用的协议
基于距离向量
RIP(Routing Information Protocol,路由信息协议)是一种分布式的基于距离向量的路由选择协议
RIP协议要求网络中的每一个路由器都要维护从它自己到其他每一个目的网络的距离记录使用RIP协议的路由表的建立过程IP:10.0 . 0.1
从一个路由器到直接连接的网络的距离定义为1从一个路由器到非直接连接的网络的距离定义为该路径上所经过的路由器个数这里的'距离'实际上指的是'跳数'
RIP的工作原理
距离最短的路由就是最佳路由
RIP认为一个好的路由就是它通过的路由器的数目少,即'距离短'RIP允许一条路径最多只能包含15个路由器
更新路由表
某路由器收到相邻路由器(其地址为X)的一个RIP报文:
(1)先修改此RIP报文中的所有项目:把'下一跳'字段中的地址都改为X,并把所有的'距离'字段的值加1。
(2)对修改后的RIP报文中的每一个项目,重复以下步骤:
若项目中的目的网络不在路由表中,则把该项目加到路由表中。
否则若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目 否则若收到项目中的距离小于路由表中的距离,则进行更新否则,什么也不做。
(3)若3分钟还没有收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为16(距离16表示不可达)。
(4)返回。
RIP协议的优点
RIP协议最大的优点就是实现简单,开销较小限制了网络的规模,它能使用的最大距离15(16表示不可达)路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加
结论
1 RIP协议基于距离向量更新路由表
2 RIP IP ICMP协同完成网络层的路由选择和分组转发
问题
网络层实现的是不可靠的交付服务,那么可靠传输由谁来负责?