1. 计算机网络第四章(网络层)
4.1、网络层概述
简介
网络层的主要任务是 实现网络互连 ,进而 实现数据包在各网络之间的传输
这些异构型网络N1~N7如果只是需要各自内部通信,他们只要实现各自的物理层和数据链路层即可
但是如果要将这些异构型网络互连起来,形成一个更大的互联网,就需要实现网络层设备路由器
有时为了简单起见,可以不用画出这些网络,图中N1~N7,而将他们看做是一条链路即可
要实现网络层任务,需要解决一下主要问题:
网络层向运输层提供怎样的服务(“可靠传输”还是“不可靠传输”)
在数据链路层那课讲过的可靠传输,详情可以看那边的笔记:网络层对以下的 分组丢失 、 分组失序 、 分组重复 的传输错误采取措施,使得接收方能正确接受发送方发送的数据,就是 可靠传输 ,反之,如果什么措施也不采取,则是 不可靠传输
网络层寻址问题
路由选择问题
路由器收到数据后,是依据什么来决定将数据包从自己的哪个接口转发出去?
依据数据包的目的地址和路由器中的路由表
但在实际当中,路由器是怎样知道这些路由记录?
由用户或网络管理员进行人工配置,这种方法只适用于规模较小且网络拓扑不改变的小型互联网
另一种是实现各种路由选择协议,由路由器执行路由选择协议中所规定的路由选择算法,而自动得出路由表中的路有记录,这种方法更适合规模较大且网络拓扑经常改变的大型互联网
补充 网络层(网际层) 除了 IP协议 外,还有之前介绍过的 地址解析协议ARP ,还有 网际控制报文协议ICMP , 网际组管理协议IGMP
总结
4.2、网络层提供的两种服务
在计算机网络领域,网络层应该向运输层提供怎样的服务(“ 面向连接 ”还是“ 无连接 ”)曾引起了长期的争论。
争论焦点的实质就是: 在计算机通信中,可靠交付应当由谁来负责 ?是 网络 还是 端系统 ?
面向连接的虚电路服务
一种观点:让网络负责可靠交付
这种观点认为,应借助于电信网的成功经验,让网络负责可靠交付,计算机网络应模仿电信网络,使用 面向连接 的通信方式。
通信之前先建立 虚电路 (Virtual Circuit),以保证双方通信所需的一切网络资源。
如果再使用可靠传输的网络协议,就可使所发送的分组无差错按序到达终点,不丢失、不重复。
发送方 发送给 接收方 的所有分组都沿着同一条虚电路传送
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
请注意,电路交换的电话通信是先建立了一条真正的连接。
因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样
无连接的数据报服务
另一种观点:网络提供数据报服务
互联网的先驱者提出了一种崭新的网络设计思路。
网络层向上只提供简单灵活的、 无连接的 、 尽最大努力交付 的 数据报服务 。
网络在发送分组时不需要先建立连接。每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
网络层不提供服务质量的承诺 。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),当然也不保证分组传送的时限。
发送方 发送给 接收方 的分组可能沿着不同路径传送
尽最大努力交付
如果主机(即端系统)中的进程之间的通信需要是可靠的,那么就由网络的 主机中的运输层负责可靠交付(包括差错处理、流量控制等) 。
采用这种设计思路的好处是 :网络的造价大大降低,运行方式灵活,能够适应多种应用。
互连网能够发展到今日的规模,充分证明了当初采用这种设计思路的正确性。
虚电路服务与数据报服务的对比
对比的方面 虚电路服务 数据报服务
思路 可靠通信应当由网络来保证 可靠通信应当由用户主机来保证
连接的建立 必须有 不需要
终点地址 仅在连接建立阶段使用,每个分组使用短的虚电路号 每个分组都有终点的完整地址
分组的转发 属于同一条虚电路的分组均按照同一路由进行转发 每个分组独立选择路由进行转发
当结点出故障时 所有通过出故障的结点的虚电路均不能工作 出故障的结点可能会丢失分组,一些路由可能会发生变化
分组的顺序 总是按发送顺序到达终点 到达终点时不一定按发送顺序
端到端的差错处理和流量控制 可以由网络负责,也可以由用户主机负责 由用户主机负责
4.3、IPv4
概述
分类编制的IPv4地址
简介
每一类地址都由两个固定长度的字段组成,其中一个字段是 网络号 net-id ,它标志主机(或路由器)所连接到的网络,而另一个字段则是 主机号 host-id ,它标志该主机(或路由器)。
主机号在它前面的网络号所指明的网络范围内必须是唯一的。
由此可见, 一个 IP 地址在整个互联网范围内是唯一的 。
A类地址
B类地址
C类地址
练习
总结
IP 地址的指派范围
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构 。分两个等级的好处是:
第一 ,IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
第二 ,路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口 。
当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为 多归属主机 (multihomed host)。
由于一个路由器至少应当连接到两个网络(这样它才能将 IP 数据报从一个网络转发到另一个网络),因此 一个路由器至少应当有两个不同的 IP 地址 。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络 ,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
划分子网的IPv4地址
为什么要划分子网
在 ARPANET 的早期,IP 地址的设计确实不够合理:
IP 地址空间的利用率有时很低。
给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
两级的 IP 地址不够灵活。
如果想要将原来的网络划分成三个独立的网路
所以是否可以从主机号部分借用一部分作为子网号
但是如果未在图中标记子网号部分,那么我们和计算机又如何知道分类地址中主机号有多少比特被用作子网号了呢?
所以就有了划分子网的工具: 子网掩码
从 1985 年起在 IP 地址中又增加了一个“ 子网号字段 ”,使两级的 IP 地址变成为 三级的 IP 地址 。
这种做法叫做 划分子网 (subnetting) 。
划分子网已成为互联网的正式标准协议。
如何划分子网
基本思路
划分子网纯属一个 单位内部的事情 。单位对外仍然表现为没有划分子网的网络。
从主机号 借用 若干个位作为 子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的 目的网络号 net-id,先找到连接在本单位网络上的路由器。
然后 此路由器 在收到 IP 数据报后,再按 目的网络号 net-id 和 子网号 subnet-id 找到目的子网。
最后就将 IP 数据报直接交付目的主机。
划分为三个子网后对外仍是一个网络
优点
1. 减少了 IP 地址的浪费 2. 使网络的组织更加灵活 3. 更便于维护和管理
划分子网纯属一个单位内部的事情,对外部网络透明 ,对外仍然表现为没有划分子网的一个网络。
子网掩码
(IP 地址) AND (子网掩码) = 网络地址 重要,下面很多相关知识都会用到
举例
例子1
例子2
默认子网掩码
总结
子网掩码是一个网络或一个子网的重要属性。
路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩码。
无分类编址的IPv4地址
为什么使用无分类编址
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
CIDR 最主要的特点
CIDR使用各种长度的“ 网络前缀 ”(network-prefix)来代替分类地址中的网络号和子网号。
IP 地址从三级编址(使用子网掩码)又回到了两级编址 。
如何使用无分类编址
举例
路由聚合(构造超网)
总结
IPv4地址的应用规划
给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址
定长的子网掩码FLSM(Fixed Length Subnet Mask)
划分子网的IPv4就是定长的子网掩码
举例
通过上面步骤分析,就可以从子网1 ~ 8中任选5个分配给左图中的N1 ~ N5
采用定长的子网掩码划分,只能划分出2^n个子网,其中n是从主机号部分借用的用来作为子网号的比特数量,每个子网所分配的IP地址数量相同
但是也因为每个子网所分配的IP地址数量相同,不够灵活,容易造成IP地址的浪费
变长的子网掩码VLSM(Variable Length Subnet Mask)
无分类编址的IPv4就是变长的子网掩码
举例
4.4、IP数据报的发送和转发过程
举例
源主机如何知道目的主机是否与自己在同一个网络中,是直接交付,还是间接交付?
可以通过 目的地址IP 和 源地址的子网掩码 进行 逻辑与运算 得到 目的网络地址
如果 目的网络地址 和 源网络地址 相同 ,就是 在同一个网络 中,属于 直接交付
如果 目的网络地址 和 源网络地址 不相同 ,就 不在同一个网络 中,属于 间接交付 ,传输给主机所在网络的 默认网关 (路由器——下图会讲解),由默认网关帮忙转发
主机C如何知道路由器R的存在?
用户为了让本网络中的主机能和其他网络中的主机进行通信,就必须给其指定本网络的一个路由器的接口,由该路由器帮忙进行转发,所指定的路由器,也被称为 默认网关
例如。路由器的接口0的IP地址192.168.0.128做为左边网络的默认网关
主机A会将该IP数据报传输给自己的默认网关,也就是图中所示的路由器接口0
路由器收到IP数据报后如何转发?
检查IP数据报首部是否出错:
若出错,则直接丢弃该IP数据报并通告源主机
若没有出错,则进行转发
根据IP数据报的目的地址在路由表中查找匹配的条目:
若找到匹配的条目,则转发给条目中指示的吓一跳
若找不到,则丢弃该数据报并通告源主机
假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值
接下来路由器对该IP数据报进行查表转发
逐条检查路由条目,将目的地址与路由条目中的地址掩码进行逻辑与运算得到目的网络地址,然后与路由条目中的目的网络进行比较,如果相同,则这条路由条目就是匹配的路由条目,按照它的下一条指示,图中所示的也就是接口1转发该IP数据报
路由器是隔离广播域的
4.5、静态路由配置及其可能产生的路由环路问题
概念
多种情况举例
静态路由配置
举例
默认路由
举例
默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的
特定主机路由
举例
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目
一般用于网络管理人员对网络的管理和测试
多条路由可选,匹配路由最具体的
静态路由配置错误导致路由环路
举例
假设将R2的路由表中第三条目录配置错了下一跳
这导致R2和R3之间产生了路由环路
聚合了不存在的网络而导致路由环路
举例
正常情况
错误情况
解决方法
黑洞路由的下一跳为null0,这是路由器内部的虚拟接口,IP数据报进入它后就被丢弃
网络故障而导致路由环路
举例
解决方法
添加故障的网络为黑洞路由
假设。一段时间后故障网络恢复了
R1又自动地得出了其接口0的直连网络的路由条目
针对该网络的黑洞网络会自动失效
如果又故障
则生效该网络的黑洞网络
总结
4.6、路由选择协议
概述
因特网所采用的路由选择协议的主要特点
因特网采用分层次的路由选择协议
自治系统 AS :在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。
自治系统之间的路由选择简称为域间路由选择,自治系统内部的路由选择简称为域内路由选择
域间路由选择使用外部网关协议EGP这个类别的路由选择协议
域内路由选择使用内部网关协议IGP这个类别的路由选择协议
网关协议 的名称可称为 路由协议
常见的路由选择协议
2. 计算机网络——4.网络层
将网络互连并能够互相通信,会遇到许多问题,例如:不同的寻址方案(不同的网络可能地址的表示位数不同),不同的最大分组长度(最大帧长),不同的网络接入机制,不同的超时控制,不同的差错恢复方法......
如何 将异构的网络互相连接起来 :使用一些 中间设备(中间系统)(中继系统) :
1.IP地址及其表示方法
IP地址就是给每个连接在互联网上的 主机(或路由器) 分配一个在全世界范围内是 唯一的32位 的标识符。IP地址由互联网名字和数字分配机构(ICANN)进行分配。分配给ISP,然后用户再通过ISP申请到一个IP地址。
2.IP地址的编址方式
后续还有 NAT 和 IPv6 这些方法
正常使用ABC三类,DE两类用作科研或者其他一般不开放使用。D类地址还是多播地址
A类地址:
B类地址:
C类地址:
3.特殊IP地址
4.IP地址的一些重要特点
IP地址与硬件地址是不同的地址
通信时使用的两个地址:
每个接口都有两个地址,网络层及以上的使用IP地址,数据链路层和物理层使用MAC地址(物理地址)
1.地址解析协议ARP的作用
3.ARP分组的传输
4.ARP高速缓存的作用
5.ARP欺骗
网络上的任意一台主机,在 没有接收到ARP请求 的情况下,可以 主动发送ARP响应 。
6.应当注意的问题
7.使用ARP的四种典型情况
假设现在有四个A类网络通过三个路由器连接在一起,而每个网络上都有成千上万台主机,如果按照目的主机的主机号来制作路由表,那么一个路由表就有 成千上万行 ,这样路由表的内存会过于庞大,因此我们按照 目的主机所在网络地址 来制作路由表,相当于 归类纪录 ,这样的话每个路由表只需要几行就可以,会大大简化。如下图:
2.特定主机路由 :虽然互联网所有的分组转发都是基于 目的主机所在的网络 ,但是在大多数情况下,都允许有一个特例,即 指定某个网络中的某一台主机填入路由表 ,采用特定主机路由可以使网络管理人员 更方便地控制网络和测试网络 ,同时也考虑到某种 安全问题 。
3.默认路由 :假如现在有一个分组的地址为1.2.3.4那么它的网络地址就是1.0.0.0,但是在路由表中没有记录,那么路由器就不知道该转发给谁,怎么转发,就会将这个分组丢弃,为了避免这种情况,有了默认路由,一旦出现 找不到目的地址的分组 ,就 由默认路由转发 (或者说 默认路由能够匹配所有的地址 )。但同时 默认路由的优先级是最小的 ,也就是 只有在找不到的情况下才会使用 ,找到了的话就不会用默认路由。采用默认路由可以 减少路由表所占用的空间和搜索路由表所用的时间 ,如果主机连接在一个 小网络 上,并且这个网络只用一个路由器与互联网连接,那么这种情况非常适合使用默认路由。例如下图:
1.从两级IP地址到三级IP地址
早期IP地址的不合理设计:IP地址浪费极大,因此对分类的IP地址做了一个改进,划分子网:在IP地址中增加一个"子网号字段",使原本的两级地址(网络号,主机号)变成三级地址(网络号,主机号,子网号),如下图所示:
例如:
3.子网掩码
规则:
(6).报告转发分组出错
1.网络前缀
划分子网虽然在一定程度上解决了困难,但是并 没有从根本上解决 ,仍然有几个问题:
2.CIDR的特点
CIDR是在 变长子网掩码(VLSM) 的基础上进一步提出的,它的全称为 无分类域间选择(CIDR) 。
主要特点:
3.路由聚合
4.CIDR记法的其它形式
5.CIDR地址块划分
3. 计算机网络-网络层-超网
在一个划分子网的网络中可同时使用几个不同的子网掩码。使用变长子网掩码VLSM(Variable Length Subnet Mask)可进一步提高IP地址资源的利用率。在VLSM的基础上又进一步研究出无分类编址方法,它的正式名字是 无分类域间路由选择CIDR (Classless Inter-Domain Routing,CIDR的读音是“sider'”)。
CIDR最主要的特点有两个汪团:
(I)CIDR把32位的IP地址划分为前后两个部分。前面部分是“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,后面部分则用来指明主机。因此CIDR使IP地址从三级编址(使用子网掩码)又回到了两级编址,但这已是无分类的两级编址。其记法是:
IP地址:={<网络前缀>,<主机号>} (4-3)
CIDR还使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/”,然念稿后写上网络前缀所占的位数。
(2)CIDR把网络前缀都相同的连续的IP地址组成一个“CIDR地址块”。我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数。例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示,其中的前20位是网络前缀,而后面的12位是主机号:
128.14.35.7/20= 1000 0000 0000 1110 0010 0011 0000 0111
这个地址所在的地址块中的最小地址和最大地址可以很方便地得出:找出 地址掩码(斜线后面的数字个数是掩码地址1的个数, 20位)中1和0的交界处 发生在地址中的哪一个字节。现在是在第三个字节,取后面12 都写成0是最小地址,写成1为最大地址。
最小地址:128.14.32.0 1000 0000 0000 1110 0010 0000 0000 0000
最大地址:128.14.47.255 1000 0000 0000 1110 0010 1111 1111 1111
以上这两个特殊地址的主机号是全0和全1的地址。一般并不使用。通常只使用在这两个特殊地址之间的地址。 这个地址块共有2^12个地址(2 的主机号位数次幂) 。我们可以用地址块中的最小地址和网络前缀的位数指明这个地址块。例如,上面的地址块可记为128.14.32.0/20。在不需要指出地址块的起始地址时,也可把这样的地址块简称为“/20地址块”。
为了更方便地进行路由选择,CIDR使用32位的地址掩码(address mask)。地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。虽然CIDR不使用子网了,但由于目前仍有一些网络还使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码。例如,/20地址块的地址掩码是:1111 1111 1111 1111 1111 0000 0000 0000(20个连续的1)。 斜线记法中,斜线后面的数字就是地址掩码中1的个数。
在“CIDR不使用子网”是指CIDR并没有在32位地址中指明若干位作为子网字段。但分配到一个CIDR地址块仔陵孝的单位,仍然可以在本单位内根据需要划分出一些子网。这些子网也都只有一个网络前缀和一台主机号字段,但子网的网络前缀比整个单位的网络前缀要长些。例如,某单位分配到地址块/20,就可以再继续划分为8个子网(即需要从主机号中借用3位来划分子网)。这时每一个子网的网络前缀就变成23位(原来的20位加上从主机号借来的3位),比该单位的网铭前缀多了3位。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络。这种地址的聚合常称为 路由聚合 (route aggregation),它使得路由表中的一个项目可以表示原来传统分类地址的很多个(例如上干个)路由, 路由聚合也称为构成超网 (supemetting)。路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。
CIDR记法有多种形式,例如,地址块10.0.0.0/10可简写为10/10,也就是把点分十进制中低位连续的0省略。另一种简化表示方法是在网络前缀的后面加一个星号*,如:0000101000*意思是:在星号*之前是网络前缀,而星号◆表示P地址中的主机号,可以是任意值。
前缀位数不是8的整数倍时,需要进行简单的计算才能得到一些地址信息。表47给出了最常用的CIDR地址块。表中的K表示2^10=1024,网络前缀小于13或大于27都较少使用。在“包含的地址数”中没有把全1和全0的主机号除外。
从表4-7可看出,每一个CIDR地址块中的地址数一定是2的整数次幂。CIDR地址块多数可以包含多个C类地址(是一个C类地址的2”倍,n是整数),这就是“ 构成超网 ”这一名词的来源。
使用CIDR的一个好处就是可以更加有效地分配PV4的地址空间,可根据客户的需要分配适当大小的CIDR地址块。假定某ISP已拥有地址块206.0.64.0/18(相当于有64个C类网络)。现在某大学需要800个IP地址。ISP可以给该大学分配一个地址块206.0.68.0/22,它包括1024(即2^10)个1P地址,相当于4个连续的C类(/24地址块),占该ISP拥有的地址空间的1/16。这个大学然后可自由地对本校的各系分配地址块,而各系还可再划分本系的地址块。
从图4-25可以清楚地看出地址聚合的概念。这个ISP共拥有64个C类网络。如果不采用CIDR技术,则在与该SP的路由器交换路由信息的每一个路由器的路由表中,就需要有64个项目,但采用地址聚合后,就只需用路由聚合后的一个项目206.0.64.0/18就能找到该ISP,同理,这个大学共有4个系,在1SP内的路由器的路由表中,也需使用206.0.68.022这个项目。这个项目好比是大学的收发室。凡寄给这个大学任何一个系的邮件,邮递员都不考虑大学各个系的地址,而是把这些邮件集中投递到大学的收发室,然后由大学的收发室再进行下一步的投递。这样就减轻了v递员的工作量(相当于简化了路由表的查找)。
从图4-25下面表格中的二进制地址可看出,把四个系的路由聚合为大学的一个路由(即构成超网),是将网络前缀缩短。 网络前缀越短,其地址块所包含的地址数就越多。而在三级结构的P地址中,划分子网是使网铬前缀变长。
在使用CIDR时,由于采用了网络前缀这种记法,IP地址由网络前缀和主机号这两个部分组成,因此在路由表中的项目也要有相应的改变。这时, 每个项目由“网络前缀”和“下一跳地址”组成 。但是在查找路由表时可能会得到不止一个匹配结果。这样就带来一个间题:我们应当从这些匹配结果中选择哪一条路由呢?
答案是:应当从匹配结果中 选择具有最长网络前缀的路由 。这叫做 最长前缀匹 配longest-.prefix matching) ,这是因为网铬前缀越长,其地址块就越小,因而路由就越具体(more specific)。最长前缀匹配又称为最长匹配或最佳匹配,为了说明最长前缀匹配的概念。
假定大学下属的四系希望IS把转发给四系的数据报直接发到四系面不要经过大学的路由器,但又不愿意改变自己使用的P地址块。因此,在SP的路由器的路由表中,至少要有以下两个项目,即206.0.68.0/22(大学)和206.0.71.128/25(四系)。现在假定ISP收到一个数据报,其目的IP地址为D=206.0.71.130。把D分别和路由表中这两个项目的掩码逐位相“与”(AND操作)。将所得的逐位AND操作的结果按顺序写在下面:
D和 1111 1111 1111 1111 1111 11 00 0000 0000逐位相“与” = 206.0.68.0/22 匹配
D和 1111 1111 1111 1111 1111 1111 1 000 0000逐位相“与” = 206.0.71.128/25 匹配
不难看出,现在同一个IP地址D可以在路由表中找到两个目的网络(大学和四系)和该地址相匹配。根据 最长前缀(1的位数) 匹配的原理,应当选择后者,把收到的数据报转发到后一个目的网络(四系),即选择两个匹配的地址中更具体的一个。
从以上的讨论可以看出,如果IP地址的分配一开始就采用CIDR,那么我们可以按网络所在的地理位置来分配地址块,这样就可大大减少路由表中的路由项目。例如,可以将世界划分为四大地区,每一地区分配一个CIDR地址块:
地址块194/7(194.0.0.0至195255.255,25)分配给欧洲:
地址块198/7(198.0.0.0至199.255.255,255)分配给北类洲
地址块2007(200.0.0.0至201255.255.255)分配给中美洲和南美洲:
地址块202/7(202.0.0.0至203255.255.255)分配给亚洲和太平洋地区,
上面的每一个地址块包含有钓3200万个地址,这种分配地址的方法就使得IP地址与地理位置相关联。它的好处是可以大大压缩路由表中的项目数。例如,凡是从中国发往北美的IP数据报(不管它是地址块198/7中的哪一个地址)都先送交位于美国的一个路由器,因此在路由表中使用一个项目就行了。
使用CIDR后,由于要寻找最长前缀匹配,使路由表的查找过程变得更加复杂了。当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题。例如,连接路由器的线路的速率为10Gbit/s,而分组的平均长度为2000bit,那么路由器就应当平均每秒钟能够处理500万个分组(常记为5Mpps)。或者说,路由器处理一个分组的平均时间只有200s(1ns=10^-9秒)。因此,查找每一个路由所需的时间是非常短的。
对无分类编址的路由表的最简单的查找算法就是对所有可能的前缀进行循环查找。例如,给定一个目的地址D。对每一个可能的网络前缀长度M,路由器从D中提取前M个位成一个网络前缀,然后查找路由表中的网络前缀。所找到的最长匹配就对应于要查找的路由。
"这种最简单的算法的明显缺点就是查找的次数太多。最坏的情况是路由表中没有这个路由。在这种情况下,算法仍要进行32次(具有32位的网络前缀是一个特定主机路由)。就是要找到一个传统的B类地址(即/16),也要查找16次。对于经常使用的歌认路由,这种算法都要经历31次不必要的查找。"
为了进行更加有效的查找,通常是把无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是 二叉线索 (binary trie),它是一种特殊结构的树。IP地址中从左到右的比特值决定了从根节点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。
图4-26用一个例子来说明二叉线索的结构。图中给出了5个IP地址。为了简化二叉线索的结构,可以先找出对应于每一个P地址的唯一前缀(unique prefix)。所谓唯一前缀就是在表中所有的P地址中,该前缀是唯一的。这样就可以用这些唯一前缀来构造二叉线索。在进行查找时,只要能够和唯一前缀相匹配就行了。
从二叉线索的根节点自顶向下的深度最多有32层,每一层对应于IP地址中的一位。一个IP地址存入二叉线索的规则很简单。先检查IP地址左边的第一位,如为0,则第一层的节点就在根节点的左下方;如为1,则在右下方。然后再检查地址的第二位,构造出第二层的节点。依此类推,直到唯一前缀的最后一位。由于唯一前缀一般都小于32位,因此用唯一前缀构造的二叉线索的深度往往不到32层。图中较粗的折线就是前缀0101在这个二叉线索中的路径。二叉线索中的小圆圈是中间节点,而在路径终点的小方框是叶节点(也叫做外部节点)。每个叶节点代表一个唯一前缀。节点之间的连线旁边的数字表示这条边在唯一前缀中对应的比特是0或1。
假定有一个IP地址是1001 1011 0111 1010 0000 0000 0000 0000,需要查找该地址是否在此二叉线索中。我们从最左边查起。很容易发现,查到第三个字符(即前缀10后面的0)时,在二叉线索中就找不到匹配的,说明这个地址不在这个二叉线索中。
以上只是给出了二叉线索这种数据结构的用法,而并没有说明“与唯一前缀匹配”和“与网络前缀匹配”的关系。显然,要将二叉线索用于路由表中,还必须使二叉线索中的每一个叶节点包含所对应的网络前缀和子网掩码。当搜索到一个叶节点时,就必须 将寻找匹配的目的地址和该叶节点的子网掩码进行逐位“与”运算,看结果是否与对应的网络前缀相匹配 。若匹配,就按下一跳的接口转发该分组。否则,就丢弃该分组。
总之,二叉线索只是提供了一种可以快速在路由表中找到匹配的叶节点的机制。但这是否和网络前缀匹配,还要和子网掩码进行一次逻辑与的运算。
“为了提高二叉线索的查找速度,广泛使用了各种 压缩技术 。例如,在图4-26中的最后两个地址,其最前面的4位都是1011。因此,只要一个地址的前4位是1011,就可以跳过前面4位(即压缩了4个层次)而直接从第5位开始比较。这样就可以减少查找的时间。当然,制作经过压缩的二叉线索需要更多的计算,但由于每一次查找路由表时都可以提高查找速度,因此这样做还是值得的。”
4. 计算机网络谢希仁编着的第六版第四章课后习题答案
第4 章 网络层
4-01网络层向上提供的服务有哪两种?试比较其优缺点。
答案:虚电路服务和数据报服务。
虚电路的优点:虚电路服务是面向连接的,网络能够保证分组总是按照发送顺序到达目的站,且不丢失、不重复,提供可靠的端到端数据传输;目的站地址仅在连接建立阶段使用,每个分组使用短的虚电路号,使分组的控制信息部分的比特数减少,减少了额外开销;端到端的差错处理和流量控制可以由分组交换网负责,也可以由用户机负责。虚电路服务适用于通信信息量大、速率要求高、传输可靠性要求高的场合。
虚电路的缺点:虚电路服务必须建立连接;属于同一条虚电路的分组总是按照同一路由进行转发;当结点发生故障时,所有通过出故障的结点的虚电路均不能工作。
数据报的优点:数据报服务不需要建立连接;每个分组独立选择路由进行转发,当某个结点发生故障时,后续的分组可以另选路由,因而提高了通信的可靠性。数据报服务的灵活性好,适用于传输可靠性要求不高、通信子网负载不均衡、需要选择最佳路径的场合。
数据报的缺点:数据报服务是面向无连接的,到达目的站时不一定按发送顺序,传输中的分组可能丢失和重复,提供面向无连接的、不可靠的数据传输;每个分组都要有目的站的全地址;当网络发生故障是,出故障的结点可能会丢失数据,一些路由可能会发生变化;端到端的差错处理和流量控制只由主机负责。
答案太多传不上来,留下邮箱可以发给你..........
5. 计算机网络第4章(网络层)
计算机网络微课堂 的笔记整理
笔记也放到了 我的github 和 我的gitee 上
一种观点:让网络负责可靠交付
发送方 发送给 接收方 的所有分组都沿着同一条虚电路传送
另一种观点:网络提供数据报服务
发送方 发送给 接收方 的分组可能沿着不同路径传送
A类地址
B类地址
C类地址
练习
IP 地址的指派范围
一般不使用的特殊的 IP 地址
IP 地址的一些重要特点
(1) IP 地址是一种分等级的地址结构 。分两个等级的好处是:
(2) 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口 。
(3) 用转发器或网桥连接起来的若干个局域网仍为一个网络 ,因此这些局域网都具有同样的网络号 net-id。
(4) 所有分配到网络号 net-id 的网络,无论是范围很小的局域网,还是可能覆盖很大地理范围的广域网,都是平等的。
在 ARPANET 的早期,IP 地址的设计确实不够合理:
如果想要将原来的网络划分成三个独立的网路
所以是否可以从主机号部分借用一部分作为子网号
基本思路
划分为三个子网后对外仍是一个网络
举例
例子1
例子2
默认子网掩码
无分类域间路由选择 CIDR (Classless Inter-Domain Routing)。
举例
给定一个IPv4地址快,如何将其划分成几个更小的地址块,并将这些地址块分配给互联网中不同网络,进而可以给各网络中的主机和路由器接口分配IPv4地址
划分子网的IPv4就是定长的子网掩码
举例
无分类编址的IPv4就是变长的子网掩码
举例
举例
源主机如何知道目的主机是否与自己在同一个网络中,是直接交付,还是间接交付?
主机C如何知道路由器R的存在?
路由器收到IP数据报后如何转发?
假设IP数据报首部没有出错,路由器取出IP数据报首部各地址字段的值
接下来路由器对该IP数据报进行查表转发
路由器是隔离广播域的
静态路由配置
举例
默认路由
举例
默认路由可以被所有网络匹配,但路由匹配有优先级,默认路由是优先级最低的
特定主机路由
举例
有时候,我们可以给路由器添加针对某个主机的特定主机路由条目
一般用于网络管理人员对网络的管理和测试
静态路由配置错误导致路由环路
举例
假设将R2的路由表中第三条目录配置错了下一跳
这导致R2和R3之间产生了路由环路
聚合了不存在的网络而导致路由环路
举例
正常情况
错误情况
解决方法
网络故障而导致路由环路
举例
解决方法
添加故障的网络为黑洞路由
6. 计算机网络(四)——网络层
网际层的IP协议及配套协议 :
(1) 从收到的分组的首部提取 目的 IP 地址 D 。
(2) 先判断是否为直接交付,对路由器直接相连的网络逐个检查:用各网络的 子网掩码和 D 逐位相“与” ,看是否和相应的网络地址匹配。若匹配,则将分组直接交付。否则就是间接交付,执行 (3)。
(3) 若路由表中有目的地址为 D 的 特定主机路由 ,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
(4) 对路由表中的每一行,将 子网掩码和 D 逐位相“与” 。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
(5) 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
(6) 报告转发分组出错。
从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配
OSPF 的其他特点:
7. 计算机网络自顶向下方法--网络层
R1. 我们回顾一下本书中使用的某些术语。前面讲过,运输层的分组名称是报文段,数据链路层的分组名字是帧。网络层的分组名字是什么?前面讲过,路由器和链路层交换机都称为分组交换机。路由器和链路层交换机间的根本区别是什么?回想我们对数据报网络和虚电路网络都使用术语路由器。
R2. 在数据报网络中,网络层最重要的两个功能是什么?在虚电路网络中,网络层的3个最重要的功能是什么?
R3. 路由选择和转发的区别是什么?
R4. 在数据报网络和虚电路网络中,路由器都使用转发表吗?如果是,描述用于这两类网络的转发表。
R5. 描述某些网络层能为单个分组提供的某些假想的服务。对于分组流进行相同的描述。因特网的网络层为你提供了这些假想服务吗?ATM的CBR服务模型提供了该假想服务吗?ATM的ABR服务模型提供类该假想服务吗?
R6. 列出某些得益于ATM的CBR服务模型的应用。
R7. 讨论为什么在高速路由器的每个输入端口都存储转发表的影子副本。
R8. 4.3节中讨论了3类交换结构。列出并简要讨论每一类交换结构。哪一种(如果有的话)能够跨越交换结构并行发送多个分组?
R9. 描述在输入端口会出现分组丢失的原因。描述在输入端口如何消除分组丢失(不使用无限大缓存区)。
R10. 描述在输出端口出现分组丢失的原因。通过增加交换结构速率,能够防止这种丢失吗?
R11. 什么是HOL阻塞?它出现在输入端口还是输出端口?
R12. 路由器有IP地址吗?如果有,有多少个?
R13. IP地址223.1.3.27的32比特二进制等价形式是什么?
R14. 考察使用DHCP获得它的IP地址,网络掩码,默认路由器和其本地DNS服务器的IP地址的主机。列出这些值。
R15. 假设在一个源主机和一个目的主机之间有3台路由器。不考虑分片,一个从源主机发送给目的主机的IP报文将通过多少个端口?为了将数据报从源移动到目的地需要检索多少个转发表?
R16. 假设某应用每20ms生成一个40字节的数据块,每块封装在一个TCP报文中,TCP报文再封装在一个IP数据报中。每个数据报的开销有多大?应用数据所占的百分比是多少?
R17. 假设主机A向主机B发送封装在一个IP数据报中的TCP报文段。当主机B接收到该数据报时,主机B中的网络层应该如何知道它应当将该报文段(即数据报的有效载荷)交给TCP而不是UDP或某个其他东西呢?
R18. 假定你购买了一个无线路由器并将其与电缆调制解调器相连,并且你的ISP动态地为你连接的设备(即你的无线路由器)分配一个IP地址。还假定你家有5台PC,均使用802.11以无线方式与该无线路由器相连。怎样为这5台PC分配IP地址?该无线路由器使用NAT吗?为什么?
R19. 比较IPv4和IPv6首部字段。它们有某些字段是相同的吗?
R20. 有人说当IPv6通过IPv4路由器建隧道时。IPv6将IPv4隧道作为链路层协议。你同意这种说法吗?为什么?
R21. 比较和对照链路状态和距离向量路由选择算法?
R22. 讨论因特网的等级制组织是怎样使得其能够扩展为数以百万计用户的。
R23. 每个自治系统使用相同的AS内部路由选路算法是必要的吗?为什么?
R24. 考虑图4-37。从D中的初始表开始,假设D收到来自A的下面的通告:
D中的表会改变吗?如果是,怎样变化?
R25. 比较RIP和OSPF使用的通告。
R26. 填空:RIP通告通常宣称到各目的地的跳数。另一方面,BGP则是通告到各目的地的_____?
R27. 为什么在因特网中用到了不同类型的AS间与AS内部选路协议?
R28. 为什么策略考虑对于AS内部协议(如OSPF和RIP)与对于AS间路由选择协议(如BGP)一样重要呢?
R29. 定义和对比下列术语:子网,前缀和BGP路由。
R30. BGP是怎样使用NEXT-HOP属性的?它是怎样使用AS-PATH属性的?
R31. 描述一个较高层ISP的网络管理员在配置BGP时是如何实现策略的。
TODO----HERE
4.6.32 通过多个单播实现广播抽象与通过支持广播的单个网络(路由器)实现广播抽象之间有什么重要区别吗?
答:N次单播效率低,需要知道接收者的地址,消耗大。但是使用广播的话可以通过洪泛方法发送消息。
4.6.33 对于我们学习的3种一般的广播通信方法(无控制洪泛,受控洪泛和生成树广播),下列说法正确吗?可以假定分组不会因缓存溢出而丢失,所有分组以它们发送的顺序交付给链路。
a.一个节点可能接收到同一个分组的多个拷贝。
b.一个节点可能跨越相同的出链路转发多个分组的拷贝。
答:无控制洪泛:a对,b对。受控洪泛:a对,b错。生成树广播:a错,b错。
4.6.34 当一台主机加入一个多播组时,它必须将其IP地址改变为它所加入的多播组的地址吗?
答:对错误。
4.6.35 IGMP和广域多播选路协议所起的作用是什么?
答:IGMP运行在一台主机与其直接相连的路由器之间。IGMP允许主机指定路由器要加入的组播网。然后由组播路由器与运行组播路由协议的其他组播路由器一起工作。
4.6.36 在多播选路场合中,一棵组共享的树与一颗基于源的树之间有什么区别?
答:一个组共享的树来为组中所有发送方分发流量,一个是为每个独立的发送方构建一颗特定源的选路树。
8. 计算机网络_网络层
在计算机网络领域,网络层应该向运输层提供怎样的服务(面向连接还是无连接)曾引起了长期的争论,争论焦点的实质就是:在计算机通信中,可靠交付应当由谁来负责?是 网络 还是 端系统
只是一条 逻辑上的连接 ,分组都沿着这条逻辑连接按照存储转发方式传送,并不是真正建立了一条物理连接。
请注意,电路交换的 电话通信 是先建立了一条 真正的连接 。因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
数据报服务
网际协议IP是TCP/IP体系中两个最主要的协议之一,与IP协议配套使用的还有三个协议
互连在一起的网络要进行通信,会遇到许多问题要解决
网络互连要使用一些中间设备
中间设备 又称为 中间系统 或 中继 系统
如果我们只从网络层考虑问题,那么IP数据报就可以想象是在网络层中传送。
每一类地址都由两个固定长度的字段组成,其中一个 字段是 网络号 net-id ,它标志主机(或路由器)所连接到的网络,而另一个字段则是**主机号 host-id
**,它标志该主机(或路由器)
可以记为
观察上图
比较重要的一点是要区别IP地址与 硬件地址 的区别
从层次的角度来看, 物理地址是数据链路层和物理层使用的地址,而IP地址是网络层和以上使用的地址,是一种逻辑地址(称IP地址是逻辑地址是因为IP地址是用 软件实现的)
有 四个A类网络 通过三个路由器连接在一起,每个网络上都可能有成千上万个主机。可以想象,若按目的主机号来制作路由表,则所得出的路由表就会过于庞大。丹若按主机所在的 网络地址 来制作路由表,那么每一个路由器中的路由表就只包含 四个项目 。这样可以大大简化路由表。
使用这样的简化图,我们可以不用关心某个网络内部的具体拓扑结构及连接在该网络上有多少台计算机,他还强调了在互联网上转发分组时,是 从一个路由器转发到下一个路由器 。
根据目的网络地址就能确定下一跳路由器,这一点做的结果是:
虽然因特网所有分组转发都是 基于目的主机所在的网络 ,但在大多数情况下都允许有这样的特例,即对特定的目的主机指明一个路由。这种路由叫做 特定主机路由 ,采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
IP 数据报的首部中 没有地方 可以用来指明“下一跳路由器的 IP 地址”,当路由器收到待转发的数据报, 不是 将下一跳路由器的 IP 地址填入 IP 数据报,而是 送交下层的网络接口软件 。网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成 硬件地址 ,并将此硬件地址放在链路层的** MAC 帧 的首部,然后根据这个 硬件地址**找到下一跳路由器。
(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
在 ARPANET 的早期,IP 地址的设计确实不够合理。
从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。这种做法叫作划分子网(subnetting) 。划分子网已成为因特网的正式标准协议。
请注意现在子网号为3的网络的 网络地址 是145.13.3.0(既不是原来两级的IP地址的网络地址145.13.0.0,也不是简单的子网号3),为了使路由器能很方便的从数据报中的目的IP地址中提取所要找的子网的网络地址,路由器就要使用三级IP地址的子网掩码(如上图,三级IP地址的子网掩码),它也是32位,由一串1和跟随的一串0组成。子网掩码中的1对应于IP地址中原来二级地址中的16位网络号加上新增加的8位子网号,而子网掩码中的0对应于现在的8位主机号。 虽然RFC文档中没有规定子网掩码中的一串1必须是连续的,但却极力推荐在子网掩码中选用连续的1,以避免发生错误
不管有没有划分子网,只要把子网掩码和IP地址进行逐位相 与 运算,就立即得出网络地址来,这样路由器处理到来的分组时可以采用相同的算法。
归纳下上述的要点,从网络145.13.0.0外面看,这就是一个普通的B类网络,但进入这个网络后(即到了路由器),就看到了还有许多网络(即划分了子网后的许多网络),其网络地址为145.13.x.0(这里x可以表示不同的数值),而这些网络的子网掩码都是24个连1跟上8个连0。总之,在这个网络的内外,看到的网络是不同的
为了更便于查路由表,现在因特网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码,默认子网掩码中1的位置和IP地址中的网络号字段正好相对应。因此,若用默认子网掩码和某个不划分子网的IP地址逐位相与,就应当能够得出该IP地址的网络地址来,这样做可以不用查找该地址的类别位就能知道这是哪一类的IP地址 (书上原话 没懂 !!!!)
P137有一个表格写B类子网划分选择(使用固定长度子网)
有一个例题请见教材P139
划分子网在一定程度上缓解了因特网在发展中遇到的困难。然而在 1992 年因特网仍然面临三个必须尽早解决的问题,这就是:
无分类的两级编址的记法是:
CIDR 还使用 斜线记法 (slash notation),它又称为 CIDR记法 ,即在 IP 地址后面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。CIDR 把网络前缀都相同的连续的 IP 地址组成 “CIDR 地址块” 。
为了更方便的进行路由选择,CIDR使用32位的地址掩码,地址掩码由一串1和一串0组成,而1的个数就是网络前缀的长度。例如/20地址块的地址掩码是:11111111 11111111 11110000 00000000 20个连续的1,斜线记法中,斜线后面的数字就是地址掩码中1的个数
这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该 ISP 的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
// 这里还没太懂.... 就是共有多少个几类网络那里
报文格式
ICMP差错报告报文的数据字段的内容
9. 计算机网络:网络层(2)
如图,一个IP数据报由首部和数据两部分组成。首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。
(1)版本
占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。也有使用IPv6的(即版本6的IP协议)。
(2)首部长度
占4位,可表示的最大十进制数值是15。 这个字段所表示数的单位是32位字(1个32位字长是4字节),因此,当I的首部长度为1111时(即十进制的15),首部长度就达到最大值60字节。当分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。 因此数据部分永远在4字节的整数倍时开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务
占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年ITF把这个字段改名为区分服务DS( Differentiated Services。只有在使用区分服务时,这个字段才起作用。在一般的情况下都不使用这个字段。
(4)总长度
总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有其自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU( Maximum Transfer Unit)。当一个IP数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。虽然使用尽可能长的数据报会使传输效率提高,但由于以太网的普遍应用,所以实际上使用的数据报长度 很少有超过1500字节 的。为了不使IP数据报的传输效率降低,有关IP的标准文档规定,所有的主机和路由器必须能够处理的IP数据报长度不得小于576字节。这个数值也就是最小的IP数据报的总长度。当数据报长度超过网络所容许的最大传送单元MTU时,就必须把过长的数据报进行分片后才能在网络上传送。这时,数据报首部中的“总长度”字段不是指未分片前的数据报长度,而是指分片后的每一个分片的首部长度与数据长度的总和。
(5)标识 (identification)
占16位。软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag)
占3位,但目前只有两位有意义。
标志字段中的最低位记为 MF ( More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若千数据报片中的最后一个。
标志字段中间的一位记为 DF (Dont Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移
占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间
占8位,生存时间字段常用的英文缩写是TTL( Time To live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报然而随着技术的进步,路由器处理数据报所需的时间不断在缩短,一般都远远小于1秒钟,后来就把TTL字段的功能改为“跳数限制”(但名称不变)。路由器在转发数据报之前就把TTL值减1。若TTL值减小到零,就丢弃这个数据报,不再转发。因此,现在TTL的单位不再是秒,而是跳数。 TTL的意义是指明数据报在因特网中至多可经过多少个路由器 。显然,数据报能在因特网中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。因为这个数据报一传送到局域网上的某个路由器,在被转发之前TTL值就减小到零,因而就会被这个路由器丢弃。
(9)协议
占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
过程大致如下:
(1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址为N。
(2)若N就是与此路由器直接相连的某个网络地址,则进行直接交付,不需要再经过其他的路由器,直接把数据报交付给目的主机(这里包括把目的主机地址D转换为具体的硬件地址,把数据报封装为MAC帧,再发送此帧);否则就是间接交付,执行(3)。
(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4)若路由表中有到达网络N的路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(5)
(5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6)报告转发分组出错。
在进行更详细的转发解释之前,先要了解一下子网掩码:
上一篇说到了二级IP地址,也就是IP地址由网络号和主机号组成。
二级IP地址有以下缺点:
第一,IP地址空间的利用率有时很低每一个A类地址网络可连接的主机数超过1000万,而每一个B类地址网络可连接的主机数也超过6万。然而有些网络对连接在网络上的计算机数目有限制,根本达不到这样大的数值。例如10 BASE-T以太网规定其最大结点数只有1024个。这样的以太网若使用一个B类地址就浪费6万多个IP地址,地址空间的利用率还不到2%,而其他单位的主机无法使用这些被浪费的地址。有的单位申请到了一个B类地址网络,但所连接的主机数并不多,可是又不愿意申请一个足够使用的C类地址,理由是考虑到今后可能的发展。IP地址的浪费,还会使IP地址空间的资源过早地被用完。
第二,给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
每一个路由器都应当能够从路由表査出应怎样到达其他网络的下一跳路由器。因此,互联网中的网络数越多,路由器的路由表的项目数也就越多。这样,即使我们拥有足够多的IP地址资源可以给每一个物理网络分配一个网络号,也会导致路由器中的路由表中的项目数过多。这不仅增加了路由器的成本(需要更多的存储空间),而且使查找路由时耗费更多的时间,同时也使路由器之间定期交换的路由信息急剧增加,因而使路由器和整个因特网的性能都下降了。
第三,两级IP地址不够灵活。
有时情况紧急,一个单位需要在新的地点马上开通一个新的网络。但是在申请到一个新的IP地址之前,新增加的网络是不可能连接到因特网上工作的。我们希望有一种方法,使一个单位能随时灵活地增加本单位的网络,而不必事先到因特网管理机构去申请新的网络号。原来的两级IP地址无法做到这一点。
于是为解决上述问题,从1985年起在IP地址中又增加了一个“子网号字段”,使两级IP地址变成为三级IP地址,它能够较好地解决上述问题,并且使用起来也很灵活。这种做法叫作划分子网 (subnetting),或子网寻址或子网路由选择。划分子网已成为因特网的正式标准协议。
划分子网的基本思路如下:
(1)一个拥有许多物理网络的单位,可将所属的物理网络划分为若干个子网 subnet)。划分子网纯属一个单位内部的事情。本单位以外的网络看不见这个网络是由多少个子网组成,因为这个单位对外仍然表现为一个网络。
(2)划分子网的方法是从网络的主机号借用若干位作为子网号 subnet-id,当然主机号也就相应减少了同样的位数。于是两级IP地址在本单位内部就变为三级IP地址:网络号、子网号和主机号。也可以用以下记法来表示:
IP地址:=(<网络号>,<子网号>,<主机号>}
(3)凡是从其他网络发送给本单位某个主机的IP数据报,仍然是根据IP数据报的目的网络号找到连接在本单位网络上的路由器。但此路由器在收到IP数据报后,再按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
简单来说就是原来的IP地址总长度不变,把原来由“网络号+主机号”组成的IP地址,变为了“网络号+子网号+主机号”,因为其他网络找当前网络的主机时,使用的还是网络号,所以外面的网看不见当前网络的子网。当本网的路由器在收到IP数据报后,按目的网络号和子网号找到目的子网,把IP数据报交付给目的主机。
现在剩下的问题就是:假定有一个数据报(其目的地址是145.133.10)已经到达了路由器R1。那么这个路由器如何把它转发到子网145.3.3.0呢?
我们知道,从IP数据报的首部并不知道源主机或目的主机所连接的网络是否进行了子网的划分。这是因为32位的IP地址本身以及数据报的首部都没有包含任何有关子网划分的信息。因此必须另外想办法,这就是使用子网掩码( (subnet mask)。
子网掩码,简单来说就是把除了主机号设置为0,其他位置的数字都设置为1。
以B类地址为例:
把三级IP地址的网络号与子网号连起来,与子网掩码做“与”运算,就得到了子网的网络地址。
在因特网的标准规定:所有的网络都必须使用子网掩码,同时在路由器的路由表中也必须有子网掩码这一栏。如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码。
那么既然没有子网,为什么还要使用子网掩码?
这就是为了更便于査找路由表。
默认子网掩码中1的位置和IP地址中的网络号字段 net-id正好相对应。因此,若用默认子网掩码和某个不划分子网的IP地址逐位相“与”(AND),就应当能够得出该IP地址的网络地址来。这样做可以不用查找该地址的类别位就能知道这是哪一类的IP地址。显然,
子网掩码是一个网络或一个子网的重要属性。在RFC950成为因特网的正式标准后,路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。在路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。若一个路由器连接在两个子网上就拥有两个网络地址和两个子网掩码。
以一个B类地址为例,说明可以有多少种子网划分的方法。在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
表中的“子网号的位数”中没有0,1,15和16这四种情况,因为这没有意义。虽然根据已成为因特网标准协议的RFC950文档,子网号不能为全1或全0,但随着无分类域间路由选择CIDR的广泛使用,现在全1和全0的子网号也可以使用了,但一定要谨慎使用,要弄清你的路由器所用的路由选择软件是否支持全0或全1的子网号。这种较新的用法我们可以看出,若使用较少位数的子网号,则每一个子网上可连接的主机数就较多。
反之,若使用较多位数的子网号,则子网的数目较多但每个子网上可连接的主机数就较少因此我们可根据网络的具体情况(一共需要划分多少个子网,每个子网中最多有多少个主机)来选择合适的子网掩码。
所以,划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数。
在划分子网的情况下,分组转发的算法必须做相应的改动。
使用子网划分后,路由表必须包含以下三项内容:目的网络地址、子网掩码和下一跳地址。
所以之前的流程变成了下面这样:
(1)从收到的数据报的首部提取目的IP地址D。
(2)先判断是否为直接交付。对路由器直接相连的网络逐个进行检查:用各网络的子网掩码和D逐位相“与”(AND操作),看结果是否和相应的网络地址匹配。若匹配,则把分组进行直接交付(当然还需要把D转换成物理地址,把数据报封装成帧发送出去),转发任务结束。否则就是间接交付,执行(3)。
(3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4)对路由表中的每一行(目的网络地址,子网掩码,下一跳地址),用其中的子网掩码和D逐位相“与”(AND操作),其结果为N。若N与该行的目的网络地址匹配,则把数据报传送给该行指明的下一跳路由器;否则,执行(5)。
5)若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)
(6)报告转发分组出错。