计算机网络(三)——网络层

IP地址与物理地址的关系;传统分类的IP地址(包括子网掩码)和无分类域间路由选择CIDR;
ICMP和IGMP;路由选择协议(RIP、OSPF,EGP)的工作原理;网际协议IPv6。
多个网络通过路由器互联成互联网。
网络层传输的数据单位是分组(数据报,IP数据报)(packet),中继为路由器。

路由器的构成

网络层的主要工作是:路由器的分组转发。互联网的核心是网际协议IP。
当主机A要向主机B发送数据报时,先检查B是否与A在同一网络上,如果是,就直接交付给B,而不需要通过路由器;如果不是,就间接交付:需要某个路由按照路由转发表指出的路由将数据报发送给下一个路由器。路由器至少有两个不同的IP地址。
典型的路由器结构

路由器的结构可分为路由选择部分和分组转发部分
1) 路由选择部分
控制部分,核心是路由选择处理机。根据所选择的路由选择协议构造路由转发表(forwarding table,路由表、转发表不特定区分),同时定期和相邻路由器交换路由信息;路由处理机从分组首部提取目的地址,查找路由表。
2) 分组转发部分
根据路由转发表对分组进行处理,将输入端口进入的分组从一个合适的输出端口转发出去。输入端口的查找转发是重要功能。
分组在路由器的输入端口和输出端口都可能在队列中排队等待。若分组处理的速度赶不上分组进入队列的速度,队列满产生溢出,发生分组丢弃。

路由转发分组的步骤

IP地址指出了连接到某个网络的某个主机,路由表中的信息为目的网络地址、下一跳地址(没有划分子网的情况下)。
1) 按所要找到目的IP地址的net-id把目的网络找到;
2) 分组到达网络后按host-id直接将数据交付给目的主机。

因特网的网际IP协议

与IP协议配套的还有ARP(地址解析协议,address resolution protocol)、RARP(reverse address resolution protocol,逆地址解析协议)、ICMP(因特网控制报文协议,Internet control message protocol)、IGMP(因特网组管理协议,Internet group management protocol)。TCP/IP体系中的网络层常被称为网际层(internet layer),或IP层。

它们与IP协议的关系:IP协议经常要使用ARP和RARP,而ICMP和IGMP它们要使用IP协议。
ARP:解决同一局域网上的主机或路由器的IP地址与物理地址的映射;
RARP:根据物理地址获取IP地址,这种主机一般是无盘工作站。
ICMP:它作为IP数据报的数据,提高IP数据报交付成功的机会,允许主机或路由器报告差错情况和提供有关异常情况的报告。
IGMP:用于帮助一个多播路由器识别加入到多播组的成员主机。
网际协议IP及其配套协议

IP地址(32bit)的编址

1) 分类的IP地址;
各类网络的差异很大,有的网络的主机多,有的少,分类可以更好的满足不同用户的需求。使用点分十进制记法(dotted decimal notation),当某个单位申请到了一个IP地址,实际上只是申请到了一个net-id,具体的host-id需要自行分配,只需要做到该范围内无重复主机即可;
IP地址中的网络号和主机号
IP地址及私有地址

D类是多播地址,E类留给今后使用。
常用的A、B、C类地址:
A类:net-id一个字节,net-id全为0的IP地址是保留地址,表示本网络;net-id为127(01111111)是保留地址,作为本地软件环回测试本主机用。host-id全0(127.0.0.0)表示本主机所连接的单个网络地址;host-id全1(127.255.255.255)表示该网络上的所有主机。A类地址占整个IP地址的50%。
B类net-id两个字节,占整个IP地址的25%。
C类net-id三个字节,占整个IP地址的12.5%。

