计网第四章 网络层(更新ing 咕咕咕)

网络层提供的两种服务

面向连接的通讯:虚电路

虚电路知识一种逻辑上的连接,分组沿着这个逻辑转发而不是真的建立了一条物理线路。

面向无连接的通讯:数据报服务

网络发送分组之前不用建立连接,分组独立发送,传送的分组可能会出错、丢失、重复和失序。
计网第四章 网络层(咕咕咕)-编程知识网

与IP协议配套的协议

地址解析协议ARP
网际控制报文协议ICMP
网际组管理协议IGMP
网络互连使用路由器,路由器是网络层的中继设备
虚拟互连网络的意义

互联网的主机进行通信时,好像在一个网络上通信,而看不见具体的网络异构细节。

IP地址的编制方法

分类的IP地址

IP地址::={<网络号>,<主机号>}
A类地址的网络号为1个字节,8个比特,比特第一位必须是0
B类地址的网络号为2个字节,16个比特,比特前两位必须是10
C类地址的网络号为3个字节,24个比特,比特前三位必须是110
D类多播地址 前三个比特是1110
E类保留地址前四位是1111
采用点分十进制,每8个比特取一个十进制数

A类地址的范围是1.0.0.0~126.255.255.255
最大的主机数量2^24 -2 = 16777214
127.x.x.x作为本地环回测试用
B类地址范围128.0.0.0~191.255.255.255
最大主机数量2^16-2 = 65534
C类地址范围192.0.0.0~223.255.255.255
最大主机数量2^8-2 = 254
D类地址224.0.0.~239.255.255.255
E类地址240.0.0.0~255.255.255.254
255.255.255.255作为广播地址
网络号全0表示本网络。网络号127表示本地环回测试

A类地址的最大网络数2^7-2(0和127不用)=126
B类地址的最大网络数2^14
C类地址的最大网络数2^21
计网第四章 网络层(咕咕咕)-编程知识网
网络地址:主机号全是0

广播地址:主机号全是1

环回地址:A类地址网络号127

255.255.255.255只能广播本网络,路由器不会向外转发
网络号+主机全1表示在该网络中进行广播
**私有地址,在公网中看不见,不能使用,这些地址的计算机要把IP地址转换成合法的公网IP地址才层在互联网上通信。

同一个局域网上的主机或者路由器的网络号都是一样的
路由器至少有两个以上的IP地址

在IP层只能看到IP数据报,两个主机之间的路由器的IP地址不在IP数据报中,路由器只根据目的站的IP地址的网络号进行路由选择。

在链路层只能看到MAC帧,链路根据链路上的物理地址传输数据。MAC帧在不同的网络上传送时,MAC帧首部的源地址和目的地址都要发生变化,因为记录的是链路两段的硬件地址

ARP协议的作用

从网络层使用的IP地址,解析出在数据链路层使用的硬件地址。
不管网络层使用的什么协议,在链路层传输数据帧时还是要用硬件地址

每个主机都有一个ARP高速缓存(ARP cache),存放本局域网上各主机和路由器的IP地址到硬件地址的映射。

如果主机A向主机B发送IP数据报,先在ARP cache中查找有无B的IP地址(1)有,查出对应的硬件地址,写入MAC帧中。(2)没有,ARP进程向局域网广播发送一个ARP请求分组,收到响应分组以后,将得到的IP地址到硬件地址的映射写入ARP缓存中。

ARP请求分组:发送方硬件地址/发送方IP地址/目标方硬件地址(填0)/目标方IP地址
本地广播ARP请求:路由器不会转发出去
ARP响应分组:发送方硬件地址/发送方IP地址/目标方硬件地址(填0)/目标方IP地址
ARP是解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射问题。
如果要找的主机不在同一个网络中,通过ARP找到一个位于本局域网的路由器的硬件地址,通过路由器交给下一个网络。

计网第四章 网络层(咕咕咕)-编程知识网

IP数据报格式

