4.1 网络层概述
4.2 网络层的两个层面(两种服务)
面向连接的虚电路服务
无连接的数据报服务
两种服务的比较
4.3 IPv4地址
4.3.1 概述
- 对于主机和路由来说,IP地址都是32位的二进制代码,为了方便表示,我们在每8位之间插入一个空格,为了方便记忆,每8位用其等效的十进制数字表示,并且在每一段数字之间加一个小数点。
- 对于每个IP地址,采用两级结构,由两个字段组成:网络号和主机号。
4.3.2分类编址的IPV4地址
主要分为A类、B类、C类、D类、E类地址
- A类:
- 网络号为0~127
- B类:
- 网络号为128~191
- C类:
- 网络号为192~223
但并不是所有IP地址都是可以指派的
例如:网络号为0或者127的时候,是不可以进行指派的,0代表本网络上的主机,127用于本地软件环回测试(比如自己做项目在本地测试的时候,打开的都是127.0.0.1)
以及主机号为全1或者全0都不可以指派,前者是广播地址,后者为网络地址
详情:
所以在分配网络的时候,我们需要避开全0和全1的主机号
所以:
网络类别 | 最大可指派的网络数 | 第一个可指派的网络号 | 最后一个可指派的网络号 | 每一个网络中的最大主机数 | 占IP地址总数比例 |
---|---|---|---|---|---|
A | 2^7-2 (126) | 1 | 126 | 2^24-2 (16,777,214) | 1/2 |
B | 2^14 (16,384) | 128.0 | 191.255 | 2^16-2 (65,534) | 1/4 |
C | 2^21 (2,097,152) | 192.0.0 | 223.255.255 | 2^8-2 (254) | 1/8 |
例题:
4.3.3划分子网的IPv4地址
问题的产生:
当一个单位申请了一类网络地址,但是仍然有大量网络地址剩余,后期,该单位需要划分3个子网,如果重新申请的话,即要浪费时间,又浪费之前剩余的大量网络地址。这时候需要从之前申请的网络地址中,借用主机号的几位作为子网位来区分子网,这样就可以利用剩余的网络地址了
划分子网的工具:子网掩码
举例:
已知某个网络的地址为218.75.230.0,使用子网掩码255.255.255.128对其进行子网划分,请给出划分细节
首先先将网络地址和子网掩码列出,可以看到是个C类网络地址,那么他的前3个字节(24位)为网络号,最后一个字节(8位)为主机号。
将子网掩码的主机号部分以二进制形式列出
这里看到只有一个比特1,因此划分出的子网数量为$2^1$个,因为子网号借走一位,且要排除全1和全0,所以每个子网可分配的地址数量为$2^{(8-1)}-2$个,即:接着也可以看到子网的各可分配的最大和最小网络地址
例题:
默认子网掩码
默认的子网掩码是指在未划分子网的情况下使用的子网掩码
4.3.4 无分类编址的IPv4地址
概述
无分类编址取消了主机号和网络号的固定划分,取而代之的是网络前缀和主机编号,采用斜线记法来表示
- CIDR采用斜线记法(CIDR记法)
例:
路由聚合(构造超网)
所谓路由聚合,也就是无分类编址的逆过程,我们知道无分类编址的表示方式是斜杠表示法,斜杠表示网络前缀的占位,那么我们反过来要将几个IPV4地址构造成无分类编址的表示方法,那就找他们的共同前缀。
4.3.5 IPV4地址的应用规划
定长的子网掩码FLSM
因为需要5个子网,一个比特可以提供两个子网,所以至少需要借用3个比特,可以提供$2^3$个子网个数
以此类推,得到全部细节:
可以看到不同网络实际上需求的IP地址数量是不同的,有多有少,但是我们只能分配给所有网络最多的主机号,比如N5只需要4个IP地址,但是实际上只能给他分配32个,这也就是定长的子网掩码的弊端,还有一个弊端是,当需要的子网大于主机号可以提供的子网的时候,就需要边长的子网掩码VLSM了
变长的子网掩码VLSM
如图根据每个网络所需的IP地址不同,我们可以分别算出他的主机号位数和网络前缀数。
则得到的应用需求为:
在该地址块中给左图所示的网络N1~N5分配子块,分配原则是每个子块的起点位置不能随意选取,只能选取块大小整数倍的
地址作为起点。建议先给大的子块分配
4.4 IP数据报的发送和转发过程
IP数据报的发送和转发过程包含两个部分:
- 主机发送IP数据报
- 路由器转发IP数据报
举例:
在同一个网络中主机的通信叫作直接交付,不同网络之间主机的交付通信叫做间接交付,需要路由器中转。
发送信息的源主机怎么判断目的主机和自己是否在同一个网络中呢?
源主机会将目的主机的IP地址与自己的子网掩码相与(找到一个子网中第一个全0的地址),可以得到一个地址,如果该地址与源主机的网络地址不同,就可说明目的地址和自己不是一个网络。如下图所示,C主机想要给给F这个地址传递IP数据报,进行如下图的判断
那这个时候就需要路由器进行中转,那主机C怎么找到中转的路由器R? 在每个网络中,我们都有一个默认网关,用来转发IP数据报,主机C只要将IP数据报转发给默认网关的地址就好了,如下图所示
路由器收到IP数据报之后,检查P数据报首部是否出错,若出错,则直接丢弃该P数据报并通告源主机若没有出错,则进行转发,根据P数据报的目的地址在路由表中查找匹配的条目:
若找到匹配的条目,则转发给条目中指示的下一跳,若找不到,则丢弃该P数据报并通告源主机
注:路由器是不会转发广播IP数据报的的。否则会造成广播风暴
例题
4.5 静态路由配置及其可能产生的路由环路问题
举例:静态路由配置
如图,路由器R1和R2自动生成的路由表记录了当前可以通过接口直连的目的网络,这属于直接交付。类型为直连。当我们需要间接交付的时候,当目标网络192.168.1.0/24想要访问192.168.2.0/24的时候,就需要从接口1到达10.0.0.0/30然后到达路由器R2的接口0,然后再从R2到达192.168.2.0/24。这时候就需要我们人为在路由表里配置一条静态类型的规则,如图所示。反过来,当192.168.2.0/24想要访问192.168.1.0/24的时候,也是一样的道理,给R的路由表配置一条规则就可以
举例:默认路由举例
如下图,当192.168.1.0/24想要访问因特网上的机器时,也需要通过路由器R2,因为只有R2连着因特网,但是因特网上的主机太多了,不可能全部记录到R1的路由表上,这时候,默认路由就起作用了,如图配置一个默认路由0.0.0.0/0。
什么是默认路由?
在特定网络中,有一个特殊的路由项被称为默认路由。默认路由是指当路由表中找不到明确匹配目标地址的条目时,将数据包发送到的默认下一跳。默认路由通常使用0.0.0.0/0(IPv4)或 ::/0(IPv6)表示,表示匹配所有可能的目标地址。
本例中,将数据报发送到默认的下一跳,就会到达R2的接口0,这时候,会匹配所有可能的目标地址,也就是与R2直连的除接口0以外的所有主机。
举例:特定主机路由
上边说到了,默认主机路由是默认全部转发,路由很模糊,当想要转发特定路由,那就使用一个最长的网络前缀,如图所示。
举例 静态路由配置导致的路由环路问题。
如下图,紫色网络想要转发IP数据报给橙色网络,但是R2路由表中有一个配置错误,下一跳错误的配置成了绿色网络的地址也就是R3路由器的接口1,这样又回到了R3路由器,R3路由器又会重新回到R2路由器,就这样导致了无限循环。
为了防止P数据报在路由环路中永久兜圈,在IP数据报首部设有生存时间TTL字段。IP数据报进入路由器后,TL字段的值减1。若
TTL的值不等于0,则被路由器转发,否则被丢弃,
举例 静态路由配置及其可能产生的路由环路问题
- 聚合了不存在的网络而导致路由环路
如下图,聚合路由中聚合了不存在的目标地址,当要转发192.168.3.0/24这个不存在的网路地址时,由于聚合路由将他聚合到了一起,那么R2路由表就会对他进行转发,这样又造成了环路问题。
解决方法就是将不存在的路由标记为NULL。
- 网络故障导致的路由环路
R1给橙色网络转发数据时,网络发生故障,然后R1路由表就会将这条记录删去,这样也会造成路由环路,如图所示
光删去可不行,得把这个删去的记录成NULL。否则会来回反复横跳。
同理,当网络恢复的时候,也别忘了将黑洞记录给删去。
4.6 路由选择协议
4.6.1 路由选择协议概述
域内路由选择采用内部网关(路由)协议IGP,域间路由选择采用外部网关(路由)协议EGP
常见的路由选择协议
路由器的基本结构
4.6.2 路由信息协议RIP的基本工作原理(DV算法)
特点:好消息传的快,坏消息穿的慢
RP认为好的路由就是“距离短”的路由,也就是所通过路由器数量最少的路由。
当到达同一目的网络有多条“距离相等”的路由时,可以进行等价负载均衡(也就是将通信量均衡的分布到多条等价路由上)。
RIP包含以下三个要点:
- 和谁交换信息:仅和相邻路由器交换信息
- 交换什么信息:自己的路由表
- 何时交换信息:周期性交换(例如每30秒)
例题
RIP存在“坏消息传播得慢”的问题
如上图,R1与N1之间出现故障,所以R1的路由表里记录为距离16表示不可达,但是R2的记录表里还没更新记录为2,R1和R2接触之后,R1会认为R2与N1距离为2,但是他不知道,实际上这个2是通过自己的,是之前没更新的记录,所以R1就认为通过R2可以到达N1,所以记录为3,这个时候,先前到达R2的记录16不可达也到了,但是这时候R1已经更新成3了,所以R1又给R2传达,所以R2又更新成4。依次类推,直到两个人都达到16,才知道N1不可达,这个过程叫路由环路。长达数分钟。
优化措施
但是无论怎么样优化都无法避免,只能减少
例题
4.6.3开放最短路径优先OSPF的基本工作原理
什么是代价
所谓代价,就类似图里面,边的权重,而上文中的DV算法是无权图,哲理诗有权图,要考虑权每条路的权重
邻居关系
链路状态数据库LSDB
基于LSDB进行最短路径优先SPF计算
OSPF的分组类型
基本工作过程
OSPF在多点接入网络中路由器邻居关系的建立
区域
为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若干个更小的范围,叫做区域(Area)
4.6.4 边界网关协议BGP的基本工作原理
在不同自治系统内,度量路由的“代价”(距离,带宽,费用等)可能不同。因此,对于自治系统之间的路由选择,使用“代价”作为度量来寻找最佳路由是不行的。
自治系统之间的路由选择必须考虑相关策略(政治,经济,安全等)
例如:
- 在配置BGP时,每个自治系统的管理员要选择至少一个路由器作为该自治系统的“BGP发言人”
- 不同自治系统的BGP发言人要交换路由信息,首先必须建立TCP连接,端口号为179
- 在此TCP连接上交换BGP报文以建立BGP会话
- 利用BGP会话交换路由信息(例如,增加新的路由,或撤销过时的路由,以及报告出错的情况等)
- 使用TCP连接交换路由信息的两个BGP发言人,彼此称为对方的邻站(neighbor)或对等站(peer)
- BGP发言人除了运行BGP外,还必须运行自己所在自治系统所使用的内部网关协议IGP,例如OSPF或RIP。
- BGP发言人交换网络可达性的信息(要到达某个网络所要经过的一系列自治系统)
- 当BGP发言人互相交换了网络可达性的信息后,各BGP发言人就根据所采用的策略从收到的路由信息中找出到达各自治系统的较好的路由。也就是构造出树形结构、不存在回路的自治系统连通图。
例:
BGP-4的四种报文
- OPEN(打开)报文:用来与相邻的另一个BGP发言人建立关系,使通信初始化。
- UPDATE(更新)报文:用来通告某一路由的信息,以及列出要撤销的多条路由。
- KEEPALIVE(保活)报文:用来周期性地证实邻站的连通性。
- NOTIFICATION(通知)报文:用来发送检测到的差错。
例题
4.7 IPv4数据报的首部格式
版本:占4比特,表示IP协议的版本。通信双方使用的1P协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPV4)。
首部长度
- 占4比特,表示P数据报首部的长度。该字段的取值以4字节为单位
- 最小十进制取值为5,表示IP数据报首部只有20字节固定部分
- 最大十进制取值为15,表示引IP数据报首部包含20字节固定部分和最大40字节可变部分。
可选字段:
- 长度从1个字节到40个字节不等。用来支持排错、测量及安全等措施。
- 可选字段增加了IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理IP数据报的开销。实际上-可选字段很少被使用。
填充字段:防止首部长度和可选字段加起来之后不是4的倍数,确保首部长度为4字节的整数倍。使用全0进行填充。
区分服务:占8比特,用来获得更好的服务。该字段在旧标准中叫作服务类型,但实际上一直没有被使用过。
1998年,因特网工程任务组IETF把这个字段改名为区分服务。总长度:占16比特,表示IP数据报的总长度(首部+数据载荷)最大取值为十进制的65535,以字节为单位。
- 举例:
- 举例:
标识、标志、片偏移:这三个字段共同用于IP数据报分片
- 标识:占16比特,属于同一个数据报的各分片数据报应该具有相同的标识。 IP软件维持一个计数器,每产生一个数据报,计数器值加1,并将此值赋给标识字段。
- 标志:占3比特,各比特含义如下:
- DF位:1表示不允许分片:0表示允许分片
- MF位:1表示“后面还有片”;0表示“这是最后一个分片”
- 保留位:必须为0
- 片偏移:占13比特,指出分片数据报的数据载荷部分偏移其在原数据报的位置有多少个单位。片偏移以8个字节为单位。
举例:如何分片?
生存时间:占8比特,最初以秒为单位,最大生存周期为255秒;路由器转发IP数据报时,将IP数据报首部中的该字段的值减去IP数据报在本路由器上所耗费的时间,若不为0就转发,否则就丢弃。现在以“跳数”为单位,路由器转发IP数据报时,将IP数据报首部中的该字段的值减1,若不为0就转发,否则就丢弃。
- 例:
- 例:
协议:
首部检验和:占16比特,用来检测首部在传输过程中是否出现差错。比CRC检验码简单,称为因特网检验和。、
- IP数据报每经过一个路由器,路由器都要重新计算首部检验和,因为某些字段(生存时间、标志、片偏移等)的取值可能发生变化。
- 由于IP层本身并不提供可靠传输的服务,并且计算首部校验和是一项耗时的操作。因此在IPV6中,路由器不再计算首部校验和,从而更快转发IP数据报。
源IP地址和目的IP地址:各占32比特,用来填写发送该IP数据报的源主机的IP地址和接收该IP数据报的目的主机的IP地址。
练习:
4.8网际控制报文协议ICMP
- 为了更有效地转发P数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol).
- 主机回或路由器使用ICMP来发送差错报告报文和询问报文
- ICMP报文被封装在IP数据报中发送。
差错报告报文分类
终点不可达
源点抑制
时间超过
另外,当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,也会向源点发
送时间超过报文。参数问题
改变路由(重定向)
不应发送ICMP差错报告报文的情况
常用的lCMP询问报文
ICMP 应用举例
4.9虚拟专用网VPN与网络地址转换NAT
虚拟专用网VPN(Virtual Private Network)
如何让两个局域网之间进行通信呢?
除了租用电信公司的线路,还有一种方法就是利用公用的因特网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网。这就是VPN
怎么分配IP呢?
网络地址转换NAT(Network Address Translation)
虽然因特网采用了无分类编址方式来减缓PV4地址空间耗尽的速度,但由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPV4地址空间即将面临耗尽的危险仍然没有被解除。1994年提出了一种网络地址转换NAT的方法再次缓解了IPV4地址空间即将耗尽的问题。NAT能使大量使用内部专用地址的专用网络用户共享少量外部全球地址来访问因特网上的主机
和资源。
对于一些P2P网络应用,需要外网主机主动与内网主机进行通信,在通过NAT时会遇到问题,需要网络应用自己使用一些特殊的NAT穿越技术来解决问题。另外,由于NAT对外网屏蔽了内网主机的网络地址,能为内网的主机提供一定的安全保护。