网络层为传输层提供服务,将传输层的数据包封装成“IP数据报”。网络中的路由器根据IP数据报首部中的源IP地址、目的IP地址进行“分组转发”。因此网络层实现了“主机到主机”的传输
数据链路层为网络层提供服务,将网络层的IP数据报(分组)封装成帧,传输给下一个相邻结点
网络层的功能
异构网络互联
异构网络互联是指网络层能够通过路由器将底层物理结构、技术标准、通信协议完全不同的各种网络(即“异构网络”)相互连接起来,使它们能够相互通信,形成一个统一的、逻辑上的巨网(即互联网)。
在TCP/IP文献中,路由器也称为网关(Gateway)
路由与转发
路由
各路由器之间相互配合,规划IP数据报(分组)的最佳转发路径
各个路由器需要运行“路由协议”,最终生成各自的“路由表”
转发
一台路由器,根据自己的“转发表”,将受到的IP数据报从合适的接口转发出去
转发表 = 精简路由表;更精简的的数据结构能够有助于快速检索
拥塞控制
拥塞
原因:网络上出现过量分组、超负荷,引起网络性能下降
现象:网络上的分组增加,但吞吐量反而降低
拥塞控制方法
开环控制
在部署网络时,就提前设计好预防拥塞的方法,一旦网络系统开始运行,就不再修改
闭环控制
动态监视网络状态,及时发现哪里发生拥塞,并将拥塞信息传递给相关路由器,相关路由器及时调整“路由表”
IPv4
IPv4分组
IP数据报(IP分组)的格式



注意3个与“长度”相关的字段:418,首总偏
IPv4地址
IP地址分类的最初方案
在那个年代,要求每台主机、每个路由器接口被分配的IP地址都是全球唯一的
路由器和路由器连接的接口可以不分配IP地址,但路由器和其它节点连接的接口必须分配IP地址
从属于同一个网络的所有主机、路由器接口的IP地址“网络号”都相同
当一台新主机接入网络时,需要给它分配一个IP地址、并配置“默认网关”
单播地址
包括A类(1~126)、B类(128~191)、C类(192~223)
多播地址
即D类地址(224~239)
保留为今后使用
E类地址(240~255)
一些特殊的IP地址

子网划分与子网掩码
背景:假如某公司申请了一个B类的地址段,那么在该地址段下的主机号就可以有216-2个,但是大部分情况下一个公司根本用不了这么多的主机号,于是就引入了子网划分技术
子网划分
原理:若某单位租用了一个IP地址段,假设原本主机号占 n bit,那么可以将前 k bit抠出来作为子网号,用剩余的 n-k bit作为主机号,这样就能划分出 2k个子网
子网划分前,IP地址为两级结构 = <网络号,主机号>
子网划分后,IP地址为三级结构 = <网络号,子网号,主机号>
注意:每个子网地址中,主机号不能分配全0/全1,全0表示子网本身,全1为子网广播地址
子网掩码
用子网掩码、IP地址“逐位与”,算出<网络号,子网号>(合称为“网络前缀”)
只有网络前缀相同的IP地址,才归属为同一个网络(或子网)
如果一台路由器支持子网划分技术,那在它的转发表中,需要包含<目的网络号,子网掩码,转发接口>
默认子网掩码:如果一个传统网络(A/B/C类)内部没有进行子网划分,那么可以将对应此网络的转发表项设置为“默认子网掩码”(A类:255.0.0.0、B类:255.255.0.0、C类:255.255.255.0)
默认路由:默认路由(默认转发表项)设置:<目的网络号全0,子网掩码全0>;在路由器转发表中,如果所有表项都不匹配,那么将从“默认路由”转发出去
CIDR
背景:1993年推出无分类编址CIDR,当时互联网在民用领域大放异彩,由于每台主机都至少消耗一个全球唯一的IP地址,IP地址资源告急
原理
取消了IP地址传统的A/B/C/D/E分类,采用无分类编址CIDR,IP地址块分配更灵活,利用率更高,一定程度上缓解了IP地址耗尽
IP地址 = <网络前缀,主机号>,其中网络前缀不定长
CIDR记法——8.152.217.231/30,表示在这个IP地址中,网络前缀占30bit,主机号占2bit
CIDR地址块子网划分
定长子网划分
在一个CIDR地址块中,把主机号前k bit抠出来作为定长子网号,这样就能划分出2k个子网(每个子网包含的IP地址块大小相等)
变长子网划分
在一个CIDR地址块中,划分子网时,子网号长度不固定(每个子网包含的IP地址块大小不同)