IP数据报由首部和数据两部分构成
首部的前一部分是固定长度的部分,共20字节,固定部分之后是可选字段,长度是可变的。

计网第四章 网络层(咕咕咕)-编程知识网
版本——占4位,指IP协议的版本(IPv4或IPv6)。

首部长度——占4位,可表示的最大数值是15个单位(每个单位表示4个字节),因此首部的最大长度是60字节。

区分服务——占8位,表明这个服务的类型(1)EF:快速转发(2)AF:确保转发(3)BE:尽力转发。

总长度——占16位,指首部和数据的长度,单位是字节,因此数据报的最大长度是65535字节。

标识——占16位,用来区分分片,相同标识的片可以组装成原来的数据报。

标志——占3位,最低位MF(More Fragment)表示后面还有没有分片,也就是自己是不是最后一片,MF=1表示后面还有片。中间的位DF(Don’t Fragment)表示是否允许分片,DF=0表示允许分片,最高位没意义。
片偏移。

片偏移——占13个位,表示本片在原分组中的起始位置。以8个字节为单位,因为标志占了3位,总长度占了16位,总长度单位是1字节,所以片偏移的单位是8字节。

分片后的数据报可以再次进行分片
当数据报被分片后,每个片的总长度要改成该片的总长度。
如果DF设置为1,并且长度大于MTU,则会把该数据报丢弃并返回一个ICMP差错报文通知原因。
一个未分片的信息字段全是0,MF=0,片偏移为0,分片步骤:
(1)检查DF位,如果为1,返回ICMP报文给源端
(2)除了最后一片,所有数据部分的长度必须是8个字节的倍数(因为片偏移是以8个字节为单位)
(3)修改报头
(4)片偏移设为数据部分起始位置相对原来报文的位置。
(5)重新计算首部长度和总长度字段
(6)重新计算头部检验和字段

生存时间——占8位,表示在网络中可通过的路由器的最大值。

协议——占8位,表示此数据报携带的数据使用何种上层协议,交给哪个上层使用。

首部检验和——占16位,步骤:
(1)发送方先将IP数据报首部划分成许多16位的序列。检验和字段置0.
(2)用反码运算将所有16位相加,结果的反码写入检验和字段。
(3)接收方将所有首部的16位相加取反码,如果结果为0保留,否则认为数据出错,丢弃。
反码求和过程中,如果进位就像高位加1,最高位产生进位,向最低位加1。
因为回卷机制,先取反再求和和先求和再求反结果一样。

源地址——占32位
目的地址——占32位

可变部分——长度可变,1到40字节不等,要保证是4字节的整数倍(用0填充)

IP层转发分组的流程

按照主机所在的网络地址制作路由表
路由表的每一条包括网络地址和下一跳的地址

特定主机路由:为特定的目的主机指明一个路由,为了使网络还礼人员控制和测试网络
默认路由:在其他路由表项中找不到,就交付给默认路由
默认路由的好处:减少路由表占用的空间和搜索的时间。

划分子网和构造超网

划分子网

将网络划分成更多的小网络,把主机号拿出一部分给网络号用
三级IP地址
IP地址::={<网络号>,<子网号>,<主机号>}
先根据网络号找到链接到本网络上的路由器,再按照子网号找到目的子网,再根据主机号交付给主机
根据子网掩码找到子网号和主机号
路由器和相邻路由器交换信息时,必须把网络的子网掩码也告诉相邻路由器。

如果一个路由器连接在两个子网上,就拥有两个网络地址和子网掩码

根据子网掩码计算网络地址的过程:
计网第四章 网络层(咕咕咕)-编程知识网
子网划分步骤:
(1)确定子网数
计网第四章 网络层(咕咕咕)-编程知识网
才CIDR出现之前,子网号不能是全0或者全1,因为会导致不同的网络的网络号和广播号相同

路由转发算法:
计网第四章 网络层(咕咕咕)-编程知识网

CIDR(Classless Inter-Domain Routing)无分类域间选择路由

使用各种长度的网络前缀代替网络号和子网号,IP地址从三级变回了两级