一般不使用的特殊IP地址:
一般不使用的特殊IP地址
2) 划分子网(subnetting);
(1) 划分子网的思路
划分子网是单位内部的事,对外仍表现为没有划分子网的网络;
将两级IP地址划分为三级IP地址,从host-id中借用若干比特作为子网号subnet-id:IP地址::=网络号,子网号,主机号;
凡是从其它单位发送给本单位的IP数据报,仍然是根据net-id找到本单位的路由,但路由器在接收到IP数据报后,再按net-id和subnet-id找到目的子网,最后将IP数据报交付给目的主机。
(2) 子网掩码(subnet mask)
上述是所有子网上的主机与外界通信都必须经过路由器,比较低效。如何让主机直接通过本子网上的路由与外界通信?
IP地址的各字段及其子网掩码
如上图,子网掩码中的1对应net-id和subnet-id,0对应host-id。
将IP地址与子网掩码相与,得到子网地址(即将IP地址的host-id置为0)。
由于因特网规定所有网络都必须有一个子网掩码,所以对没有划分子网的网络,使用默认子网掩码(即net-id全为1,host-id全为0)。A类地址的默认子网掩码是255.0.0.0;B类地址的默认子网掩码是255.255.0.0;C类地址的默认子网掩码是255.255.255.0。
若路由器连接在两个网络上,则应该有两个子网掩码。
例:对B类地址,若子网掩码255.255.192.0,子网比特号为2,则子网数22-2=2,主机数2^(6+8)=16382。
无分类域间路由CIDR(Classless Inter-Domain Routing):允许子网号全为1或全为0。
(3) 使用子网掩码的分组转发
首先注意,数据报首部只有源地址和目标地址,并没有子网掩码的信息。
路由表中的信息为:目的网络地址、子网掩码、下一跳地址
划分子网后分组转发举例
a. 收到数据报提取首部的目的IP地址;
b. 主机先判断是直接交付还是间接交付
主机A将目标IP地址与自己的子网掩码相与,若结果等于A的网络地址,则说明目的主机与A在同一个子网中,可以直接交付;
若不在同一网络,则应当间接交付,将分组交给本子网上的一个路由器进行转发。
c. 路由器收到分组如何查找转发表
对路由表,逐行比较网络地址是否与目的IP地址匹配。将第一行的子网掩码与目的IP地址相与,结果是目的IP,则匹配成功。
若路由表中有默认路由,则将数据报发送给路由表中指定的默认路由器。
d. 否则报告转发分组出错。
(4) 无分类域间路由(CIDR,classless inter-domain routering,即无分类编址)
a. CIDR特点
消除了传统A、B、C类地址以及划分子网的概念,使用各种长度的网络前缀(network-prefix)来代替分类地址中的网络号和子网号:IP地址::=网络前缀+主机号。在IP地址后面加斜线“/”表示网络前缀所占的比特数。如128.14.46.34/20表示网络前缀为20 bit,后面12 bit表示主机号。
CIDR将网络前缀相同的连续IP地址组成CIDR地址块,由地址块的起始位置和地址块的地址数来定义。如128.14.32.0/20表示网络前缀20 bit,主机号12 bit,所以地址数为212。
一个CIDR块可以表示很多地址,因此路由表中可以利用CIDR块来查找目标网络,这种地址聚合叫路由聚合(router aggregation),也叫构成超网(suppernetting)。
b. 最长前缀匹配(longest-prefix matching)
路由表中的选项应为:网络前缀,下一跳地址。缩短了路由表中的项目数。但这样匹配到的结果可能不止一个,应该从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,地址块就越小,路由就越具体。
为了进行有效的查找,利用唯一前缀(unique prefix)构造二叉线索(binary trie)。Trie (prefix tree) 实现 (Java)

ARP和RARP协议

IP地址不能直接用来通信,因为IP地址只是主机在抽象网络上的地址,将网络层中的数据报传给数据链路层,变成MAC帧才能发送到实际网络上。
ARP是解决同一局域网上主机或路由器IP地址和MAC地址映射的问题。