路由聚合
对于一个路由转发表,如果几条路由表项的转发接口相同,部分网络前缀也相同,就可以将这几条路由表项聚合为一条。这种地址的聚合称为路由聚合,也称构成超网
优点
路由聚合可以减少路由表大小,减小对内存的占用
路由聚合可以提高查询速度
缺点
路由聚合可能会引入额外的无效地址
路由聚合可能会导致一个目的IP地址与多个表项都能够匹配;此时需要使用最长前缀匹配原则选择合适表项,即选择前缀长度最大的表项所对应的接口转发
NAT
私有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
外网IP
通常由ISP提供,全球唯一
外网IP是一个局域网与外界通信时所需使用的IP地址
NAT路由器
作用:转发IP数据报时,进行内网IP、外网IP的相互转换
NAT表:记录地址转换关系—— [内网IP:端口号 <-----> 外网IP:端口号]
一个IP数据报从内网转发到外网,会更改源IP地址、源端口号;从外网转发到内网,会更改目的IP地址、目的端口号
NAT路由器包含传输层的功能(因为端口号是传输层的概念)
ARP(地址解析协议)
作用:ARP协议用于查询同一网络中的 <IP地址,MAC地址> 之间的映射关系
ARP表
记录(IP地址 <---> MAC地址)之间的映射关系
每台主机、每台路由器都有自己的ARP表
需要定期更新ARP表项
过程
ARP请求分组
内容
我是谁?——我的IP地址是xxx,我的MAC地址是yyy
我想找谁?——我想找的这个的IP地址是zzz
ARP请求分组封装进MAC帧(帧目的地址 = 全1,源地址 = yyy)
ARP相应分组
内容
我是你要找的,我的IP地址是zzz,我的MAC地址是aaa
ARP响应分组封装进MAC帧(帧目的地址 = yyy,源地址 = aaa)
DHCP(动态主机配置协议)
作用:给刚接入网络的主机动态分配IP地址、配置子网掩码、默认网关等网络相关参数(DHCP是应用层协议,使用UDP提供的服务;客户UDP端口号 = 68、服务器UDP端口号 = 67)

在家庭网络中,通常由家庭路由器兼职“DHCP”服务器
在大型网络内可以有多台DHCP服务器,当一个新主机接入网络时,广播的DHCP发现报文可能被多个服务器响应,因此在DHCP请求报文中依然要广播告诉每个DHCP服务器自己收到的参数是多少
ICMP(网际控制报文协议)
作用:可以让主机或路由器互相报告网络中发生的差错和异常情况(ICMP数据网络层,ICMP报文封装在IP数据报中)