IP地址::={<网络前缀>,<主机号>},使用斜线记法或者叫CIDR记法

CIDR网络地址相同的连续IP地址组成"CIDR地址块"

根据斜线可以得到地址块的最小和最大IP地址

构造超网 路由聚合

将小网络聚合成一个大网络,把网络号拿出一部分给主机号用,将多个连续的网络地址聚合映射到一个物理网络上。

路由表中一个表项可以表示原来很多传统分类的路由。

依然使用掩码表示网络号占用的位数。

构成超网的几个规则
(1)构成超网的地址块必须是2^N
(2)构成超网的地址块必须是连续的
(3)超块的第一个地址的第三字节必须能被块数均匀分开

最长前缀匹配(最长匹配,最佳匹配)
特定主机路由:前缀长度是32
默认主机路由:前缀长度是0
如何查找路由表
将IP地址取出,与前缀长度对应的网络掩码按位与,得到的结果与路由记一样,就匹配
如果与多条匹配,选择匹配前缀长度最长的。

使用二叉线索树查找路由表

唯一前缀:路由表中每一个IP地址的前缀是唯一的,用该前缀可以唯一的表示路由表中的一个IP地址。

网际控制报文协议 ICMP(Internet Control Message Protocol)

ICMP作为IP数据报的数据,加上IP首部发送出去
ICMP报告差错和异常情况
ICMP是IP层的协议
IP首部的协议号是1
计网第四章 网络层(咕咕咕)-编程知识网
类型——ICMP差错报文和ICMP询问报文
前4个字节是统一的格式

ICMP差错报告报文

报文长度为36字节
·终点不可达(type=3)
计网第四章 网络层(咕咕咕)-编程知识网
源路由:(1)strict sourse route严格按照标定的路由路径 (2)loose sourse route只要经过标定的路由就可以。
·时间超过(type=11)
(1)TTL减为0,被路由器丢弃。
(2)分片后重组出现问题,片缺失,目的主机等不到片
·参数问题(type=12)
·源点抑制(type=4)
路由器的缓存队列以满,将丢掉报文,向源主机发送ICMP冷却报文
·改变路由(type=5)
在目的网络没有找到目的主机,路由器将告诉源主机发送给另外的路由器

ICMP报文组装过程

计网第四章 网络层(咕咕咕)-编程知识网
不发送ICMP差错报文的几种情况
·对ICMP差错报告报文不再发送ICMP差错报告报文。
·对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
·对具有多播地址的数据报都不发送ICMP差错报告报文。
·对具有特殊地址(如127.0.0.0或0.0.0.0) 的数据报不发送ICMP差错报告报文。

ICMP询问报文(报文长度40字节)

回送请求和回答报文
由主机或者路由器向特定的目的主机发出的询问,收到报文的机器必须给源主机发送ICMP回送应答报文。 作用:测试目的站是否可达和了解相关状态。

回送请求和回答报文举例:
PING
测试两个主机之间的连通性
payload有效负载
是应用层直接使用网络层的例子,没有通过运输层

时间戳请求和回答报文
提供毫秒级的分辨率
计网第四章 网络层(咕咕咕)-编程知识网
时间戳的返回值是从午夜开始计算的毫秒数
发送时间=receive timestamp – Originate timestamp
接收时间=分组返回时间 – transmit timestamp
往返时间= 发送时间+接收时间
因为接发双方的时钟出现了两次,所以时钟不同步也没关系

Traceroute命令
作用:用于发现数据发送到目的地时实际上采取的路由

原理:TTL减到0时路由器会向源系统发送ICMP超时信息,通过从1开始不断的增大TTL接收ICMP差错超时报文确定路由器,当到达目的主机时,因为不会转发数据报和丢弃数据报,通过设置端口等方法使目的主机发送目的不可达差错报文。
注意:通过发送小的数据包测量时间,一条路径上每个设备测试3次。输出结果包括每次测试的时间和设备名称、IP地址
计网第四章 网络层(咕咕咕)-编程知识网

