计算机网络笔记——第四章
第四章 网络层
虚电路服务和数据报服务:
- 虚电路(电话机采用这种服务): 可靠通信由网络来保证,通信前必须建立连接。
- 数据报服务: 不提供可靠通信,不需要建立连接。
因特网的网络层采用数据报服务,网络层向上只提供简单灵活的,无连接的,尽最大努力交付的数据报服务。网络层不提供服务质量的承诺。
IP地址
IP地址分为两个部分,网络号 和 主机号 。网络号标志主机所连接到的网络,一个网络号在整个因特网范围内必须是唯一的。主机号标志主机,一个主机号在它前面的内网络号所指明的网络范围内必须是唯一的。
由此可见,一个IP地址在整个因特网范围内是唯一的。
IP地址分为三类。
IP地址 网络号 主机号 子网数 主机数 第一个网络号 最后一个网络号
A类 8位(0开头) 24位 126(2^7-2) 2^24-2 1 126
B类 16位(10开头) 16位 2^14-1 2^16-2 128.1 191.255
C类 24位(110开头) 8位 2^21-1 2^8-2 192.0.1 223.255.255
B类和C类之所以减1是因为10和110开头使得不会出现网络号全部为0的情况,而128.0.0.0和192.0.0.0都是不指派的,所以减1。而主机号里面,主机号全部为0都是表示该网络,而全部为1作为本地软件环回测试。
IP地址和硬件地址
硬件地址是数据链路层和物理层使用的地址,而IP地址是网路层和以上各层使用的地址,是一种逻辑地址。
使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAX帧在传送时使用的源地址和目的地址都是硬件地址,写在MAX帧的首部。
地址解析协议ARP(address resolution protocol)
ARP是用来解决知道机器的IP地址,找出相应的硬件地址的问题。
原理:每个主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表,并且经常动态更新这个映射表。
过程:主机A有了主机B的IP地址,但是发现没有主机B的硬件地址,于是在本网络中 广播 发送一个ARP请求分组,这个请求分组的内容主要是主机A自己的IP地址和硬件地址,并想知道IP为XXX主机B的硬件地址。其他所有主机都会收到这个ARP分组,主机B会发回A自己的硬件地址,而其他主机都会不理睬这个ARP请求分组。主机A至此就可以获得主机B的硬件地址。
同时,ARP缓存中的每一个映射地址项目都设置了 生存时间 ,凡超过生存时间的项目就从高速缓存中删除掉。
划分子网和构造超网
三级IP地址
为了可以划分子网,IP地址从二级变成三级IP地址,在原有的主机号划分为子网号和主机号两部分,但是该网络对外依然表现为一个网络。
子网掩码
如果只用网络号和主机好二级IP地址,有时候不需要那么多的IP,容易造成IP地址的严重浪费。于是用子网掩码来再细分IP地址。
将子网掩码和IP地址进行逐位的 与 运算,就可以得出其网络地址。
如果网络没有划分子网,子网掩码就使用默认子网掩码。
- A类地址的默认子网掩码是255.0.0.0
- B类地址的默认子网掩码是255.255.0.0
- C类地址的默认子网掩码是255.255.255.0
子网数 = 2^n-2,n是子网号的位数。
使用子网掩码后路由表必须包含三项内容:目的网络地址,子网掩码,下一跳地址。在路由转发中需要用路由表中的每一行的子网掩码和目的IP地址相与操作,如果与目的网络地址符合则进行转发。
无分类编址CIDR(Classless Inter-Domain Routing 构成超网)
CIDR消除了传统的A类,B类和C类地址以及划分子网的概念,从三级IP地址又变回了 无分类两级地址。IP地址分为网络前缀和主机号两部分,使用斜线记法,例如128.14.35.7/20,20表示前20位是网络号,后12位是主机号。
另外CIDR可以很方便地推出最小地址和最大地址,例如128.14.35.7/20的最小地址是128.14.32.0(后12位都是0)和128.14.47.255(后12位都是1),但是一般最小地址和最大地址都不使用。
由于一个CIDR地址块中有很多地址,所以在路由表中就利用CIDR地址块来查找目的网络,这种地址的聚合常称为 路由聚合(构成超网) 。
最长前缀匹配
采用CIDR后路由表中的项目改成只有 网络前缀 和 下一跳地址 。匹配方法也变成了直接匹配网络前缀。但是在查找路由表时可能会得到不止一个匹配结果。因此应当从匹配结果中选择具有最长网络前缀的路由(最长前缀匹配)。
为了加快最长前缀匹配的查找,有很多算法。最常用的就是 二叉线索 ,一棵不平衡的二叉树(左0右1)。首先为每个路由表中下一跳地址计算出 唯一前缀 ,用所有的唯一前缀构成这棵二叉线索树,然后只需要在这棵二叉线索树查找出唯一前缀即可。
另外还有一些压缩技术进一步加速二叉线索的查找速度,例如有几个IP地址的唯一前缀都是1011开头,那只要目的IP地址是1011开头,则可以直接从第五层开始(跳过前4层。)。
网际控制报文协议ICMP
为了更有效地转发IP数据报和提高交付成功的机会,在网络层使用ICMP(Internet Control Message Protocol)。允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文是装在IP数据报中,作为数据部分存在。
最典型的ICMP应用就是PING,用来测试两个主机之间的连通性。PING是应用层直接使用网络层ICMP的一个例子,它没有通过运输层的TCP或UDP。
路由选择协议
路由选择协议就是解决路由表中的路由是怎么得出的问题。
自治系统(AS),一个网络对其他AS表现出的是一个单一的和一致的路由选择策略。
路由选择协议划分为两大类:
-
内部网关协议IGP(Interior Gateway Protocol):即在一个自治系统内部使用的路由选择协议,如RIP和OSPF。
-
外部网关协议EGP(External Gateway Protocol):自治系统之间使用的路由选择协议,如BGP-4
RIP(Routing Information Protocol)
RIP是一种分布式的基于距离向量的路由选择协议,网络中的每一个路由器都要维护自己到其他每一个目的网络的距离记录。从一个路由器到直接连接的网络距离定义为1,每隔一个路由器距离就加1,RIP允许一条路径最多只能包含15个路由器,因此16以上的都被认为不可达。
RIP协议规定,路由器一开始只知道到直接连接的网络距离,每一个路由仅仅和相邻路由交换信息,每次交换的信息是当前本路由所知道的全部信息,即自己的路由表。这样继续下去,每个路由都最终拥有整个自治系统的全局路由信息。
OSPF(开放最短路径优先 Open Shortest Path First)
OSPF使用分布式的链路状态协议。每个路由向本自治系统中所有相邻路由发送信息,收到信息的路由再向其他路由发送信息(除了刚刚发来消息的路由),信息内容就是与本路由相邻的所有路由器的链路状态,称为"度量",用来表示费用,距离,时延,带宽等等,有时候会叫"代价"。另外只有当链路状态发生变化时,路由器才向所有路由发送信息。
OSPF由于各路由器之间频繁地交换链路状态信息,因此所有路由最终都能建立一个 链路状态数据库(即全网的拓扑结构图) ,而RIP每个路由只知道到所有网络的距离以及下一跳路由,却不知道全网拓扑结构。
BGP(边界网关协议,方便起见,BGP-4简称BGP)
BGP只能力求寻找一条能够到达目的网络且比较好的路由,并非寻找一条最佳路由。
BGP要求每一个自治系统的管理员至少配置一个路由器作为该自治系统的BGP发言人,以此简化边界路由选择。
IP多播
也叫组播,即一对多同时通信。例如视频服务,视频服务器只需要发送一次数据,其他路由在转发过程中,复制自己需要转发的分组,最终把数据传到各客户端中。
NAT(Network Address Translation)
使用NAT技术,在专用网络内部使用专用IP地址,可以节约宝贵的IP地址。
装有NAT软件的路由器叫做NAT路由,它至少有一个有效的外部全球IP地址,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和互联网连接。
NAT路由器会维护一个NAT地址转换表,用来做本地地址和外界全球IP地址的转换工作,因此一个NAT路由具有多少个全球IP地址时,就只能 同时 使多少个主机接入因特网。