不必反馈ICMP差错报告报文的情况
若携带ICMP差错报告报文的IP数据报出错,不再反馈ICMP差错
若IP数据报被分片,则无论几个分片出错,都只反馈一次ICMP差错
若IP数据报的目的地址为多播地址,不反馈ICMP差错
若IP数据报的源地址为特殊地址(如:127.x.x.x、0.0.0.0),则即便发生IP数据报异常也不反馈ICMP差错
ICMP的典型应用
ping——基于回送请求报文、回送回答报文实现功能
traceroute——基于时间超过报文实现功能
IPv6
IP地址记法
IPv4地址的点分十进制记法:192.168.1.1
IPv6地址的冒分十六进制记法:2001:0db8:85a3:0000:0000:8a2e:0370:8111
IPv6地址的压缩记法:
去除每个分段的前导零:2001:db8:85a3:0:0:8a2e:370:8111
用双冒号"::"替代连续出现的多个0(一个地址只能出现一次双冒号,不然会产生歧义):2001:db8:85a3::8a2e:370:8111
一台主机的地址 = [n位前缀,128 - n 位接口标识符(相当于IPv4中的主机号)]
IP地址资源的分配
支持无分类编制CIDR,因此各级地址管理机构可以灵活划分子网大小
IPv6因为地址空间很大,所以可以划分更多的层次
IPv6支持即插即用(IP地址自动配置,可以直接用MAC地址),因为IPv6可以不使用DHCP
IPv6地址的分类
未指明地址 = ::/128
环回地址 = ::1/128
多播地址 = ff::/8
本地链路单播地址 = fe8::/10
全球单播地址 = 其他
三类IPv6的目的地址
单播、多播(数据报交付一组主机)、任播(数据报交付最近的一台主机、DNS服务器)
路由算法与路由协议
路由算法
路由算法、路由协议之间的关系
路由器的功能是负责转发IP数据报,路由器上会运行路由协议,路由协议定义了路由器之间如何交换必要信息,并实现了某种路由算法。必要的信息会作为算法的输入,经过路由算法输出成为最佳转发路径(本质就是图的最短路径问题),从而生成路由表
路由算法的分类
静态路由算法:指由网络管理员手动配置每一条路由
动态路由算法:路由器根据网络流量负载和拓扑结构的变换来动态调整自身的路由表(要求掌握距离-向量路由算法(RIP协议)、链路状态路由算法(OSPF协议)、路径-向量路由算法(BGP协议))
常见的动态路由算法
距离-向量路由算法(RIP协议)
本质是Bellman-Ford算法在路由领域的应用
特点:路由其不必关心完整的网络拓扑结构,只需关心和邻居之间的距离以及各个邻居与目的网络之间的最短距离
链路状态路由算法(OSPF协议)
本质是迪杰斯特拉算法在路由领域的应用
特点:路由器需要知道完整的网络拓扑结构,再使用迪杰斯特拉算法找到最短路径
路径-向量路由算法(BGP协议)
略
路由协议
分层次的路由协议
路由协议的分类
内部网关协议(IGP)
用于自治系统内部的路由选择。例如:RIP、OSPF属于IGP
一个自治系统有权决定,在本自治系统内使用哪种内部网关协议
外部网关协议(EGP)
用于自治系统之间的路由选择。例如:BGP属于EGP
各个自治系统便捷路由器之间,统一使用BGP协议相互通信路由信息
自治系统AS
全世界的互联网被划分为相互独立的自治系统AS,每个自治系统都有全球唯一的AS编号(ASN)
每个AS至少有一个自治系统边界路由器和其他AS相连
自治系统之间是平级的,不存在包含关系
RIP协议
RIP在协议栈中的位置
RIP属于应用层,它使用UDP传输数据(端口号 = 520)
RIP协议定义了两种报文:Request报文(请求邻居路由器发送其路由表,用于启动或查询)、Response报文(响应请求或定期发送给邻居路由器,携带完整或部分路由表)
RIP协议的规定
RIP如何定义路径长度
RIP使用跳数来衡量到达目的网络的距离(规定:录取到直连网络的距离为1;而每经过一个路由器,距离就+1)
RIP认为好的路由就是跳数最少的
RIP允许一条合法路径距离不能超过15。距离等于16时表示网络不可达(RIP只适用于小型自治系统)
RIP如何定义路由表格式
每个路由器都要维护自己的路由表,路由表项有三个关键字段 <目的网络N,距离d,下一跳路由器地址X>
每个路由器都要维护从它自身到其他每个网络的距离记录,即距离向量
路由器之间如何交换必要信息
Who,和谁交换信息:仅和直接相邻的路由器交换信息
What,交换什么信息:交换的信息是本路由器所知道的全部信息,即自己的路由表
When,何时交换信息:通常按固定的时间间隔(一般为30秒)交换路由信息
注:为了加快RIP收敛速度,也可以引入触发更新机制——当路由器发现网络拓扑发生变化时,立即向相邻路由器通告拓扑变化后的路由信息,而不必等待30秒
RIP的工作过程

理解RIP协议如何实现收敛以及动态适应网络拓扑结构的变化
RIP协议的缺点
RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)
路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大
当网络出现故障时,路由器之间需反复多次交换信息才能完成收敛,要经过较长的时间才能将故障信息传送到所有路由器(慢收敛现象),俗称坏消息传播的慢
RIP协议的优点
实现简单、开销小、收敛过程较快
若一个路由器发现了更短路由,则这种更新信息就传播得很快,在较短时间内便可被传至所有路由器,俗称“好消息传播得快”
OSPF协议
OSPF协议在协议栈中的位置
OSPF协议属于网络层,OSPF使用IP协议提供的服务,IP首部协议字段 = 89
OSPF路由协议:基于链路状态路由算法(迪杰斯特拉算法)计算最佳转发路径。因此,首先得让每台路由器都建立整个网络的拓扑结构(数据结构的带权有向图,可用邻接表存储)
OSPF的主要特点
路由器可以直接探测到的信息:自己和哪些节点直连
怎么把自己探测到的信息“说给”其他所有路由器
What说什么:与自己直连的所有链路状态(我是谁、我的邻居都有谁、我到每个邻居之间的代价是多少)
How怎么说:洪泛法(将探测到的链路状态信息迅速发给其他路由器)
When什么时候说:探测到身边有变化时(路由器每探测到身边链路有变化,就再次立即洪泛最新的链路状态信息)
OSPF的其他特点
OSPF允许对每条路由设置成不同的代价,对于不同类型的业务可计算出不同的路由(默认基于带宽计算链路代价)
若到同一目的网络有多条相同代价的路径,则可将通信量分配给这几条路径(负载均衡)
OSPF分组具有鉴别功能,从而保证仅在可信赖的路由器之间交换链路状态信息(防止非法路由器的恶意攻击)
OSPF支持可变长度子网划分和无分类编址CIDR
每个链路状态都带上一个32位的序号,序号越大,状态就越新(帮助其他路由器确定以哪个版本为准)
OSPF的原理
把所有路由器探测到的路由状态信息整合之后,就形成了邻接表;在OSPF协议中,这个邻接表被称为链路状态数据库(LSDB)
通过洪泛机制,每个路由器可以快速的建立统一的LSDB
每台路由器运行迪杰斯特拉算法后,得知到达每个网络的最短路径长度
基于迪杰斯特拉算法的结果,各路由器就可以构建自己的路由表 <目的网络,下一跳,距离>
区域划分
将自治系统划分为一个主干区域、多个非主干区域
作用
洪泛范围局限在每个区域内部,降低了洪泛压力
一台普通路由器只需要关心所属区域的网络拓扑,LSDB变小了
几类路由器
自治系统路由器:在主干区域内,至少一台,负责与其他自治区域相连
区域边界路由器:每个非主干区域,至少一台,负责与主干区域相连
区域内部路由器:通常每个区域有多台
OSPF的分组类型

