4_network
网络层总体叙述
实现主机到主机的通信服务。
源主机的网络层为传输层所需要传输的Segment添加头部信息,组装为datagram,将datagram交付给中间路由器的网络层,不断地进行交付以传输,直达该datagram到达目的主机的网络层,网络层对数据进行处理后,将原Segment交付给目的主机的传输层。
核心功能
- 转发(forwarding),分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作
- 路由(routing),确定分组从源到目的地所采取的端到端路径的网络范围处理过程
部分网络(也就是服务模型中的连接服务对应的网络)具有的核心功能
- 连接建立,建立一条连接包含源目的主机以及所有中间设备的网络层的逻辑连接
转发功能也被称为数据平面,而路由功能被称为控制平面。
网络服务模型
不同的网络体系结构提供不同的网络服务模型。
- Internet提供尽力而为的服务模型。尽力而为在某种程度就是什么服务都不进行提供。

网络层服务分类
连接服务(connection service)
- 首先为系列分组的传输确定从源到目的经过的路径 (建立连接) ,然后沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 例子:虚电路网络(virtual-circuit network)
无连接服务(connection-less service)
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径,不同分组可能传输路径可能不同
- 例子:数据报网络(datagram network)
对比

虚电路网络
预先会建立一条从源到目的主机之间,包含其中众多的路由器网络层的逻辑通路,该逻辑通路称为VC(虚电路virtual circuit)。
一条VC会具有不同的VCID(至于为什么,我无法理解他人的解释),每个数据报会携带VCID进行标识相应的VC,而中间路由器依据转发表修改VCID,保证数据包正确沿VC前进。
每台路由器的转发表包括了VC号的转换【入接口,入VC号,出接口,出VC号】。无论何时跨越一台路由器创建一条虚电路,转发表就增加一个新表项。无论何时删除一条虚电路,沿着该路径每个表中的相应项将被删除(路由器必须为进行中的连接维持连接状态信息)。
端系统向网络发送指示虚电路启动与终止的报文,以及路由器之间传递的用于建立虚电路(即修改路由器表中的连接状态)的报文,被称为信令报文,用来交换这些报文的协议称为信令协议。
数据报网络
每个分组携带目的地址,路由器依据转发表和分组的目的地址转发分组。
一般而讲,对于转发表而言,其不可能存储全部的地址与输出接口键值对,一般而言,存储地址范围与输出接口的键值对,一般采用最长前缀匹配有限的方法。
网络协议(IPv4)
IPv4数据报格式

