网络层只提供无连接的尽最大努力交付的数据报(分组)服务。
ip地址的特点:
IP地址是一种分等级的地址结构(网络号.主机号)。
路由器仅根据网络号来进行转发,以减少路由表空间。
一个路由器至少有两个IP地址。
一个网络是指具有相同网络号的主机集合。
IP地址是网络层及以上使用的逻辑地址,硬件地址是数据链路层及以下使用的。
IP层屏蔽了下层的复杂细节:在网络层只能看到IP地址,且IP数据报首部的原地址和目的地址始终是原始的,不受路由器转发而改变,路由器转发时一直只根据目的IP地址进行操作,无论几次转发。而链路层只能看见MAC帧,在转发时,原硬件地址和目的硬件地址会实时改变。
路由器主要完成两个功能:路由选择和分组转发。前者时根据理由选择协议构造路由表。
地址解析协议ARP:
解决同一局域网上主机或路由器的地址映射。实际上,主机也不需要知道其他网络上的mac地址
主机中有ARP高速缓冲,存放着本局域网内从IP地址到硬件地址的映射表。
表内的映射项目都有生存时间。
ARP操作步骤:
1.查找本机ARP高速缓存,如果查找到硬件地址则直接使用,
2.若没有,ARP进程会广播发送请求分组,说明本机IP地址,本机硬件地址和要查找的硬件 地址对应的ip地址。
3.局域网内所有主机都会收到请求分组,若本机IP地址与此对应,则单播发送本机硬件地址,不对应的主机将不理会这个请求分组。
4.将收到的硬件地址写入本机ARP高速缓存。双方都会记录对方硬件地址。
ARP四种典型情况:
1.主机到同一局域网内主机:通过发送请求分组找到对方硬件地址。
2.主机到另一局域网内主机:发送请求分组,收到路由器硬件地址,发送给路由器。
3.路由器到同一局域网主机:发送请求分组找到对方硬件地址。
4.路由器到另一局域网主机:发送请求分组,收到另一路由器硬件地址,发送给路由器。
IP数据报格式:
首部(固定20字节+可选)+数据
首部固定部分各自段:
IP层转发分组的流程:
在互联网上转发分组是路由器之间的转发。
路由表的核心信息是目的网络地址和下一跳地址。
特定主机路由:区别于一般情况下针对网络选路由,可以针对特定主机选路由。
默认路由:只要目的地址在其他网络,就转发到这个特定路由。
分组转发算法:
1.通过目的IP地址提取出网络号。
2.如果该网络与此路由直接相连,那就直接交付(不转发,仅通过ARP获取硬件地址)。
3.若路由表有对应的特定主机路由,则直接送给此下一跳路由器。
4.若路由表中有对应网络号的下一跳路由器,则转发给此路由。
5.若路由表有默认路由,则转发给此路由。
6.报告转发出错。
划分子网
将二级ip地址的主机号分开变成三级IP地址<网络号><子网号><主机号>,内部划分多个子网,对于外部仍表现为一个网络。
子网掩码
将子网掩码和IP地址按位相与,得到的就是网络号+子网号。
默认子网掩码:由于互联网标准规定必须有子网掩码,所以在不划分子网的情况下使用默认子网掩码,通过默认子网掩码可以得到网络号。
A类地址默认子网掩码:255.0.0.0
A类地址默认子网掩码:255.255.0.0
A类地址默认子网掩码:255.255.255.0
使用子网后分组转发时要通过路由表每项对应的子网掩码得出网络号来进行比对。
CIDR
ICMP
网络层协议,但ICMP报文作为IP数据报数据部分发送,故格式为IP首部+ICMP报文。
ICMP报文格式:类型(1字节)+代码(1字节)+效验和(2字节)+ICMP首部剩余字节(4字节)+ICMP数据(可变)。
格式说明:前四字节(类型+代码+校验和)是固定不变的格式,后四字节(首部剩余字节)根据类型的不同而变化。这8字节长度固定。
包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。
类型分两大类:1.差错报告报文 2.询问报文。
常用差错报告报文:
1.终点不可达(类型3):终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。
2.时间超过(11):当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。
3.参数问题(12):当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。
4.改变路由(重定向)(5):路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
所有的ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上响应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。
常用询问报文:
1.回送请求(类型8 代码0)和回答(类型0 代码0)报文
向特定主机发送回送请求报文,收到的主机必须发送回送回答报文。ping使用此报文。
2.时间戳请求(类型13)和回答(类型14)报文
路由选择(路由表的生成)
自治系统(autonomous system):在单一技术管理下的一组路由器,一个AS对于其他AS表现出一个单一且一致的路由选择策略。
路由选择协议分类:
1.内部网关协议IGP(interior Gatway protocol)AS内部的路由选择协议。主要是RIP和OSPF,他们都是分布式路由选择协议,需要不断与其他路由交换信息。
2.外部网关协议EGP(external Gateway protocol)不同AS间互相使用的。主要是BGP-4
RIP(Routing Information Protocol)协议:
基于距离向量的路由选择协议。距离向量(跳数)的计算方法为与路由器直接相连的网络距离为1,否则每经过一个路由器距离加一。RIP仅考虑距离向量,所以只选择距离最短的而并不是延时最低的。RIP允许的最长距离为15,16记为不可到达。
RIP特点:
1.仅和直接相连的路由器(不需要经过其他路由器)交换信息。
2.交换的信息为自己现在的路由表。
3.按固定的时间间隔交换信息(如30s)。
刚工作时路由表是空的,然后路由器将直接与自己相连的(距离为1)的路由器添加进表,然后不断的与这些路由器交换信息,最终每一个路由器都有本AS里所有路由器的信息。
距离向量算法:
1.对于地址为X相邻路由器发来的RIP报文(路由表),将所有项目的下一跳地址改为X,然后将距离加1.
2.如果本路由表中没有此目的地址的条目,则添加进来。
3.如果有,若本路由表中下一跳路由与该项目的下一跳路由相同,则直接替换(线路不变,更新信息)。
4.若两个下一跳路由不同,则比较两个项目的距离,取距离小的路由(两条道路取距离最近的)。
5.若3分钟还没有收到某一相邻路由的更新路由表,则将此路由记为不可到达路由器(距离设为16)。
RIP报文(UDP端口520传送):
首部4字节:命令(1->请求路由信息 2->相应请求或无请求直接发送)+版本+全0补齐4字节。
路由部分(每组20字节,最多25组,故路由部分最长500字节,总报文最长504字节):地址族标识符(2->IP地址)+路由表计(自治系统号ASN,防止收到其他自治系统的信息)+网络地址+子网掩码+下一跳路由器地址+距离。
RIP2鉴别功能:第一组路由信息改为鉴别功能:地址族标识符全置1,路由表记写入鉴别类型,剩下的16位为鉴别数据,故最多还剩24个路由信息。
RIP缺点:
1.网络规模受限制:最大15跳。
2.信息交换开销大:整个路由表。
3.坏消息传得慢。
OSPF(Open Shortest path First)
基于链路状态协议
特征(与RIP对比):
1.使用洪泛法,通过所有端口发送信息,收到信息的路由器再将此信息的副本通关自己所有的端口发送,最后所有的路由器都会得到信息副本。(RIP仅与直接相连的路由器发送信息)
2.发送的信息是链路状态(与本路由器相连的所有路由器的状态,本路由器知道的部分信息),包括费用、距离、带宽等多方位度量。(RIP仅考量距离)
3.只有当发生变化时才使用洪泛法发送信息。(RIP定时发送信息)
链路状态数据库:在全网范围内是一致的,每一个路由器都知道全网的拓扑图,并构造出自己的路由表。
区域划分:
将一个AS划分为多个区域(area),方便管理,每个区域有一个32为标识符,一个区域推荐不超过200个路由器。
使用洪泛法时范围仅局限于一个区域内,区域与区域之间使用层次结构划分,有主干区域(backbone area标识符0.0.0.0)用来联通所有下层区域,每个下层区域有一个区域边界路由器(area border router),主干区域内的路由器是主干路由器(backbone router),主干区域内有一个用来和其他AS交换信息的路由器叫自治系统边界路由器。
OSPF不用UDP而直接用IP数据报传输(IP数据报首部协议字段值89)。
OSPF报文:
OSPF首部(24字节)+5种类型OSPF分组
首部:版本(1字节)当前版本号2+类型(1字节)五种类型+分组长度(2字节)包括首部的整个OSPF报文长度 以字节为单位+路由器标识符 发送该分组的路由器接口IP地址+区域标识符+检验和+鉴别类型(0->不用 1->口令)+鉴别(鉴别类型为0时全0,为1时填入8个字符口令)。
OSPF五种分组类型:
1->问候(hello)分组,用来发现和维持临站的可达性。
2->数据库描述(database description)分组,向临站给出自己的链路状态。
3->链路状态请求(link state request)分组,向对方请求某些链路状态信息。
4->链路状态更新(link state update)分组,使用洪泛法对全网进行更新。
5->链路状态确认(link state acknowledge)分组,对更新分组的确认。
路由器每十秒交换一次问候分组,若40s没有收到问候分组,则认为该路由器不可达。
不同的路由器链路状态数据库信息相同是同步的,两个同步的路由器叫做完全邻接的(fully adjacent),不完全邻接的路由器表明只在物理上相邻。
RIP是应用层协议,使用UDP传输,而OSPF是网络层协议,使用IP报文传输。BGP是应用层协议,使用TCP传输。
BGP
基于路径向量选择协议,在AS之间交换可达性信息,也就是到达是某个网络要经过的一系列AS。
每一个AS都要有至少一个BGP发言人(BGP speaker),BGP发言人之间建立TCP连接(端口号179),互发BGP报文以建立BGP会话,彼此成为对方的邻站(neighbor)或对等站(peer)。
4种BGP报文:
1.OPEN报文,用来与其他BGP speaker建立关系,初始化会话。
2.UPDATE报文,报告路由信息,列出要撤销的多条路由。
3.KEEPALIVE报文,周期性验证邻站连通性。
4.NOTIFICATION报文,发送差错。
操作过程:
一开始发送OPEN报文以确定是否接收关系建立(可能对方负载过大不愿意增加关系),如果同意则发送KEEPALIVE报文相应。
建立关系后双方要定期交换KEEPALIVE报文(一般30s)。
使用UPDATE报文增加新路由(一次一个)或撤销路由(一次可以多个)。
BGP交换的路由信息是到达某个目的网络所经过的AS序列。
BGP报文格式:
通用首部(19字节):标记(16字节)鉴别时使用, 不使用鉴别时全1.+长度(2字节)包括首部在内的整个报文长度,以字节为单位,最小19(只有首部)最长4096+类型(1字节)1-4分别对应4种报文。
报文主体:
OPEN报文:版本(1字节)现在是4+本ASN(2字节,全球唯一16位ASN)+保持时间(2字节)单位s+BGP标识符(4字节)通常是本路由器IP地址+可选参数长度(1字节)+可选参数。
UPDATE报文:
KEEPALIVE报文仅有首部
NOTIFICATION报文:差错代码(1)+差错子代码(1)+差错数据。
先查表,有就直接用,没有就广播,对应的单播回复,不对应的不理睬,双发记录下对方的映射信息
分组转发算法:提取网络号,直接相连直接交付,特定主机路由特定直接转发,对应项目对应转发,如果没有,默认路由,没有默认,转发出错。