网络(四)网络层
第四章 网络层
4.1 路由与转发
一. 路由简介
-
路由表的表项:
(1)假设有4个A类网络通过3个路由器连接
(2)若按照目的主机号制作路由表,则每个网络上的成千上万的主机都要记录在表中,造成路由表太大
(3)但是如果按照主机所在网络地址制作路由表,则每个路由器中的路由表只要有4项即可
(4)这样可以简化转发表,因此路由表表项为:
(5)路由表项举例
-
静态路由与动态路由
(1)静态路由:管理员自己书写路由表
(2)动态路由:通过距离向量或 算法自主形成路由表 -
查找路由表
(1)按照路由表,根据目的网络地址就能确定下一条路由器
(2)IP数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次间接交付)
(3)只有到达最后一个路由器时,才试图向目的主机进行直接交付 -
特定主机路由
(1)这种路由是为特定的目的主机指明一种路由器
(2)采用特定主机路由可使网络管理人员能方便的控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定路由
(3)特定主机路由的下一跳是X.X.X.X,子网掩码是255.255.255.255 -
默认路由
(1)在转发数据报过程中,无法确定通过哪些口转发出去,就发往默认路由 -
分组转发算法
(1)从数据报首部提取目的主机的IP地址D,从目的地址D中得出目的网络的网络号N
(2)查找路由表,若N与此路由器直接相连,则采用直接交付。若不是,则继续执行(3)
(3)若路由表中有目的地址为D的特定主机路由,则把数据报转发给特定路由。否则,执行(4)
(4)若路由表中有到达的网络N的路由,则转发给指明的下一跳;否则发送给默认路由
二. 路由算法
- 距离矢量路由算法
- 链路状态
- 层次路由:OSPF划分自制域
4.2 IPv4
一. IP分组的格式
-
IP数据首部格式
首部长度固定20字节
-
IP数据首部格式
(1)版本号,首部长度,区分服务
i. 版本号:固定为4,标识IPv4
ii. 首部长度:首部长度是一个倍数值,是4字节的倍数。首部固定长20字节,所以固定为5
iii. 区分服务:占8位,用来获得更好的服务,一般不使用。
(2)总长度:
包含首部和数据部分的总长度.
占16字节,因此最大65535,但是实际上整个数据报的长度不能超过1500字节(MTU)
(4)标识,标志,片偏移
i. 标识,标志,片偏移用来确定数据分片
ii. 标识:一个16bit的数字,他是一个计数器,用来标识那几个分片是属于一个大分片
iii. 标志:flag占3bit,只有后2bit有用。
最后一bit表示MF(more fragment):mg=1表示后面还有分片
中间一bit表示DF(Dont fragment):df=1表示不允许分片
v. 片偏移:是一个倍数,指出该分组处于原大分片的相对位置。以8字节为单位
eg:大数据分片3800字节,如果以1400字节为一个分片,则每个小分片的片偏移字段值为多少?
第一片,片偏移0;第二片,片偏移1400/8字节 = 175;第三片,片偏移2800/8字节 = 350
(4)生存时间:剩余的可转发的路由器个数。如果TTL为0,路由器直接求其,不予转发。(最大128)
(5)协议:指明数据部分使用的是什么协议:TCP,UDP,ICMP或者OSPF
(6)首部校验和:不校验数据部分
二. IPv4分类地址
-
IP地址分类
(1)IP地址右2部分组成:<网络号>,<主机号>
(2)IPv4地址由32位组成,长4字节。
(3)IPV4分为A,B,C,D,E5类地址。这5类地址的网络号最前面几位表示该地址使那种类别的地址。
(4)表示字段最长占4位(c,d类标识)
-
A类地址
(1)A类地址网络号最多\(2^7-2\)
A类地址网络号最前面为0,因此他的网络号最多有7位可用。
只有A类地质的网络号有可能全0,而全0的网络号表示“本网络”
网络号127(01111111)表示该地址作为本地软件换回测试使用,这种网络号不会作为目的地址在网络上传输。
(2)A类地质主机号最多\(2^{24}-2\)(除去全0全1主机)
(3)A类地址前面的0固定,因此A类地址大约占所有ipv4地址的50% -
B类地址
(1)B类地质网络号最多\(2^{14}-1\)
B类地质前面的10固定,剩下14位网络号可被选用
B类地质不存在网络号全0的可能,但是128.0网络号规定不可用,要从128.1网络号开始使用
(2)B类地址主机号最多\(2^{16}-2\)
(3)B类地址前面的10固定,因此B类地址大约占所有ipv4地址的25% -
C类地址
(1)C类地址网络号最多\(2^{21}-1\)
C类地址前面的110固定,可选网络号占21位
C类地址网络号192.0.0规定不可用,从192.0.1开始
(2)C类地址主机号最多\(2^8-2\)
(3)C类地址前面的110固定,因此C类地址大约占所有ipv4地址的12.5%
-
IP地址特点:
(1)路由器根据地址的网络号转发分组,来减小路由表的大小
(2)路由器连接在2个虚拟网络上,所以路由器至少有2个IP地址(至少2个网络号)
(3)使用转发器,网桥链接的网络使用同一个网络号,是一个网段。不同网络号的局域网必须使用路由器连接 -
IP地址特点:
(1)路由器根据地址的网络号转发分组,来减小路由表的大小
(2)路由器连接在2个虚拟网络上,所以路由器至少有2个IP地址(至少2个网络号)
(3)使用转发器,网桥链接的网络使用同一个网络号,是一个网段。不同网络号的局域网必须使用路由器连接 -
IP地址与硬件地址
(1)MAC地址使物理层和数据链路层使用的地址,MAC帧的源地质和目的地址都是硬件地址
(2)IP地址使逻辑地址,是软件实现的地址
(3)整个IP数据报就是MAC帧的数据段
三. 特殊的IP地址
- ABC类地址都是私有地址,内部地址。不能作为外部因特网的公有地址
- 255.255.255.255是受限的广播地址
- 10.255.255.255直接广播地址
- 注意:
(1)路由器连接的是多个网络。网桥和交换机连接的仍是一个网络
(2)同一局域网上的主机或路由器的Ip地址的网络号必须是一致的
子网划分 : 减少直接交付的压力
四. 子网划分与无分类网址
-
划分子网
(1)划分子网把原来的二级IP地址划分成三级iP地址。把二级地址中的主机号选出几位作为子网号,形成如下结构
(2)划分子网属于一个单位内部的事,外部网络看来,这些子网均属于一个网络
(3)划分子网的路由器变为3个表目:
(4)使用子网掩码的路由器转发数据报的过程:把接收到的数据报从中解析出目的IP地址,用该地址与路由表中的子网掩码进行按位与。获得子网号,按照子网号进行转发或选择默认路由 -
无分类网址CIDR
(1)CIDR不在采用ABCDE的分类地址,而是采用<网络前缀><主机号>的二级iP地址表示方法
(2)CIDR采用斜线表示法,指明网络号占几位
eg:192.199.170.82/27:表示网络号占27位
(3)CIDR把网络前缀相同的连续的IP地址组成“CIDR地址块”
eg:128.14.32.0/20表示的地址块共有\(2^{12}\)个地址(主机号占\(2^{12}\)个)。
该地址块的最小地址为128.14.32.0,最大地址为128.14.47.255
(4)路由聚合
一个CIDR可以表示多个地址,如上面的128.14.32.0/20表示的是一块地址。
将多个CIDR地址块聚合成一个大的CIDR地址:只要找出相同的网络前缀bit。这样成为路由聚合和构成超网
(4)路由表最长匹配原则
采用CIDR编址,一个数据报的目的地址取不同位数的网络号后,可能和路由表中的多个项匹配.
此时应选择位数最多的网络号。因为网络号越长,其地址块就越少,路由就越具体。
(5)使用二叉线索查找路由表
因为CIDR的网络号需要使用最长匹配原则,所以要匹配路由表中的所有项,比较得出匹配位数长的。
为了提高匹配效率,通常采用二叉线索查找表
五. NAT协议
- NAT协议保留3段地址工内部使用:
4.3 ARP,DHCP,ICMP协议
一. ARP协议
-
ARP,DHCP,ICMP所处的协议层次
-
ARP地址解析协议
(1)ARP协议把主机的IP地址转换成主机的物理地址
(2)不管网络上使用什么协议,在实际的网络链路上,传送数据帧仍然需要硬件地址
(3)每个主机都设有ARP高速缓存(ARP Cache),缓存里记录所在局域网上,各主机和路由器IP地址到硬件地址的映射表
(4)从IP地址到硬件地址的转换是自动进行的。
(5)只要主机或路由器要和本网络的另一个已知IP地址的主机或路由器进行通信,ARP协议就会自动将该IP地址转换为链路层所需要的硬件地址。 -
ARP缓存行如何获取?
(1)一个主机A想获取主机B的硬件地址,首先主机A先广播发送ARP请求分组:“我是209.0.0.5,硬件地址是00-00-C0-15-AD-18,我想知道主机209.0.0.6的硬件地址”。
(2)这个数据报的目的MAC地址是FF-FF-FF-FF-FF-FF,它会被发送给局域网内的所有主机。单只有IP为209.0.0.6的主机会发送一个ARP响应报文,报告自己的物理地址
(3)ARP请求报文是广播的,ARP请求报文是单播的 -
局域网内主机信息发送过程
(1)当主机A欲向本局域网的主机B发送数据报:先在ARP缓存行中看有无主机B的IP地址?若有,则查出IP地址对应的硬件地址,写到MAC帧,然后把这个MAc帧发到主机B的硬件地址
(2)若要找的主机和源主机不在一个局域网上,则要通过ARP找到一个位于局域网上的路由器的硬件地址,然后把分组发送给路由器,让这个路由器把分组转发到下一个网络。(这个路由器就称为网关)。
【注】:一个数据报由源主机发到目的主机,数据报的源IP和目的IP不变,但是传输的时候,目的MAC地址是一直变化的。 -
ARP协议应用的4种典型场景
(1)发送方是主机,要把IP数据报发送到本网络上的另一个主机。此时ARP找到目的主机的硬件地址。
(2)发送方是主机,要把数据报发送到另一个网络的主机。此时用ARP本网络上的一个路由器的硬件地址。剩下的工作由这个路由器完成
(3)发送方是路由器,要把数据报转发到本网络上的一个主机,此时用ARP找到目的主机的硬件地址
(4)发送方是路由器,要把数据报发送到另一个网络上的主机,此时用ARP找到本网络上的一个路由器的硬件地址。剩下的工作由这个路由器完成
二. 动态配置协议DHCP
-
DHCP的特点
(1)提供了即插即用的机制
(2)这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与配置
(3)DHCP利用UDP发送数据。DHCP客户端占用68端口,DHCP服务器监听67端口 -
DHCP的客户服务器模式
(1)需要IP地址的主机在启动时就向DHCP服务器广播发送发现报文(DHCP Discover),此时该主机就称为DHCP客户。
(刚启动的机器,IP地址为0.0.0.0)
(2)DHCP获取本机IP的过程
-
DHCP客户租用期
(1)DHCP服务器给即将分配的地址一个租用期,过了租用期的时间,这个临时的iP地址就会被回收
(2)即将过期时,DHCP客户会向DHCP服务端发送一个DHCPREQUEST,要求更新租用期。此时DHCP服务端回发送DHCPACK或DHCPNACK报文,表示同意或不同意更新租用期。若被同意,则DHCP客户会更新租用期,重新设置计时器。
(3)DHCP客户可随时提前终止所提供的租用期,此时只需向DHCP服务器发送释放报文DHCPREALESE即可。
三. ICMP控制报文
-
ICMP基本概念
(1)ICMP是IP层的重要组成部分,用来传递差错报文和其他控制信息
(2)ICMP封装在IP数据报的数据部分
(3)由于IP首部校验和只校验首部,所以ICMP保温中也有自己的校验和字段来校验ICMP报文的正确性。
(4)ICMP报文的种类:ICMP差错报告报文和ICMP询问报文 -
5种ICMP差错报告报文
(1)终点不可达:路由器或主机不能按照IP数据报的目的地址交付数据时,向源点发送
(2)源点抑制:当路由器或主机由于数据拥塞而丢弃数据报时,向源点发送源点抑制报文,使源点知道应当放慢数据报的发送速率。
(3)时间超过:
i. 当路由器收到TTL为0的报文,先丢弃报文,再向源点发送超时报文。
ii. 当终点在预定时间内不能收到一个数据报的全部分片时,先丢弃收到的报文分片,再向源点发送超时报文。
(4)参数问题:
当路由器发现IP首部的字段值不正确时,先丢弃该报文,再向源点发送参数问题报文
(5)改变路由(重定向):
路由器把改变路由报文发送给主机后,让主机知道下次将数据报发送给另外的路由器
【注】:
(1)主机不会和路由器定期交换信息。而是在主机刚开始工作时,在主机路由中设置一个默认路由,所有数据报都发送到默认路由上,而这个默认路由知道每一个目的网络的最佳路由,于是该默认路由就会给主机发送改变路由报文,主机会在路由表中增加一条信息,使目的网络发送到新的路由器上
(2)ICMP差错报文不在发送差错报文
(3)只对第一个报文分片发送ICMP差错报文
(4)对于多播地址的IP数据报不去发送差错报文
(5)对于特殊地址(127.0.0.1)不发送差错报文
-
ICMP询问报文2种
(1)回送请求报文和此报文的回答:
回送请求报文用来测试主机是否可达并了解该主机的状态。收到该报文的主机要对此做出回答,这种回答也是询问报文
(2)时间戳请求回答和此报文的回答:
请某个主机或路由器回答当前时间 -
ping与traceroute程序
(1)ping直接使用网络层ICMP报文,不走TCP或UDP
(2)traceroute程序用来列出主机到达目的主机进过的路由列表
i. traceroute会多次发送同一个无法交付的UDP报文。但每次这个报文的TTL不同
ii. 第一个报文的TTL设置为1,这样使得收到该报文的第一个路由器发现TTL超时,丢弃报文并向源主机发送ICMP超时报文。
第二个报文设置TTL为2,使第二个路由器发送TTL超时报文。
这样直到最后发送到目的主机后,目的主机发现目的UDP端口不可达,所以发送ICMP终点不可达报文给源主机
iii. 路由器回送的ICMP超时报文和ICMP终点不可达报文中包含了路由器和不可达主机的IP,
因此traceroute程序就能获取主机到目的主机之间经过的路由器列表
【注】:traceroute程序就是n-1个ICMP超时报文 + 最后一个ICMP终点不可达报文
4.4 IPv6与移动IP
一. IPv6
- IPv6首部变为固定的40字节,且首部字段减小到8个。
- IPv6的地址空间占128bit
- IPv6的目的地址类型
(1)单播:一对一
(2)多播:多对多
(3)任播(范播):任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的那一个。 - 节点与接口
(1)IPv6将实现IPv6把主机和路由器统称为结点
(2)IPv6的地址分配给节点上的每个接口。
(3)一个接口可以有多个单播地址
(4)一个结点接口的单薄地址可用来唯一地标志该结点 - IPv6地址用冒号隔开:
(1)每16bit用一个:隔开
(2)零压缩
(3)IPv6地址包含IPv4地址,IPv6到IPv4地址的映射关系
4.5 路由协议
一. 路由选择协议
-
内部网关协议IGP(Internal Gateway Protocal)
(1)在一个自治系统内部是用的路由选择协议
(2)eg:RIP和OSPF -
外部网关协议EGP(External Gateway Protocal)
(1)若源站和目的站在不同的自治系统中,当数据报传送到一个自治系统的边界时,需要使用一种协议将路由选择信息传送到另一个自治系统中。
(2)这种协议就是外部网关协议。eg:BGP
二. RIP协议
- 内部网关协议RIP:基于路径向量的路由选择协议
(1)RIP协议的路由器记录这到目的网络的距离(跳数)
(2)RIP协议下的路由器,每隔30s,和自己相邻的路由器交换自己路由表中的全部信息
(3)每个RIP报文中都包含目的网络,距离,下一跳信息。接受RIP报文的路由器根据这个报文修改自己的路由表。如果超过3分钟都没有收到相邻路由器发送来的RIP报文,就把该路由器设置位不可达
(4)更新路由表的步骤
1)先把RIP报文中的下一跳改为这个相邻的路由器
2)若原来没有该目的网络,则把目的网络加入自己的路由表,距离加1,下一跳和RIP一致
3)若RIP的目的网络和下一跳地址,都和自身路由表一致,则更新距离为RIP报文中的距离+1
4)若RIP的目的网络和自身路由表一致,但下一跳和路由表不一致,则把RIP协议中的距离+1后,若该值小于路由表中的距离,则更新路由表的下一跳为RIP报文中的下一跳,并把距离改为RIP距离+1
(5)更新路由表带来的问题:坏消息传的慢
eg:
( 1 ) 路由器R1中路由表项(1,1,直接),路由器R2中的表项(1,2,R1)。
( 2 ) 表示R1和网络1的距离是1,R1发送到网络1的数据报可以直接交付。R2到网络1的距离是2,R2发送到网络1的下一跳是R1。
( 3 ) 若此时,R1和网络1的连接断掉,R1更新路由表项距离为16.但是可能在30秒后R1才能通知R2更新他的路由表。但在这30s的时间内,R2先把自己的路由表发送给了R1,于是R1发现可以通过R2到达网络1,因此更新距离为2+1=3。下次R1在更新路由表时,就把到网络1的距离改为了4。。。知道R1和R2路由表中到达网络1的距离都为16后,才能意识到网络1不可达
三. OSPF协议
-
内部网关协议OSPF:开放最短路径优先
(1)OSPF不受哪一家厂商控制,而是开放出来得 -
OSPF采用链路状态协议:
(1)每一个路由器向所有其相邻的路由器发送信息,相邻路由器拿到该信息记录后,再把该信息转发到其他所有它相邻的路由器。使得本自系统内部的所有路由器都能接收到其他所有路由器发送的信息。---范宏法
(2)路由器所发送的信息是本路由相邻所有路由的链路状态。链路状态就是说该路由和哪些路由相邻,以及该路由的"度量"(带宽,时延,费用,距离)
(3)只有当链路状态发生变化,OSPF路由器和本自治网下的所有路由泛洪发送信息
(所以如果有主机宕机,路由器会立刻通知其他路由器)。
(3)OSPF的每个路由器都含有全网的网络拓扑。该过程也称链路状态数据库同步。而后,路由器每当需要转发数据报,就用迪杰斯特拉算法计算出网络拓扑中的最短路径 -
OSPF的特点
(1)OSPF的更新收敛很快,每个路由器可以即时更新其路由表。
(2)OSPF不使用UDP而使用IP包的数据部分封装协议,而RIP协议使用UDP传输。这样,OSPF构成的数据报很短,用可以减少路由信息的通信量
(3)OSPF每隔30min重新刷新一次数据库。因为OSPF路由器每次链路状态变换都会发送自己的更新信息。 -
OSPF5类数据:
(1)问候(Hello)分组:发现维持临站可达性
(2)数据库描述(Database Descrption)分组:向相邻路由器发送自己链路状态数据库中所有项的摘要
(3)链路状态请求(Link State Request)分组:请求对方向自己发送某些链路状态的项目的详细信息
(4)链路状态更新(Link State Update)分组:用泛洪法更新全网链路状态。
(5)链路状态确认(Link State Acknowledgement)分组:对链路更新分组进行确认
【注】:
1)两个相邻的路由器每隔10s交换一次分组,确认对方可达。若超过40s没收到对方发来的问候分组,则认为不可打,就要修改链路状态数据库,重新计算路由表
2)OSPF采用可靠的洪泛法,每隔节点在收到更新分组后要发送确认分组。每隔30分钟,路由器要刷新一次数据库中的链路状态
- OSPF划分区域
(1)OSPF能将一个自治系统划分为若干个小范围,称为“区域”。每个区域内的路由器个数不能太多,不能超过200个
(2)每一个区域都有一个32位的区域标识符(点分十进制表示)
(3)划分区域的好处是将利用洪范法交换链路状态信息的范围局限于每一个区域,而不是一整个大的自治系统。这样就减少了整个网络上的通信量。
(4)OSPF划分区域后,使得路由分成层次结构。主干区域的标识符规定为0.0.0.0.主干区域的作用是用来连通其他下层的路由器
四. BGP协议
- 每一个自治系统的管理员都要选择至少一个路由器作为自治系统的“BGP发言人”
- BGP使用TCP交换路由信息:因为BGP是跨自治系统的路由信息交换
4.6 IP组播
一. 组播的概念
- 组播的特点
(1)组播的地址都是D类地址。且组播地址只能用于目的地址
(2)组播地址的高24bit为00-00-5E。
(3)以太网的组播地址块范围是00-00-5E-00-00-00到00-00-5E-FF-FF-FF