- 版本号占4位:IP协议的版本号,E.g. 4→IPv4,6→IPv6。
- 首部长度占4位:IP分组首部长度,以四字节为单位,E.g. 5→IP首部长度为20(5×4)字节。
- 服务类型(TOS)占8位:指示期望获得哪种类型(低延时,高吞吐量,非实时流量)的服务,一般情况下不使用。
- 总长度占16位:IP分组的总字节数(首部+数据),最大IP分组的总长度:65535B,IP分组可以封装的最大数据:65535-20=65515B。
- 生存时间(Time-To-Live,TTL)占8位:IP分组在网络中可以通过的路由器数(或跳步数),路由器转发一次分组,TTL减1,如果TTL=0,路由器则丢弃该IP分组。
- 协议字段占8位:指示IP分组封装的是哪个传输层协议的数据包,实现复用/分解,E.g. 6为TCP,17为UDP。
- 首部校验和占16位:实现对IP分组首部的差错检测。计算校验和时,该字段置全0。逐跳计算、逐跳校验。
- 源IP地址、目的IP地址各占32位:分别标识发送分组 的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址。
- 选项字段占长度可变,范围在1~40B之间:携带安全、源 选路径、时间戳和路由记录等内容,实际上很少使用。
- 填充字段占长度可变,范围在0~3B之间:目的是补齐整个 首部,符合32位对齐,即保证首部长度是4字节的倍数
- 标识,标志位,片偏移参见IP分片部分。
- 数据(有效载荷)。一般包含传输层的报文,通常为TCP/UDP报文,当然也可以是ICMP报文。
协议号是将网络层与运输层绑定到一起的黏合剂,端口号是将运输层与应用层绑定到一起的黏合剂。
为什么TCP/UDP和IP在运输层和网络层都进行差错检测?
- TCP/UDP是对整个报文进行差错检测,而IP仅仅对IP报文的头部进行差错检测
- TCP/UDP与IP可能不属于同一个协议栈
IP数据报分片
分片
一个链路层帧能承载的最大数据量叫作最大传输单元(Maximum Transmission Unit,MTU)。
IP分组需要被包装在链路层帧中,MTU严格限制着IP数据报的长度。
不同的链路层协议可以具有不同的MTU,在源主机到目的主机的IP分组传输路径上的不同链路可以使用不同的链路层协议,且每种协议可能具有不同的MTU。
为了保证链路层协议可以封装网络层协议交付的数据分组,网络层需要对IP分组进行切分,使得每个分组的大小小于MTU,这就是分片。
为了降低路由器的复杂性,要求只有端系统可以进行IP分片的重新组装
字段说明
-
标识字段占16位:标识一个IP数据报分组。IP协议利用一个计数器,每产生IP分组,计数器加1,作为该IP分组的标识,可能需要使用多个字段来完成对于IP数据报分组的标识。该字段可以进行判断哪些数据报是由同一个较大的数据报分片形成。
-
标志位字段占3位,分别为:保留位,DF (Don't Fragment)位,MF (More Fragment)位。
位名称 标识 E.g. E.g. 保留位 DF (Don't Fragment) 该数据包分组能否被分片 1:禁止分片 0:允许分片 MF (More Fragment) 该数据包分组是否为分片后的最后一个分片 1:非最后一片; 0:最后一片 -
片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移,以8字节为单位。进行标识分片形成的分组的顺序。
显然,将某个数据报分组分片后,除了最后一片,其余片封装的数据字节数一定是8的倍数。
分片过程
IPv4普通编址
接口
- 接口(interface):主机/路由器与物理链路的边界。
一个主机一般拥有一个接口,一个路由器拥有多个接口。从技术上讲,一个IP地址与一个接口相关联,而不是与包括该接口的主机或路由器相关联。
IPv4地址
- 32位{0/1}符号,建立与主机/路由器的接口的一一对应。
- 高位比特标识网络号(NetID),低位比特标识主机号(HostID)。形式为:IP地址 = NetID + HostID。
- 采用点分十进制记法,即:地址中的每个字节用它的十进制形式进行书写,各字节间以句号隔开。例如:11000001 00100000 110110000 00001001的点分十进制记法为:193.32.216.9。
IP子网
- IP子网,删减去所有的路由器,仅仅保留端口,所产生的隔离的网络岛均可以称为子网。
下图中蓝色部分为一个子网,第一个图中有3个子网,第二个图中有6个子网。
![]()
IPv4分址


私有地址如下,该地址仅在本子网内有效。
广播地址
目的地址为广播地址的分组,将会被分发给该广播地址所代表子网内的所有主机。
- 本网广播地址(受限广播地址):数据报不会被路由进行转发,而是会发送到源主机所在子网的所有主机上。
- 直接广播地址,则是会将数据报发送到所标识子网的所有主机上,可以通过路由进行转发。
对于一个子网的各类地址总结地址(也可以参见上表)
IP子网的地址,HostID所有位均为0。
子网掩码,NetID字段所有位均为1,HostID字段所有位均为0。
本网广播地址,255.255.255.255,即所有位均为1
特定网络的广播地址,HostID字段所有位均为1。
子网划分(Subnetting)
显然,IP地址的分配很不均匀,所以,需要将地址空间较大的网络进行划分为多个地址空间较小的网络,同时在划分的子网之间添加路由器,可以对通信流量进行有效的划分。因而,子网划分很有效。
子网划分的具体方法是:从主机号字段中抽取有限个高位作为子网号(SubID)。
-
IP地址形式为:IP = NetID + SubID + HostID
-
IP子网的地址,HostID与SubID所有位均为0。
-
子网掩码,NetID与SubID字段所有位均为1,HostID字段所有位均为0。
-
本网广播地址,255.255.255.255,即所有位均为1
-
特定网络的广播地址,HostID字段所有位均为1。
无类域间路由(CIDR)
概念
无类域间路由(CIDR: Classless InterDomain Routing)将NetID和SubID聚合为Network Prefix。
-
IP地址形式:IP地址 = Prefix + HostID。
-
IP地址格式:a.b.c.d/x,其中x为Network Prefix长度
特点
- 提高IPv4 地址空间分配效率,不做各类空间的划分。
- 提高路由效率,将多个子网聚合为一个较大的子网,可以进行路由聚合,以降低路由转发表的冗余项。
路由聚合
使用单个网络前缀通告多个网络的能力称为路由聚合/地址聚合/路由摘要。
动态主机配置协议(DHCP)
概念
动态主机配置协议(Dynamic Host Configuration)使得主机可以向服务器动态获取IP地址,子网掩码,默认网关(第一跳路由器)地址,本地DNS服务器地址等有关信息。
DHCP服务器位于应用层,其是一个服务器。
当用户当前IP的使用使用期限快到期时,DHCP提供了一种基址以允许客户更新它对于IP地址的租用。
优点:允许地址重用,以节约IP地址。即插即用,简单方便,快捷。
缺点:当节点连接到一个新子网,都需要获取一个新的IP地址,当一个节点在子网之间进行移动时,就不能维持与远程应用之间的TCP连接。
交互流程
- 主机广播 “DHCP discover”(发现报文)
- DHCP服务器利用“DHCP offer” (提供报文) 进行响应
- 主机请求IP地址: “DHCP request” (请求报文)
- DHCP服务器分配IP地址: “DHCP ack” (确认报文)

网络地址转换协议(NAT)
概念
某个网络中的具有私有IP地址的主机与另一个网络的主机进行通信,此时,私有地址需要被转换为另一个地址,同时也伴随着端口号的转换。
NAT服务器位于路由器上,其是一个网络层设备,这与DHCP是不同的。
优点
-
NAT可以有效的利用IP地址空间,一个子网仅仅需要一个IP地址即可,这可能也是现在IPv4地址空间已经消耗殆尽情况下,网络可以正常运行的一个原因。
-
NAT可以造成该子网内设备与外部网络的隔断,两者变化不会互相影响。
问题
-
NAT实际上就是使用端口号进行主机寻址,而端口号应当用于进程寻址。
-
NAT造成路由器完成功能的僭越。路由器本应该仅仅执行网络层之下的功能,仅仅处理只能到达网络层的分组,但是,路由器却进行需改传输层的分组。
-
NAT可能给应用开发者造成一定的问题,例如P2P应用,这将需要NAT穿透进行解决。
交互流程
- 替换,利用(NAT IP地址,新端口号)替换每个外出IP数据报 的(源IP地址,源端口号)
- 记录,将每对(NAT IP地址, 新端口号) 与(源IP地址, 源端 口号)的替换信息存储到NAT转换表中
- 替换,根据NAT转换表,利用(源IP地址, 源端口号)替换每 个进入内网IP数据报的(目的IP地址,目的端口号), 即(NAT IP地址, 新端口号)

NAT穿透
NAT一般而言,会动态地构建NAT转换表,这就造成客户无法连接某个网络中具有私有地址的主机的问题。
- 静态配置NAT,将特定端口的连接请求转发给服务器。
- 利用UPnP (Universal Plug and Play) 互联网网关设备协议 (IGDInternet Gateway Device )。实现端口的自动映射,可以认为这也是静态配置NAT,只不过由协议自主完成而非手动。
- 中继(如Skype),NAT内部的客户与中继服务器建立连接,外部客户也与中继服务器建立连接,中继服务器桥接两个连接的分组。
网络协议(IPv6)
IPv6协议被创立的原因:
- 32位IPv4地址空间已分配殆尽
- 改进首部格式:快速处理/转发数据报(为了实现这一目的,需要分片,并简化头部),支持QoS
IP数据报格式


- 优先级(priority):标识数据报的优先级,于IPv4的TOS字段的含义类似。
- 流标签(flow Label): 标识同一“流”中的数据报
- 下一个首部(next header): 标识下一个选项首部或上层协议首部(如TCP首部)。基本首部指向首个扩展首部,扩展首部指向后继的扩展首部,最后一个首部执行TCP或UDP的首部。
IPv4和IPv6的区别
取消分片,删除标识,标志位,片偏移等字段
校验和(checksum): 彻底移除,以减少每跳处理时间
选项(options): 允许,但是从基本首部移出,定义 多个选项首部,通过“下一个首部”字段指示
ICMPv6集合IGMP互联网多播组管理协议,被集成到ICMPv6中的功能,并添加报文类型,例如:“Packet Too Big”,是为了解决当前数据报大小超过MTU的问题,如果超出,直接丢弃,并且发送该类型的报文。
IPv6地址表示
- 128位{0,1}符号,建立与主机/路由器的接口的一一对应。
- 每16位用冒号:隔开,一共8个16位组。
- 16位中,用一个十六进制数字表示4位符号。
| 一般形式 | 1080:0:FF:0:8:800:200C:417A | |
| 压缩形式 | FF01:0:0:0:0:0:0:43 | FF01::43 |
| IPv4-嵌入形式 | 0:0:0:0:0:FFFF:13.1.68.3 或 ::FFFF:13.1.68.3 | |
| URLs | http://[3FFE::1:800:200C:417A]:8000 |
- IPv6将不会使用掩码
- IPv6的将会使用
0:0:0:0:0:FFFF:x.x.x.x的格式进行兼容IPv4地址
IPv4向IPv6过渡
总动机为:解决IPv4和IPv6网络的共存问题。
新型的IPv6使能系统可以做成向后兼容,即可以发送,路由,接受IPv4数据报。
但是现有的IPv4使能系统并不具备处理IPv6数据报的能力,所以只能在IPv6使能系统上进行做文章,于是隧道机制逢时而生。

在此之上,介绍的所有内容均属于网络层的数据平面。
在此之下,介绍的所有内容均属于网络层的控制平面。
路由算法
抽象网络路由问题为有权无向图的最短路径问题
下面有权无向图的最短路径问题的具体定义以及解决算法
分类
依照算法输入所掌握的网络信息的范围
| 类型 | 输入 | 例子 |
|---|---|---|
| 全局信息 | 所有节点之间的连通性以及所有链路的开销 | 链路状态(LS)路由算法 |
| 分散信息 | 每个节点仅知其直接相连节点的链路的开销 | 距离向量(DV)路由算法 |
依照算法是静态的还是动态的
| 类型 | 特点 |
|---|---|
| 静态路由选择算法 | 随时间变化较为缓慢,通常人工进行 |
| 动态路由选择算法 | 随网络流量负载和拓扑结构的变化而变化 |
依照负载(底层链路的拥塞水平)敏感还是迟钝
| 类型 | 特点 |
|---|---|
| 负载敏感算法 | 链路开销会动态的变化以反映底层链路的当前拥塞水平,据此,路由选择算法会绕开高拥塞的路由器 |
| 负载迟钝算法 | 某条链路的开销不能反应其当前的拥塞水平 |
链路状态(LS)路由选择算法
获取全部网络信息
通过每个节点向网络中所有其他节点广播链路状态分组进行完成,其中每个链路状态分组包含它所连接的链路的表示和开销。
结果是:所有节点都具有该网络的统一,完整的视图信息。
Dijkstra算法
- 计算某个节点到网络中所有其他节点的最低开销路径
- k次迭代之后,可得到该节点到k个目的节点的最低开销路径
算法具体描述如下
下面的算法仅仅计算最小代价,不包括路径的构造。

实例
震荡现象



距离向量路由选择算法
特点
- 异步,不要求所有节点互相之间步伐一致地操作。
- 自我终止,没有计算应该停止的信号,它就停止了。
- 分布式,每个节点都要从一个或多个直接相连邻居接受信息,执行计算,然后将其计算结果分发给邻居。
- 迭代,计算过程要持续到邻居之间无更多信息要交换为止。
具体内容
Bellman-Ford方程
距离向量
每个节点维护以下信息
- 对于每个邻居v,从x到直接相连邻居v的链路开销c(x,v)
- 节点x的距离向量
- 该节点的直接相连节点的距离向量
工作流程
- 每个节点不定时地将其自身的距离向量发送给周围节点
- 每个节点收到周围节点新的距离向量后,将依据Bellman-Ford方程进行更新自身的距离向量
- 如果其距离向量被改变,节点会向其周围节点发送新的距离向量

例子

链路代价改变的影响
消除无穷计数的方法


LS和DV比较


层次路由
解决问题
将任意规模网络抽象为一个图,且运行路由算法,过于理想化。
- 当今的互联网由数亿台主机组成,路由器的存储压力巨大。
- 路由计算过程的信息 (e.g. 链路状态分组、 DV)交换量巨大,会淹没链路!
- 每个网络的管理可能都期望自主控制其网内的路由
解决办法
构建网络之网络,聚合某些路由器为一个集合,称为自治系统AS(autonomous systems)。
在一个自治系统内部,可以运行不同的路由协议(路由算法),这些协议称为:自治系统内部路由协议。
每一个路由需要保存AS内部的路由信息以及AS间的路由信息。
- 使用AS内部的路由信息确定该AS内路由的路径
- 使用AS内部的路由信息以及AS间的路由信息确定该AS外部的路由的路径。
AS间的路由信息由自治系统间路由运行路由算法给出,且自治系统间路由会将该信息广播给该自治系统内的路由。
因特网中的协议
AS内部路由协议RIP
路由信息协议Routing Information Protocol
距离向量路由选择算法 + 特殊设置
特殊设置有:
- 规定最大跳步数为:15。解决无穷计数问题。
- 每相隔30s,邻居之间交换DV,此即为通告。
- 每次通告至多包含25个目的子网的信息。
- 如果180秒没有收到通告→邻居/链路失效
该协议是利用一个称为Routr-d的应用层进程进行管理,通告报文周期性地通过UDP数据报发送
在协议栈中,要确定某个协议属于哪一个协议层次,是依据该协议的功能进行划分,而不是依据该协议的实现。
在路由器中,也存在网络层之上的层次,但是这些层次的存在都是为了网络层之下的层次的功能的完成。所以一般而言,称路由器只完成网络层之下的功能。
AS内部路由选择协议OSPF
开放最短路径优先协议Open Shortest Path First
链路状态路由选择算法:洪范传播链路信息+Dijkstra最低链路开销算法
就是链路状态路由选择算法为基础,而后进行扩展的算法。
OSPF传播链路信息使用OSPF报文,该报文由IP直接承载。
较RIP的优点
- 安全。所有的OSPF报文可以被认证。
- 允许多条相同开销的路径。RIP仅仅可以选择一条。
- 支持多播路由和单播路由。
- 支持对大规模的AS分层。(最重要)


AS间路由选择协议BGP
总体功能
- 通告BGP路由信息,某个子网广播声明“其存在”。
- 确定最好的路由,确定到达某个子网的最优路径。
通告路由信息
通告
- 前缀,表示子网信息
- AS-PATH,包含该信息已经通过的AS序列。
- NEXT-HOP,AS-PATH起始的路由器接口的IP地址。
交互流程
-
内部BGP连接(iBGP),子网内的每两个路由器之间都存在使用179端口的半永久的TCP连接,该连接可以传递BGP报文
-
外部BGP连接(eBGP),某个路由器可能与AS外的某个路由器之间构建使用179端口的半永久的TCP连接,该链接也可以传递BGP报文。




路由信息(从AS1角度):
- 路由器2a的最左侧接口的IP地址,AS2 AS3 ,x
- 路由器3d的最左侧接口的IP地址,AS2 AS3 ,x
路由信息(从AS2角度):
- 路由器3a的最左侧接口的IP地址,AS3 ,x
一次通报之后,显然,一条路径上都已知信息。
确定最好的路由
热土豆路由选择
将分组发送给最近的网关路由器
- 尽可能快地将分组送出当前AS,而不必考虑其AS外部到目的地的余下部分的开销,因而该算法是极其自私的算法。
- 对于相同AS中的两台路由器,对于相同的前缀可能选择两条不同的AS路径。

路由器选择算法
- 选择本地偏好值(额外属性,由网络管理员进行配置)最高的路径。
- 选择AS-PATH最短的路径。
- 选择将分组发送给最近的网关路由器。
- 使用BGP表示符。
本地偏好值可用于阻隔某些路由器之间的流量通路,这与BGP策略有关。

互联网控制报文协议(ICMP)
参考ICMPRFC
作用
完成主机与路由器之间网络层信息的交互
差错报告报文
当出现以下情况,一般而言,会将原报文进行丢弃(特殊情况会在相应段中说明),并向源主机发送特定类型的报文。
Destination Unreachable Message
- 路由器判断该报文不可到达
- 不可分片的报文被分片
- 报文已到达目的主机,但是接受对象不进行接受
Time Exceeded Message
- 报文生命周期接受,例如TTL为0
- 重新装配被分片的报文,由于某些报文丢失,无法进行完成装配
Parameter Problem Message
- 路由器认为某个报文的头部出现问题
Source Quench Message
- 路由器缓存区已满,无法继续接受报文,目的为降低源主机的发送速率,可以认为是拥塞控制
Redirect Message
- 报文到达某个路由器,如果路由器可以判断存在一条更优的报文传输路径,将会发送该报文,同时原报文会被继续传输
网络探寻报文
Echo or Echo Reply Message
- 发送该报文的目的是探测报文是否可达
Timestamp or Timestamp Reply Message
- 发送报文询问时间
具体报文类型编码

特殊情况
- 对ICMP差错报告报文不再发送 ICMP差错报告报文
- 除第1个IP数据报分片外,对所有后续分片均不发送ICMP差错 报告报文
- 对所有多播IP数据报均不发送 ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的IP数据报不发送 ICMP 差错报告报文
ICMP报文的格式

ICMP差错报文

ICMP应用举例
traceroute (Windows 系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器














浙公网安备 33010602011771号