在网络层中,IP地址放在IP数据报的首部 -> IP数据报被封装在MAC帧中 -> 在数据链路层,MAC地址放在MAC帧的首部。
每个主机都有一个ARP高速缓存(ARP cache),里面有所有的局域网上的各主机和路由器的IP地址到硬件地址的映射表。有生存时间。
一个局域网内若在A中查不到主机B的IP地址,可能是主机B刚入网,或主机A刚加电,其高速缓存区还是空的。它将自动运行ARP,查找B的硬件地址。

IP数据报的格式

在TCP/IP标准中,各种数据格式常以32bit(4字节)为单位描述。IP是无连接服务的。
数据报的总长度不能超过链路层协议的MTU(最大传输单元)值,若过常则需要分片(片偏移字段,以8字节为偏移单位)。
IP数据报的格式
总长度字段为16 bit,因此数据报的最大长度为216-1=65535字节(64 KB)。
协议字段:占8 bit,指出数据报携带的是何种协议,以便使目的主机的IP层知道应该将数据部分上交给哪个处理过程。在IP数据报协议字段中,TCP的协议号为6,而UDP的协议号为17。
IP数据报常用格式和相应的协议字段
首部检验和字段:只校验数据报首部,不包括数据部分。为了减小计算检验的工作量,不使用CRC校验,用更简单的方法:
在发送端:将IP数据报分成很多16 bit的序列,将检验和字段置0。用反码算术运算将所有16 bit相加,将和的反码写入检验和字段。
接收端:将数据报首部的所有16 bit再反码相加一次,将和取反码,即得出接收端检验和的结果,为0。

IP地址(32 bit)与硬件地址(48 bit)的区别

硬件地址由于已经固化在网卡上,因此常将硬件地址称为物理地址。因局域网中的MAC帧中的源地址和目的地址都是硬件地址,因此硬件地址又被称为MAC地址。
IP地址与硬件地址的区别
IP地址是网络层和以上各层使用的地址;而物理地址是数据链路层和物理层使用的地址。
1)IP数据报经过路由器在不同的网络间转发,它的首部始终存的只有源地址IP和目标地址IP。路由器只根据目标地址IP进行路由选择。
2)MAC帧在不同的网络上传输时,源地址和目标地址要发生变化。这是由于MAC帧首部存放的是硬件地址,当从主机到路由器,MAC帧首部存放的是源硬件地址和目标硬件地址,当路由器接收到此MAC帧后,转发时需要改变MAC帧首部的源硬件地址和目标硬件地址。

主机或路由是怎么知道当前MAC帧的首部应当放入什么样的硬件地址?使用ARP解决同一局域网中主机或路由器的IP地址和硬件地址的映射问题。而且这种操作是自动的,不需要我们插手。
为什么不直接使用硬件地址呢?因为各种网络使用不同的硬件地址,相互通行需要进行非常复杂的硬件地址转换,一旦主机或路由器的网卡坏掉了,它们就不能知道对方的硬件地址;而连接到因特网的主机都使用统一的IP地址,它是独立于主机或路由器的硬件地址的。

ICMP(因特网控制报文协议)

为了提高因特网报文交付成功的机会,允许主机或路由报告差错和提供有关异常的报告,网际层使用了ICMP。
1) ICMP报文有两种:ICMP差错报告报文和ICMP询问报文。
典型字段的值与ICMP报文类型的关系
(1)ICMP差错报文共有5种
a. 终点不可达;
b. 源站抑制;(流量控制)当路由器或目的主机因为拥塞而丢弃数据报
c. 时间超过;
d. 参数问题;
e. 改变路由(重定向)。一开始一般在主机中路由表中设置一个默认路由器的IP地址,不管数据报要发送到哪个IP地址,都先将数据报传到网络上这个默认路由器。如果默认路由器发现发送到某个目的地址的数据报不是最佳路径,则通过改变路由报文告诉主机,并在主机路由表中增加一项:到某某的目的地址应该经过路由器R而不是默认路由器。
ICMP差错报告报文
ICMP差错报告报文的组成:将收到的需要进行抄错报告的IP数据报的首部和前8个字节(是为了得到传输层的端口号(对TCP和UDP)以及传输层报文的发送序列(对TCP))提取出来,作为ICMP报文的数据部分;再加上相应的ICMP差错报文的前8个字节;最后加上IP数据报首部。
ICMP差错报文作为IP数据报的数据部分,加上首部,构成ICMP报文。