BGP协议
BGP协议是一种外部网关协议,用于在自治系统之间交换路由信息,实现路由选择
BGP协议的特点
BGP协议力求找到一条自治系统之间比较好的路由,而不是“最佳路由”
AS之间的路由选择必须考虑政治、安全或经济等有关因素
BGP协议采用路径向量路由算法——路由器之间通告BGP路由信息时,不仅告知目的地,还告知到达该目的地的完整路径(即需要经过那些自治系统)
BGP协议是应用层协议,基于TCP(端口号179)
BGP协议的概念
在一个自治系统中,边界路由器一定要运行BGP协议,内部的一些核心路由器也要运行BGP协议
BGP邻居:BGP协议的通信双方成为BGP对等方,也称为“BGP邻居”
BGP会话:BGP邻居之间先建立TCP连接,然后再该连接上交换BGP报文,从而建立BGP会话
两类BGP会话
两个AS的直连边界路由器之间,长期保持eBGP会话
AS内部的BGP路由器之间,长期两两保持iBGP会话
注意:规定AS内iBGP会话必须全连通,N个路由器形成N*(N-1)/2条iBGP会话
BGP路由信息
CIDR前缀
指向目的网络
BGP属性
AS-PATH(自治系统路径):描述到达目的网络需要经过哪些自治系统(用ASN序列表示)
NEXT-HOP(下一跳)
eBGP:“下一跳”是eBGP发送方路由器自己的IP
iBGP:默认不修改“下一跳”,也可修改为iBGP发送方路由器自己的IP
BGP关键规则
iBGP学到的路由不能再通过iBGP传播给其他iBGP邻居(避免环路传播)
注:AS内iBGP会话时全连通的,这样可以确保AS内所有路由器都能收到从外部学来的、一致的BGP路由信息
BGP路由选择
对于外部AS的目的网络X,如果有多条AS-PATH可以走,选哪一条路
策略
选择本地偏好值最高的路线(本地偏好值由AS管理员设置,相当于优先级;通常考虑成本、安全等因素)
选择AS跳数最少的路线(注意:AS跳数少,不代表路由器跳数少)
使用热土豆选择算法(根据内部网关协议找到一条让IP分组以“最小代价”离开本自治系统的线路)
选择BGP标识符最小的路由(每一台BGP的路由器都以唯一的32bit BGP标识符,常选取路由器接口中更大的IP地址作为标识符)
BGP的四种报文

IP多播
多播的概念
IP多播:源主机发送一个IP多播分组,再由多播路由器“多口转发”
多播路由器:支持“IP多播”功能的路由器(运行IGMP协议、多播路由协议)
IGMP协议:是主机和路由器之间的多播管理协议,用于管理主机对多播组的加入和离开(类似“加QQ群、退QQ群”),IGMP协议属于网络层,使用IP协议提供的服务,IP首部的协议字段 = 2
多播路由协议:多播路由器之间通过“多播路由协议”得知哪些接口处有多播组成员
IP多播地址
一个多播地址,对应一个多播组,可能包含多台主机
范围:224.0.0.0 ~ 239.255.255.255
特点
多播IP数据报也是“尽最大努力交付”,不提供可靠服务
多播地址只能作为目的地址,而不能作为源地址
对多播数据报不产生ICMP差错报文
移动IP
移动IP的概念

移动IP的通信过程

网络层设备
