4.9 CIDR
CIDR(Classless Inter-Domain Routing),是IPv4地址分配和路由表选择的一种灵活且高效的方法。
1992年,由于分类地址中的B类地址很快就被分配完了,且路由表中的表项也急剧增加,分类的IP地址并不能很好的利用地址空间。
所以CIDR结合了子网划分的经验,将网络号和子网号结合在一起作为网络前缀,与主机号组合在一起从新构成了一个二级地址。
看似回到了最开始的起点,但是由于网络前缀是变长的,所以这是一种能更加灵活的使用地址空间的方法。
其有两大特点就是:
-
- 消除了传统的ABC类地址以及划分子网的概念。
- 融合了子网地址与子网掩码,方便子网划分。
CIDR记法
IP地址后加上“/”,然后写上网络前缀(可以是任意长度的位数)。
例如:128.14.32.0/20
CIDR地址块
CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。
例子:128.14.35.7/20就是某一地址块中的一个地址
其二进制可以表示为:10000000 00001110 00100011 00000111
最小地址:10000000 00001110 00100000 00000000【主机号全零】
128.14.32.0
最大地址:10000000 00001110 00101111 11111111【主机号全一】
128.14.47.255
地址快:10000000 00001110 00100000 00000000【主机号全零】
128.14.32.0
“/20地址块”
地址掩码(子网掩码):11111111 11111111 11110000 00000000【将网络前缀除外的都变0】
地址空间大小:128.14.35.7/20的网络号占20位,剩下12位主机号,故其地址空间大小为212。
构成超网
将多个子网聚合成一个较大的子网,叫做构成超网,或路由聚合。
如图中,去到网络1和网络2假设都要走的是R1的接口a,那么路由表中的数据就要占两行 。
如此一来,路由器中的表项就会增加,不便于我们进行维护,所以要进行路由聚合。
方法:将网络前缀缩短,取所有网络地址的交集。
最长前缀匹配
使用CIDR时,由于查找路由表项的方法是将地址掩码与IP地址按位相与,故查找路由表时可能得到几个匹配结果,我们应该选择网络前缀最长的路由。
其原理是前缀越长,地址块越小,路由越具体。
例子:
4.10 ARP
ARP全称Address Resolution Protocol,即地址解析协议。在进行网络通信时,每个设备都有一个唯一的MAC地址和IP地址,用来进行数据包的发送和接收。而ARP协议的作用就是根据IP地址找到对应的MAC地址,以确保正确交付数据到目标设备。
也就是解决下一跳走哪的问题。
ARP协议的使用过程:
检查ARP告诉缓存,有时对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中的所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20分钟更新一次)。
ARP协议的4种典型情况:
-
- 主机A发给本网络上的主机B,用ARP找到主机B的硬件地址;
- 主机A发给另一网络上的主机B,用ARP协议找到本网络上的一个路由器(默认网关)的硬件地址;
- 路由器发给本网络的主机A,用ARP协议找到主机A的硬件地址;
- 路由器发给另一网络的主机B,用ARP找到本网络上的一个路由器的硬件地址。
ARP高速缓存
在请求目标主机的 MAC 地址时,每次获取目标主机 MAC 地址都需要发送一次 ARP 请求,然后根据响应获取到 MAC 地址。为了避免重复发送 ARP 请求,每台主机都有一个 ARP 高速缓存。当主机得到 ARP 响应后,将目标主机的 IP 地址和 MAC 物理地址存入本机 ARP 缓存中,并保留一定时间,这个缓存就是ARP缓存表。
默认网关
在TCP/IP网络中,默认网关又叫缺省网关或缺省路由器,英文名为Default Gateway,是子网与外网连接的设备,通常是一个路由器,而该路由器的IP地址即为网络配置参数的默认网关地址。通常地,IP地址192.168.1.X的默认网关是192.168.1.1。
数据传输的例子
- 假设现在是同一个局域网下,主机1给主机3发送文件
2.传输层会为应用层的文件进行分段(根据文件大小决定是否分段)
3.网络层会为传输层的段进行封装(加上IP地址),以及是否分片(取决于链路层的MTU)
4.数据链路层将网络层的数据进行封装,加上控制帧和MAC地址;
如果主机一的ARP高速缓存中没有主机三的MAC地址就会向主机三发送一个广播APR请求分组:此时也只会有主机三进行回应。
可以将这两个分组中的含义理解为:
-:“我的IP地址是IP1,我想要给IP地址为IP3的主机发送信息,我的物理地址是MAC1,请问三号主机你的MAC地址是什么呢?”
-:“我的IP地址是IP3,我的MAC地址是MAC3”
5. 接下来物理层就会将链路层的数据放在链路上传播。
- 假设现在不在同一个局域网下主机1给主机5发送文件;
2.传输层会为应用层的文件进行分段(根据文件大小决定是否分段);
3.网络层会为传输层的段进行封装(加上IP地址),以及是否分片(取决于链路层的MTU);
4.数据链路层开始对传输层的数据进行封装,加上IP地址和MAC地址以及控制帧;
但是由于不再一个局域网下,主机1不知道主机5的MAC地址,更不知道数据的下一跳在哪?
由于交换机和集线器都没有IP地址,所以主机一中的数据的下一跳只能是主机二,主机三,以及其对应的默认网关。
由于主机五和主机一不再同一局域网下,所以主机一的下一跳之能寄希望于默认网关;
即现在数据链路层该封装上的MAC地址为其下一跳(默认网关)的MAC地址MAC6,但是主机一并不知道,所以其该继续发送广播分组了。
“我现在的IP地址是IP1,我现在的MAC地址是MAC1,请问我的IP地址为IP6的默认网关你的MAC地址是什么?”
“我的IP地址是IP6,物理地址是MAC6。”
于是得到MAC6后就将其封装完成,交给物理层处理。
这时数据链路层上的数据就可以被物理层放在链路上传输了。
数据现在到了路由器,数据开始解封装和再封装;(由于路由器是属于网络层的设备,其最高支持三层,也就是说其会解封装到网络层再重新封装上IP与MAC地址)
这些不知道的MAC地址当然需要再次使用ARP协议进行获取。
最后数据被物理层送到主机5。
例题
4.12 ICMP
Internet Control Message Protocol ,网际控制报文协议。
看一下ICMP以及IGMP在TCP/IP协议栈中的位置,不难发现:
其主要起一个桥梁的作用,为了更有效的转发IP数据报和提高交付成功的机会。
主要作用:
ICMP协议支持主机或路由器:
-
- 差错或异常报告:发送特定ICMP报文。
- 网络探询。
ICMP报文
ICMP差错报文:
1.终点不可达:当路由器或者主机无法交付数据报时就向源点发送终点不可达报文。无法交付
2.源点抑制:当路由器或者主机由于拥塞而丢弃数据报时,就向源点发送抑制报文,使源点知道应当将数据报的发送速度放慢。拥塞丢数据
3.时间超过:当路由器收到生存时间TTL=0的数据报时,除了丢弃该数据报外,还要向源点发送时间超过报文。当终点不能在预定时间内收到一个数据报的全部数据片时,就把已收到的数据片全部丢弃,并向源点发送时间超过报文。TTL=0
4.参数问题:当路由器或目的主机收到的数据报首部有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文。首部字段有问题
5.改变路由(重定向):路由器把改变路由报文发给主机,让主机知道下次应该将数据报发送给另外的路由器(可通过更好的路由)。值得更好的路由
ICMP差错报告报文数据字段
ICMP差错报告报文实际上就是一个IP数据报。
不发送ICMP差错报告报文的情况
-
- 对ICMP差错报告报文不再发送ICMP差错报告报文;
- 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文;
- 对具有组播地址的数据报都不发送ICMP差错报告报文;
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。
ICMP询问报文
Ping就是应用了回送请求和回答报文。
ICMP的应用
Ping :测试两个主机之间的连通性,使用了ICMP回送请求和回答报文。
Traceroute :跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文。
4.13 IPv6
IPV6的由来
目前广泛应用的IPV4地址是上世纪70年代的产物,互联网的飞速发展,到2011年二月,IPV4地址已经耗尽,为了解决这个问题,有以下三种措施。
-
- 采用无分类编址CIDR,使IP地址的分配更加合理。
- 采用网络地址转换NAT方法节省全球的IP地址。
- 采用具有更大地址空间的新版本的IPV6。
前两种方法只是在延长IPv4的寿命,只有IPV6从根本上解决了IP地址耗尽的问题。
IPV6的特点
IPV6 | IPv4 | 对比结果 |
1. 更大的地址空间:128bit | 1.只有32bit | IPV6的地址空间是IPV4的2128-32=296倍,从长远来看,IPV6地址绝对够用 |
2. 扩展的地址结构层次 | IPV6因为地址空间更大,所以可以划分更多的层次 | |
3. 改进的选项,IPv6首部长度是固定的,其选项放在有效荷载中 | 3.IPV4所规定的选项是固定不变的 | IPv6灵活可变 |
4. 灵活的首部格式,IPV6定义了许多可选的扩展首部。 | IPV6可以提供比IPV4更多的功能,而且能提高路由的处理效率,这是由于路由器对扩展首部都不处理。 | |
5. 允许协议扩充 | 5.不允许 | IPv6可以不断扩充功能 |
6. 支持即插即用(即自动配置) | 6.不支持 | IPV6不需要使用DHCP |
7. 支持资源的预分配 | 7.无 | IPV6支持实时音/视频等要求保证一定带宽和时延的应用 |
8. IPV6只支持源主机分片,是端到端的,意思说IPV6在传输时不支持中途分片 | 8.允许传输路径中的路由分片 | |
9. 固定的40B首部长度 | 9.IPV4首部长度可变且必须是4B的整数倍 | |
10. 增大了安全性 | 身份鉴别和保密功能是IPV6的扩展首部 | |
11.不与IPV4兼容,但是兼容其他协议兼容 | 11.亦是 | IPV6需要在少数地方做出必要的修改,大部分是为了处理长地址 |
IPV6数据报
IPV6取消了检验和字段,这样就加快了路由器处理数据报的效率,。由于数据链路层会丢弃掉检测出差错的帧,传输层也有相应的差错处理机制,因此网络层的擦错检测就可以精简掉。
IPV6地址
目的地址分类
1.单播 | 传统的点对点通信 |
2.多播 | 一点对多点通信,数据报发送到一组计算机中的每一台 |
3.任播 | IPV6增加的一类,任播的终点是一组计算机,但是数据报只交给其中一台,通常是距离最近的一台 |
IPV6地址记法
冒号十六进制表示法,每四位用一个十六进制数表示,并用冒号分隔每十六位。
4BF5:0000:0000:0000:BAF5:039A:BE8A:2170
4BF5:0:0:0:BAF5:39A:BE8A:2170
4BF5::BAF5:39A:BE8A:2170(相继的0值域可用双冒号代替)
地址分类
地址类型 | 二进制前缀 | 解释 |
未指明地址 | ::/128 | 不能做目的地址,只能做主机源地址 |
环回地址 | ::1/128 | 与IPV4相似,但是IPV6的环回地址仅有此一个 |
多播地址 | FF00::/8 | 占IPV6地址空间的1/256 |
本地链路单播地址 | FE80::/10 | 类似于IPv4中的私有IP地址 |
全球单播地址 | 除了上述外所有IPV6地址 | 用的最多的地址 |
IPV6全球单播地址采用三级结构:
与IPV4不同,IPV6地址的接口标识符有64位之多,足以对各种接口的硬件地址直接进行编址。这样,IPv6就可以直接从128位地址的最后64位中直接提取出相应的硬件地址,而不需要使用地址解析协议ARP进行地址解析。
IPV4到IPV6的过渡
从IPV4向IPV6过渡只能采用逐步演进的办法,同时还必须使新安装的IPV6系统能够向后兼容。IPV6系统必须能够接收和转发IPV4分组,并且能够为IPV4分组选择路由。
从IPV4过渡到IPV6的策略:
- 双协议栈,
- 隧道技术,指IPV6数据报要进入IPV4网络时,把整个IPV6数据报封装为IPV4数据报的数据部分,使原来的IPV6数据报好像在IPV4网络的隧道中传输。当IPV4数据报离开IPV4网络时,再将其数据部分交给主机的IPV6协议。
4.14IP组播
单播,广播,组播
方式 | 特点 | 比喻 | 地址 |
单播 | 单播用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播IP地址作为目的地址。是一种点对点传输方式。 | ABC类地址 | |
广播 | 广播是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。 | 网络号特定,主机号全为1的地址 | |
组播(多播) | 当网络中的某些用户需要特定数据时,组播数据发送者仅发送一次数据,借助组播路由协议为组播数据包建立组播分发树,被传递的数据到达距离用户端尽可能近的节点后才开始复制和分发,是一种点对多点传输方式。 | D类地址:224~239 |
单播与多播对比
方式 | 特点 |
单播 | 在发送者和每一接收者之间需要单独的数据信道。 |
多播 | 组播提高了数据传送效率。减少了主干网出现拥塞的可能性。组播组中的主机可以在同一个物理网络,也可以来自不同的物理网络(如果有组播路由器【运行组播协议的路由器】的支持)。 |
IP组播地址
IP组播地址让源设备能够将分组发送给一组设备。属于多播组的设备将被分配一个组播组IP地址(一群共同需求主机的相同标识)。
组播地址范围为224.0.0.0~239.255.255.255(D类地址),一个D类地址表示一个组播组。只能用作分组的目的地址。源地址总是为单播地址。
- 组播数据报也是“尽最大努力交付”,不提供可靠交付,应用于UDP。
- 对组播数据报不产生ICMP差错报文。
- 本非所有的D类地址都可以做为组播地址。
因特网范围内组播
①IGMP协议(网络层)
*让路由器知道本局域网上是否有主机(的进程)参加或退出了某个组播组。
工作流程
②组播路由选择协议
由于在网络中主机可能随时都会退出或加入别的组播组,所以就需要组播路由协议进行找出以源主机为根节点的组播转发树。
1.构造树可以避免在路由器中兜圈子,对不同的多播组对应不同的组播树;
2.同一个多播组,对不同的源点也会有不同的多播转发树。
组播路由选择协议常用的三种算法:
①基于链路状态的的路由选择
②基于距离向量的路由选择
③协议无关的组播(稀疏/密集)
硬件组播
同单播地址一样,组播IP地址也需要相应的组播MAC地址在本地网络中实际传送帧。组播MAC地址以十六进制值01-00-5E打头,余下的六个十六进制是根据IP组播组地址的最后23位转换得到的。
TCP/IP协议使用的以太网多播地址的范围是:
01-00-5E-00-00-00到01-00-5E-7F-FF-FF.
由于不同的D类组播地址可能会映射出相同的MAC地址(MAC地址开头是01-00-5e,后23位来自D类IP地址,万一一样呢?),为了避免错误:
收到多播数据报的主机,还要在IP层利用软件进行过滤,把不是本主机要接收的数据报丢弃。
4.15移动IP
移动IP技术是移动结点(计算机/服务器等)以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。
概念点
概念 | 含义 |
移动结点 | 具有永久IP地址的移动设备。 |
归属代理/本地代理 | 一个移动结点的永久“居所”称为归属网络,在归属网络中代表移动节点执行移动管理功能的实体叫做归属代理。(家) |
永久地址/归属地址/主地址 | 移动站点在归属网络中的原始地址。 |
外部代理/外地代理 | 在外部网络中帮助移动节点完成移动管理功能的实体称为外部代理。(工作的地方) |
转交地址/辅地址 | 可以是外部代理的地址或动态配置的一个地址。 |
移动IP通信过程
1.初到外界
2.跳槽
3.归家
4.16RIP
概述
Routing Information Protocol,该路由协议基于距离矢量算法,使用“跳数“(最大15)来衡量到达目的地址的路由距离。
由来
在出现动态路由之前,静态路由有几个问题无法解决:
(1)当网络拓扑结构和链路状态发生改变,需要对路由器的静态路由信息进行大范围修改,工作复杂度高。
(2)网络发生故障时,不能重选路由,很可能路由失败。
于是就出现了动态路由协议,路由器自动学习,自适应网络的变化,无需人工更改配置。
适用
RIP适用于小型网络,因为RIP是基于距离矢量的算法。由于其只能支持0-15跳,第十六跳会被标记成无限大或不可达。所以在整个网络中,只能有16个路由器相互成为RIP的邻居路由器,所以基于以上原理,RIP只使用于中小型网络。
步骤
①路由器向邻居节点宣告自己的路由;
②网络中的路由器从自己的邻居路由器得到路由信息,并将这些路由信息连同自己本地路由信息发送给其他邻居;
③这样一级级的传递下去以达到全网同步。
④每个路由器都不了解整个网络拓扑,它们只知道自己直接相连的网络情况,并根据从邻居得到的路由信息来更新自己的路由。
*每30秒就更新路由。
路由信息交换细节
1.仅和相邻路由器交换信息
2.交换的信息是自己的路由表
3.每30s交换一次路由信息,然后路由器根据新信息来更新路由表。若超过180s没有收到邻居路由器的通告,则判定邻居没了,并更新自己的路由表。
*路由器刚开始工作时,只知道直接连接的网络的距离距离为1,接着每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
*经过若干次更新后,所有的路由器最终会知道到达本自治系统任何一个网络的最短距离和下一跳路由器的地址,即“收敛”。
RIP报文格式
使用UDP传送数据。应用层协议。
距离向量算法
好消息传的快,坏消息传的慢
4.17OSPF
概述
Open Shortest Path First开放式最短路径优先是一种基于链路状态的动态路由协议。
“开放”标明OSPF协议不是受某一家厂商控制,而是公开发表的;
“最短路径优先”是因为使用的迪杰斯特拉提出的最短路径算法。
OSPF最主要的特征就是使用分布式的链路状态协议。
路由信息交换细节
和谁交换? | 1.使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器。广播 最终整个区域内所有路由器都得到了这个信息的一个副本。(广播) |
交换什么? | 2.发送的信息就是与本路由器相邻的所有路由暴的链路状态(本路由器和哪些路由器相邻,以及该链路的度量/代价--费用、距离、时延、带宽等)。 |
多久交换? | 3.只有当链路状态发生变化时,路由器才向所有路由器洪泛发送此信息。 |
4.最后,所有路由器都能建立一个链路状态数据库,即全网拓扑图。 |
OSPF报文
OSPF直接使用IP数据报传送数据
链路状态路由算法
特点
通过划分区域对网络进行管理,分为骨干区域(area 0)和非骨干区域。
RIP与OSPF的对比
RIP特性 | 带来的问题 | 优化或解决的方式 |
逐跳收敛 | 收敛慢,故障恢复时间长 | “收到更新->计算路由->发送更新”改为“收到更新->发送更新->计算路由” |
传闻路由更新机制 | 缺少对全局网络拓扑的了解 | 路由器基于拓扑信息,独立计算路由表 |
最多有效跳数为15 | 环形路由中,使远端路由不可达 | 不限定跳数 |
以“跳数”为度量 | 存在选择次优路由的风险 | 将链路宽带作为选路参考值 |
30s刷新一下路由信息 | 30min刷新一下路由信息 |
OSPF五类报文
①Hello 发现和维护邻居关系
②Database Description 发现链路状态数据库摘要
③Link State Request 请求特定的链路状态信息
④Link State Update 发送详细的链路状态信息
⑤Link State ACK 发送确认报文
OSPF的七种状态
①Down State(失效) | 该状态还没有进行hello包的收发,一旦进行hello的收发,则进入下一状态 |
②Init State(初始化) | 接收到的hello包中并不存在本地的route-id,但是会将发送该hello包的邻居置为init状态,此时双方并没有建立双向通信,随着双方互相收发hello包,于是才会进入下一状态 |
③Two-way State(双向通信) | 接收到的hello包中存在本地的route-id,则双方就会进入2-way双向通信状态。该状态也是OSPF最稳定的状态之一,它标志着邻居关系的建立,同时也是邻接关系建立的基础 |
④Exstart State(预启动) | 使用类似hello的DD报文进行主从关系(Master/Slave)选举,route-id数值大为主,优先进入下一状态。此时的DD报文是空的。 |
⑤Excharge State(准交换) | 使用真正的DD报文进行数据库目录的共享 |
⑥Loading State(加载) | 使用LSR、LSU、LSAck去获取未知的LSA信息(LSDB同步) |
⑦Full State(全毗邻) | 邻接关系建立的标志,此时不再进行LSDB的同步 |
4.18BGP
概述
和谁交换? | 与其他AS的邻站BGP发言人交换信息。 |
交换什么? | 交换网络可达性的信息,既要到达某个网络所要经过的一系列AS。 |
多久交换? | 发生变化时更新有变化的部分。 |
交换信息过程
BGP所交换的网络可达性的信息就是要到达某个网络所要经过的一系列AS。当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各AS的较好路由。
BGP协议格式
一个BGP发言人与其他自治系统中的BGP发言人要交换路由信息,就要先建立TCP连接,即通过TCP传送,然后在此连接上交换BGP报文会话(session),利用BGP会话交换路由信息。
BGP是应用层协议,借助TCP传送。
BGP协议特点
1.BGP支持CIDR,因此BGP的路由表也就应当包括目的网络前缀,下一跳路由器,以及到达该目的网络所要经过的各个自治系统的序列。
2.在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表。但以后只需要在发生变化时更新有变化的部分。这样做对节省网络宽带和减少路由器的处理开销都有好处。
常用的BGP-4的四种报文
OPEN(打开) | 用来与相邻的另一个BGP发言人建立关系,并认证发送方。 |
UPDATE(更新) | 通知新路径或撤销原路径。 |
KEEPALIVE(保活) | 在无UPDATE时,周期性证实邻站的连通性; 也作为OPEN的确认报文。 |
NOTIFICATION(通知) | 报告先前报文的差错; 也被用于关闭连接。 |
4.19三种路由协议的比较
协议 | RIP | OSPF | BGP |
类型 | 内部 | 内部 | 外部 |
路由算法 | 距离-向量 | 链路状态 | 路径-向量 |
传递协议 | UDP | IP | TCP |
路径选择 | 跳数最少 | 代价最低 | 较好,非最佳 |
交换节点 | 和本节点相邻的路由器 | 网络中所有的路由器 | 和本节点相邻的路由器 |
交换内容 | 当前路由器知道的全部信息,即自己的路由表 | 与本路由器相邻的所有路由器的链路状态(也存在自己路由表中) | 首次:整个路由表; 非首次:有变化的部分。 |
4.20网络层设备
路由器
输入端口的处理
输出端口的处理
分组丢失的原因
若路由器处理分组的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。
路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。