因特网路由选择协议

确定一条从源节点到目的节点的传输路径

理想的路由选择算法

正确、完整
简单:不应使网络通信量增加太多开销
稳定性(自适应性)
公平
最佳:平均时延最小网络吞吐量最大,不能影响可靠性
代价

静态路由选择策略
非自适应路由选择,简单、开销小、不能及时适应网络状态
动态路由选择策略
自适应、复杂、开销大,能较好的适应网络状态变化
计网第四章 网络层(咕咕咕)-编程知识网
计网第四章 网络层(咕咕咕)-编程知识网

分层的路由选择协议

原因:如果让所有的路由器知道所有网络的路由路径,代价太大,有些单位不想让外界了解自己的路由细节。
自治系统AS(Autonomous System)
定义:一组路由器使用一种AS内部的路由选择协议和共同的度量确定在AS内的路由,AS之间也确定AS之间的路由。
一个自治系统可能运行单个路由协议,也可以支持多个路由协议。
一个AS对其他AS表现出的是单一的和一致的路由选择策略。
一个AS是一个互联网,有权决定本系统采用何种路由选择协议。

内部网关协议IGP(Interior Gateway Protocol)
在一个自治系统内部使用的路由选择协议(RIP和OSPF)
外部网关协议EGP(External Gateway Protocol)
从一个AS传到另一个AS(BGP-4)
域间路由选择:自治系统之间的路由选择
域内路由选择:自治系统内部的路由选择

内部网关协议RIP(Routing Informatica Protocol)

工作原理
最先广泛使用
基于距离向量的路由选择协议
每一个路由器维护自己到其他每一个目的网络的距离记录
距离其实就是跳数,路由转发次数,并且是最短距离,最少转发次数
允许一条路径最多包含15个路由器,距离为16被认为是不可达
只适用于小型网络
两个网络之间只能有一条路由,并且是路由次数最少的路由
不同路由器的路由表是不同的

RIP协议三个要点

只和相邻的路由交换信息
交换的信息时本路由器知道的全部信息,全部路由表
固定的时间交换路由信息,如:30s

路由刚工作时只知道到直接连接的路由器的距离为1,之后也只和相邻的路由器交换信息,经过若干次更新,最终所有路由器都会知道到任何一个网络的最短距离和下一跳路由器的地址。

收敛

在最佳路径的判断上所有路由器达到一直的过程。
当某个路由器更新时,会遍及整个网络,引发重新计算最佳路由,最终全体路由器达到一致。

RIP距离向量更新算法:
1.接到相邻路由器X的路由表,把下一跳地址改为X,距离加1
2.(1)如果目的网络不在本路由表中,加入到路由表中,
(2)如果在,如果下一跳地址是X,那么更新
(3)如果下一跳不是X,那么与X的那条比较,更小就替换
3.如果3分钟没有收到相邻路由器是消息,记为不可达路由,距离设为16
4.返回

IGRP内部网关路由协议(Interior Gateway Routing Protocol)
EIGRP增强型内部网关路由协议可是实现等价负载均衡和非等价负载均衡

RIP2协议的报文格式

计网第四章 网络层(咕咕咕)-编程知识网
地址族标识符:标志所使用的地址协议
路由标记:标识所属不同的自治系统
RIP是应用层协议,交付给下层运输层
报文最大长度是4(首部)+20(一个路由信息的长度)*25=504字节

RIP1和RIP2的区别
RIP2有子网掩码,可以运行在包含子网的AS中,支持VLSM
RIP1发送更新使用广播包,RIP2使用组播,节省了带宽
RIP2支持明文或检验

路由环路
两个路由器互相不断的发送更新信息

RIP的优缺点

优点:实现简单,开销小
缺点:网络出现故障,经过比较长的时间将信息传送的所有网络
限制了网络的规模
交换的路由信息是全部的路由表,开销较大
好消息传的快,坏消息传的慢
解决办法:
1.水平分割:某个接口学到的路由不会再原路发送
2.毒性逆转:从某个接口学到路由以后,从原接口发回路由器,路由开销设置为16
3.触发更新:只有在路由改变时,才触发给相邻的路由更新信息
4.抑制计时:设置一个怀疑量,避免假消息