(2)ICMP询问报文共有4种
a. 回送请求和回答;这种询问报文用来测试目的站是否可达以及了解其有关状态。如应用层的PING(packet Internet groper)用来测试两个主机之间的联通性,PING是应用层直接使用网络层ICMP的一个例子。
b. 时间戳请求和回答;用来进行时钟同步和时间测量。
c. 掩码地址请求和回答;向子网掩码服务器得到某个接口的地址掩码。
d. 路由询问和通告。了解本网络上的路由器是否正常工作。

因特网组管理协议IGMP

IP多播(multicast):主机发送一个数据报,在路由器处复制成多份。能够运行多播协议的路由器叫多播路由器(multicast router)。IP多播的特点:IP使用D类地址支持多播,只能用于目的地址,不能用于源地址。
IGMP是在多播环境下使用的网际层协议。用于帮助一个多播路由器识别加入到多播组的成员主机。
隧道技术:当多播数据报在传输过程中遇到不运行多播软件的路由器或网络时,需要将多播数据报再次封装,使之成为向单一目的站发送的单播(unicast)数据报。

因特网路由选择协议

使用动态的(自适应的)、分层次的路由选择。将互联网划分为很多小的自治系统(autonomous system,AS),自治系统有权决定在本系统内采用何种路由协议。
可将因特网的路由选择协议分为:
1) 内部网关协议(IGP,interior gateway protocol)
内部网关协议是在一个自治系统中将一个数据报如何有效地从源站传送到目的站。RIP和OSPF都是分布式路由选择协议,它们共同的特点是每一个路由器都要不断地和其它路由器交换路由信息。
(1) 路由信息协议(RIP,routing information protocol)
a. RIP是基于距离向量的路由选择协议。不断和相邻路由器交换路由信息更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(跳数最少)(最终路由表中搜集到所有网络的最短跳数路由信息)。到某个网络的距离是多少,以及下一跳是哪个路由器。RIP允许一条路径最多15个路由器,16即相当于不可达。
b. 特点:
仅和相邻路由器交换全部路由表;按固定时间交换。
c. 距离向量算法:Bellman-Ford算法(Ford-Fulkerson算法)。设X是A->B最短路径上的一个点,将路径拆成A->X和X->B,则每段路径也分别是A到X和X到B的最短路径。
RIP协议中各路由器中的路由表项目:目的网络,本路由器到该目的网络的最短距离,下一跳路由器。
RIP协议是在网络层转发IP数据报,使用传输层的UDP进行传送。
d. 优缺点:简单,开销小;最多15条,适合小型网络,好消息传播得快,坏消息传播得慢。
(2) 开放最短路径优先(OSPF,open shortest path first)
a. OSPF使用分布式链路状态协议(link state protocol),不像RIP那样基于距离向量协议。
b. 特点(RIP与OSPF的区别):
洪泛法(flooding)交换链路状态信息,向本自治系统的所有路由器发送信息。而RIP只向自己相邻的路由器发送信息;(洪泛法:路由器通过所有输出端口向所有相邻路由器发送信息,而这些相邻路由器又将此信息发送给它们相邻的路由器。)
发送的信息是与本路由器相邻的所有路由器的链路状态,包括度量(时间、费用、时延、带宽等)。而RIP只发送到网络的距离和下一跳路由器。
只有链路状态发生变化时,才用洪泛法向所有路由器发送此信息。而RIP不管网络拓扑是否变化,都定期与相邻路由器交换路由信息。
最终所有路由器都能建立一个链路状态数据库(link-state database),即全网的拓扑结构图RIP直到到所有网络的距离和到下一跳路由器,但却不知道全网拓扑图。
RIP收敛得慢,而OSPF收敛得快。
OSPF用IP数据报传送。而RIP用UDP传送。
c. Dijkstra最短路径算法:计算一个节点到所有其它节点的最短距离。
OSPF只是协议的名字,事实上所有的自治系统内部使用的路由协议都是要寻找一条最短路径。
为了使OSPF能够用于很大规模的自治系统(AS),将AS再划分为小的区域(area)。为了使每一个区域都能和其它区域进行通信,OSPF使用层次结构的区域划分。主干区域(backbone area)0.0.0.0,主干区域内的路由器叫主干路由器,其它区域的为区域边界路由器(area border router)。
d. OSPF有5种分组类型
OSPF基本操作

