4.网络层
[TOC]
概述
功能
网络层,将分组从一台发送主机移动到一台接收主机,网络层需要提供两个功能
- 转发
将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作 - 路由选择
指网络范围的过程,以决定分组从源到目的地所采取的端到端路径。
分类
- 虚电路网络(Virtual-Circuit,VC)
仅在网络层提供连接服务的计算机网络,如ATM网络、帧中继 - 数据报网络(datagram network)
仅在网络层提供无连接服务的计算机网络
因特网的网络层提供尽力而为服务(best-effort service)
其他的网络体系结构模型(例如ATM(Asynchronous Transfer Mode,异步传输)网络、帧中继等)可能提供确保交付、确保最小带宽等特定服务。
网际协议(IP)
IPv4
可参考 维基百科 IPv4
报文格式
首部字段含义
一个IP数据报如果没有选项首部总长20字节,如果承载一个TCP报文段,则每个(无分片的)数据报共承载40字节首部(20字节IP首部、20字节TCP首部)
IP数据报分片
为什么要分片?
一个链路层帧能承载的最大数据量叫做最大传送单元(MTU ,Maximum Transmissioon Unit)
不同的链路层帧的大小不同,以太网帧承载不超过1500字节的数据,在某些广域网链路的帧可承载不超过576字节的数据。当IP数据报比链路层协议的MTU大时,就需要分片。
如何分片和重组?
只有IPv4支持分片,IPv6不支持分片(如果IPv6数据报太大不能转发到链路上,则路由器只需丢掉该数据报,并向发送方发送“分组太大”的ICMP差错报文)
分片是可以在路由器中执行的,重组放在路由器会影响性能,所以重组放在端系统中完成,目的主机通过IP数据报首部的标识、标志和片偏移字段进行组装。
详细的组装过程不赘述,大致了解即可。
编址
容量
IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2^32)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。
点分十进制记法
IPv4地址可被写作任何表示一个32位整数值的形式,但为了方便人类阅读和分析,它通常被写作点分十进制的形式,即四个字节被分开用十进制写出,中间用点分隔。 例如,192.0.2.235
。此外,在点分格式中,每个字节都可用任意的进制表达。如,192.0x00.0002.235
是一种合法(但不常用)的表示。
IPv6的地址表示方法
IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示。例如:2001:0db8:86a3:08d3:1319:8a2e:0370:7344
是一个合法的IPv6地址。类似于IPv4的点分十进制,同样也存在点分十六进制的写法,将8组4位十六进制地址的冒号去除后,每位以点号“.”分组,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344
则记为2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4
,其倒序写法用于ip6.arpa子域名记录IPv6地址与域名的映射。
省略规则
- 每项数字前导的0可以省略,省略后前导数字仍是0则继续
2001:DB8:2de:0:0:0:0:e13
- 可以用双冒号“::”表示一组0或多组连续的0,但只能出现一次
2001:0DB8:0::0:1428:57ab
分类编址
IP地址的网络部分被限制为长度为8、16或24比特,地址的高位字节被重定义为网络的类(Class)。这个系统定义了五个类别:A、B、C、D和E。A、B和C类有不同的网络类别长度,剩余的部分被用来识别网络内的主机,这就意味着每个网络类别有着不同的给主机编址的能力。D类被用于多播地址,E类被留作将来使用。
但是C类(/24)子网仅能容纳 2^8 - 2 = 254台主机,B(/16)类可支持65534台主机又太大了。这样会导致地址空间不够用或极度浪费。
地址分类
可参考维基百科 IPv4中对地址分类的表述。
本地回环地址
localhost是一个在计算机网络中用于表示“此计算机”的主机名。它被用于通过本地环回网络接口,来访问本机运行的服务,并且将会绕过任何物理网络接口硬件。
公有地址、私有地址
- 公有地址
- A、B、C三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段,作为私有地址,供组织机构内部使用。
- 私有地址
-
A类地址:10.0.0.0--10.255.255.255
B类地址:172.16.0.0--172.31.255.255
C类地址:192.168.0.0--192.168.255.255 - 常见的局域网由于容量小,一般选择C类的192.168.0.0作为地址段使用,一些大型企业就需要使用B类甚至A类地址段作为内部网络的地址段。
-
CIDR
无类别域间路由选择,Classless Interdomain Routing
a.b.c.d/x
CIDR创建的分层架构由互联网号码分配局(IANA)和区域互联网注册管理机构(RIR)进行管理,每个RIR均维护着一个公共的WHOIS数据库,以此提供IP地址分配的详情。
DHCP
作用
动态主机配置协议, Dynamic Host Configuration
DHCP允许主机自动获取(被分配)一个IP地址,获取其他信息,例如它的子网掩码、第一跳路由器地址(默认网关)、本地DNS服务器地址。
网络管理员能够配置DHCP,以使某给定主机每次和网络连接时能得到一个相同的IP地址,或者某主机将被分配临时的IP地址。
请求过程
- DHCP请求步骤中,会从一个或多个服务器中提供中选择一个,构建请求报文,DHCP服务器可能有多个
NAT
网路地址转换,Network Address Translation
可参考维基百科NAT
作用
一种解决IPv4地址短缺以避免保留IP地址困难的方案。流行在网络上的一种看法认为,IPv6的广泛采用将使得NAT不再需要,因为NAT只是一个处理IPv4的地址空间不足的方法
可以这样理解,假设分配的IP地址已经并且只能满足256个主机使用,假设此时有更多的主机接入,那么没有NAT的话只能重新申请IP地址保证能容纳足够的主机,然是使用NAT的话就不需要,内部维护一个NAT转换表进行内部转发。
如何工作
NAT转换表(NAT translation table)
假设路由器地址 138.76.29.7
ICMP
互联网控制消息协议(Internet Control Message Protocol)
可参考维基百科ICMP
作用
报文
IPv6
可参考 维基百科 IPv6
报文格式
首部字段含义
与IPv4的不同
IPv4有单播地址、多播地址,IPv6多一个任播地址。
转换机制
- 双堆栈
- 双堆栈(Dual IP stack implementation)是将IPv6视为一种IPv4的延伸,以共享代码的方式去实现网络堆栈,其可以同时支持IPv4和IPv6,如此是相对较为容易的。
- 隧道
- 为了连通IPv6互联网,一个孤立主机或网络需要使用现存IPv4的基础设施来携带IPv6数据包。这可由将IPv6数据包装入IPv4数据包的隧道协议来完成,实际上就是将IPv4当成IPv6的链接层。
路由器
工作原理
- 1.输入端口
- 将输入的物理链路和路由器连接,实现物理层功能
- 2.输出端口
- 3.交换结构
- 路由器内部结构,将输入端口和输出端口连接
- 经内存交换
- 最简单、最早的路由器是传统的计算机
- 经总线交换
- 经互联网络交换
- 4.路由选择处理器
- 执行路由选择协议、维护路由选择表以及连接的链路状态信息
如果路由器输出队列缓存存在拥堵,则对缓存进行管理的策略称为 主动队列管理(AQM,Active Queue Management)
随机早期检测(RED,Random Early Detection)算法是一种AQM算法。
路由选择算法
分类-链路状态算法与距离向量算法
广义上的一种分类
- 全局式路由选择算法
- 用完成的全局性的网络知识计算从源到目的地的最低费用路径,以所有结点之间的连通性和费用为输入
- 例如:链路状态算法(Link State,LS)(Dijkstra算法)
- 分散式路由选择算法
- 以迭代、分布式的方式计算最低费用路径,没有结点拥有所有网络链路费用的完整信息,而每个结点仅有与其直接相连链路的费用信息。
- 例如:距离向量算法(Distance-Vector,DV)
广义上的另一种分类
- 静态路由选择算法
- 人工配置
- 动态路由选择算法
- 当网络负载或拓扑发生变化时改变路由选择路径
链路状态算法 - Dijkstra算法
距离向量算法
每个结点需要维护 路由选择表,基于Bellman-Ford算法
对比
暂时忽略,详见 4.5.2.3
自治系统
Autonomous System, AS,自治系统内部运行的路由选择算法叫做自治系统内部路由选择协议(内部网关协议 IGP)。AS内部负责向在本AS之外的目的地转发分组的路由器被称为网关路由器。还有自治系统间路由选择协议(边界网关协议 BGP)。
路由选择协议
内部网关协议:RIP
Routing Information Protocol 路由选择信息协议,基于Bellman-Ford算法,是一种距离向量协议,每隔30秒会与相邻的路由器交换子消息,以动态的创建路由表。
可参考维基百科
内部网关协议:OSPF
Open Shortest Path First 开放最短路优先
可参考维基百科
OSPF是对链路状态路由协议的一种实现,运作于自治系统内部。它采用 Dijkstra算法 来计算最短路径树。
边界网关协议: BGP
Border Gateway Protocol
它通过维护IP路由表或‘前缀’表 (CDIR化的前缀) 来实现自治系统(AS)之间的可达性,属于矢量路由协议。
可参考 维基百科
广播和多播路由选择
广播路由选择
网络层提供一种源节点到网络中的所有其他结点交付分组
N次单播
-
无控制洪泛
-
受控洪泛
- 反向路径转发 RPF
-
生成树广播
多播路由选择
单个源节点到网络中的其他结点的一份子集交付分组
- IGMP
- DVMRP