OSPF开放最短路径优先(Open Shortest Path First)一种IGP

特点:
开放:公开发表,不受厂商限制
最短路径优先:使用Dijkstra的最短路径算法
分布式链路状态协议
对不同的链路可根据IP分组不同的服务类型设置不同的代价
多路径的负载均衡
分组具有鉴别功能
支持VLSM和CIDR
每一个链路状态带上一个32位序号,序号越大状态越新
IP层

链路状态路由选择协议

拓扑结构图就是链路状态

三个要点

向本自治系统的所有路由器发送信息(洪泛法)
发送的信息是与本路由器相邻的所有链路状态,只是本路由器知道的部分信息
只有路由器链路状态发生变化才洪泛

所有的路由器最终建立一个链路状态数据库
全网的拓扑结构图,在全网范围内是一致的

OSPF的区域

为了使OSPF能用于规模很大的网络,将每个AS划分成若干个区域

每个区域都有一个32位的区域标识符
划分区域的好处:将洪泛的范围局限在了一个区域里而不是整个AS,减少了网络上的通信量
主干区域:连通其他下层的区域 标识符0.0.0.0
BR主干路由器(backbone router):主干区域内的路由器
ABR区域边界路由器(area border router):接收其他区域信息的路由器
自治系统边界路由器:主干区域内的路由器,用来和其他AS交换信息。

OSPF直接用IP数据报传送

OSPF数据报很短,减少路由信息通信量
不必将长的数据报分片

OSPF报文

计网第四章 网络层(咕咕咕)-编程知识网
类型——5种类型
分组长度——整个OSPF分组长度
路由器ID——路由器的IP地址
区域ID——分组所在的区域号
检验和——分组错误检测
鉴别类型——0不鉴别,1鉴别
鉴别——不鉴别时全为0

OSPF5种分组类型

1.问候分组——用来发现和维持临站的可达性
2.数据库描述DBD(DataBase Describe)分组——向邻站给出自己链路状态数据库的所有链路状态项目摘要信息
3.链路状态请求LCR(Link State Request)分组——向对方请求发送链路状态项目详细信息
4.链路状态更新LSU(Link State Update)分组——将链路状态通知给邻站
5.链路状态确认LCAck(Link State Acknowledgment)分组——对LSU的确认

相邻路由器每隔10秒交换一次问候分组
如果40s没有收到问候分组,认为不可达,立即秀海LSDB。
每隔一段时间刷新一次LSDB的链路状态

指定路由器DR(Designated Router)
负责中转所有链路状态信息
备份指定路由器BDR(Backup Designated Router)

边界网关协议BGP(外部网关协议)

不同AS之间路由器交换信息的协议
背景:因特网规模太大,AS之间路由选择很困难,AS间的路由选择必须考虑有关策略

特点
交换的路由信息是AS数量级的。
每个AS的BGP发言人数量很少
支持CIDR
刚开始运行时交换整个BGP路由表,之后触发更新

BGP力求找到一条到达目的网络比较好的路由而不是最佳路由
采用路径向量的路由选择协议
AS的分类:(1)单口AS:只有一个连接的AS,只能作为源点和目的点(2)多归路AS:有多个连接AS,但是只作为源点和目的点,不传递信息(3)过渡AS:可以穿越信号量

BGP发言人:往往是边界路由器
建立BGP会话,使用TCP协议传送路由信息,是应用层协议
IBGP:同一个AS内的两个BGP发言人的信息通讯
EBGP:不同AS的两个BGP发言人的信息通讯

BGP交换的网络可达性信息就是要到达某个网络要经过的一系列AS

BGP-4的4中报文

(1)OPEN打开报文:建立关系
(2)UPDATE更新报文:发送某一路由信息
(3)KEEPALIVE保活报文:确认邻站存活报文
(4)NOTIFICATION通知报文:发送检测到的差错
计网第四章 网络层(咕咕咕)-编程知识网