类型1,问候分组:发现和维持邻站可达性;
类型2,数据库描述分组:向邻站给出链路状态数据库中所有项目的摘要信息;
类型3,链路状态请求
类型4,链路状态更新
类型5,链路状态确认
可以利用有向图表示该数据库链路状态信息。OSPF规定网络到路由器的代价为0。主机不运行OSPF协议。找出以某个路由器为根的最短路径树(Dijkstra算法)。
2) 外部网关协议(EGP, external gateway protocol),或边界网关协议(external gateway protocol)
外部网关协议是不同的自治系统的路由器之间交换路由器信息的一种协议。自治系统间找最佳路由是不可能的,最可能交换可达性。
a. BGP使用路径向量(path vector)路由选择协议。它力求找到一条能够到达目的网络且比较好的路径。
b. 特点:
每一个BGP边界路由器(自治系统的发言人)除了需要运行BGP协议外,还需要运行自治系统内的内部网关协议,如RIP或OSPF协议。
BGP开始时与邻站交换路由信息,以后只在发生变化时更新。
BGP解决了RIP坏消息传播得慢的问题。当发生故障,BGP发言人可以从不止一个邻站获取路由信息,因而可以很快选出新路由。而RIP不能指出哪些邻站到目的站的路由是独立的。

VPN(虚拟专用网)和NAT(网络地址转换)

出于安全问题,计算机仅使用本机构有效的IP地址(即本地地址),而不用向因特网申请全球唯一的IP地址(即全球地址)。提出了专用地址(private address),只能用于一个机构的内部通信,不能与因特网上的主机进行通信。采用这样的专用IP地址的互连网络叫专用网。
专用地址

专用地址

有时需要不同地点的专用网之间进行通信,可利用因特网来连接分散在各地的本地网络,这样的专用网叫虚拟专用网(VPN,virtual private network)。此时的VPN依然和真实的专用网一样。
为了安全,在内部数据发送到路由器时需要加密,目的网络路由器接收到数据报后解密。网络上的所有路由器都不知道内部数据报的内容,这也体现了隧道技术。
若专用网本地主机已经分配到了IP地址,但又想和因特网上的主机进行通信(而不需要加密),可以在路由器上安装NAT(网络地址转换)软件->NAT路由器。它至少有一个全球IP地址,所有想要与外界通信的本地主机都需要通过NAT路由器将本地地址转换为IP才能和因特网通信,映射内容存在NAT转换表中。

下一代网际协议IPv6(IPng, 128 bit)

解决IPv4即将耗尽的问题:
无分类编址CIDR,使IP地址分配更合理;利用NAT节省全球IP地址;使用更大地址空间的IP协议->IPv6。

IPv4与IPv6首部格式的区别
具有扩展首部的IPv6数据报的形式

IPv6的ICMP叫ICMPv6,并将其报文分为两类:差错报文和提供信息的报文。
ICMPv6差错报文