BGP热土豆路由选择

BGP连接通告中的两个属性
AS-PATH:此通告包含的路径,如果路径中包含自己,将产生环路,将会拒绝
NEXT-HOP:下一跳,AS-PATH起始路由器接口的IP地址
热土豆选择:从所有NEXT-HOP中选择开销最小的

路由器的结构

路由选择:控制部分
分组转发: 三部分构成
交换结构:(a)通过存储器。(b)通过总线。(c)通过互连网络
输入端口:从物理层到网络层,分组排队,查表转发
输出端口:分组排队缓存,从网络层到物理层
转发表是根据路由表得出的

分组丢弃的原因:输入输出队列产生溢出

IP多播

特点:
1.使用组地址——IP地址的D类地址
2.永久组地址——224.0.0.0~224.0.0.255预留
3.组成员是动态的
4.使用硬件进行多播
01-00-5E-00-00-00到01-00-5E-7F-FF-FF
D类IP地址可分配28位,可分配MAC地址位数23位,因此前5位IP地址不能构成MAC地址

IGMP网际组管理协议 IP协议的组成部分

IGMP不知道IP多播组的成员数和分布
IGMP让连接本局域网的多播路由器知道本局域网是否有某多播组成员
多播数据报可以由没有加入多播的主机或者没有组成员的网络发出

两个阶段:
一、某个主机加入了多播组,要告诉多播路由器,多播路由器会转发给互联网上其他多播路由器
二、周期性的探询本网络是否还有多播组成员,只要有一个响应就认为网络活跃,几次探询失败后,不再转发组成员

主机和多播路由器之间通讯都是使用IP多播

多播路由选择协议

尚未标准化
多播路由选择协议实际上是找出源主机为根节点的多播转发树,多播转发树上的路由器不会受到重复的多播数据报
不同的多播组的数不一样,不同的源点的树也不一样

转发的3种方法

1.(洪泛和剪除)
适用于小的多播组,所有组成员的局域网是邻接的
RPB反向路径广播

计网第四章 网络层(咕咕咕)-编程知识网
剪除:如果某个路由器发现下游没有组成员,剪除下游,某个下游新增组成员了,可以接入
2.隧道技术

计网第四章 网络层(咕咕咕)-编程知识网
基于核心的发现技术
对每一个多播组G指定一个核心路由器,给出单播地址,核心路由器创建出对应的多播转发树

VPN虚拟专用网

概念:利用公用互联网作为本机构各专用网之间的通信载体

本地地址(专用地址、私有地址、可重用地址)——仅在机构内部使用的IP地址
全球地址——全球唯一IP地址,需要申请
互联网中所有路由器,对目的地址是专用地址的数据报不进行转发

三个专用IP地址块
10.0.0.0-10.255.255.255
172.16.0.0-172.31.255.255
192.168.0.0-192.168.255.255
通过互联网的数据可以进行加密

通过隧道技术实现虚拟专用网
远程接入VPN
通过VPN软件使得外部的主机通过通道访问内部的本地网络

网络地址转换NAT

所有本地地址主机和外界通讯要在NAT路由器将本地地址转换成全球地址才能和因特网连接

NAT转换过程
计网第四章 网络层(咕咕咕)-编程知识网
两次地址转换:(1)离开专用网时 (2)进入专用网时
通过NAT路由器的通信必须由专用网内的主机发起的。
专用网内部的主机不能充当服务器用

NAPT网络地址与端口号转换

不同的主机专用IP地址,不同的进程转换成统一全球IP的不同端口号。

MPLS多协议标记交换

多协议:MPLS上层可以采用多种协议
标记:每个分组打上一个标记,根据标记对分组进行转发
MPLS没有取代IP,而是作为IP增强技术
特点:
(1)支持面向连接的服务质量
(2)支持流量工程,平衡网络负载
(3)能够有效的支持虚拟专用网