主要说明网络层IP层的基本概念和相关协议,以及协议的工作流程等基本理论知识。
基本概念
- 网络的工作主要就是对IP协议的基本内容。
- 网络层不提供服务质量保证,有运输层来保证。
网络连接设备:
- 物理层:转发器
- 数据链路层:网桥、交换机
- 网络层:路由器
- 网关:网络层
网际协议IP
网际协议IP配套使用三种协议:
- 地址解析协议(ARP)
- 网际控制报文协议(ICMP)
- 网际组管理协议(IGMP)
IP地址
全球范围唯一的32位标识符
分类的IP地址
分为A、B、C、D、E类地址。
- A(8位)、B(16位)、C(24位)类是单播地址,最常用
- D类是多播地址(一对多通信)
- E类是保留地址

不指派的IP

主要是注意全0表示位网络的网络号,全1表示该网络的广播地址。
无分类编址CIDR
/
后的数字来指定网络前缀,以此确定网络号
斜线后面的数字就是地址掩码中1的个数。
- 前缀n =32,即32位IP 地址都是前缀,没有主机号。这其实就是一个IP 地址。这个特殊地址用于主机路由。

同一局域网中主机的网络前缀相同。
划分子网
IP地址与MAC地址
MAC地址成为硬件地址或物理地址。

- IP 地址放在 IP 数据报的首部。
- MAC 地址则放在 MAC 的首部。
- 在网络层和网络层以上使用的是 IP 地址,而数据链路层及以下使用的是 MAC 地址。
- 当IP数据报插入到数据链路层的 MAC 以后,整个的IP数据报就成为 MAC的数据,因而在数据链路层看不见数据报的IP地址。

-
在IP层抽象的互联网上只能看到IP数据报,在数据包传送过程中IP的源地址和目的地址始终不变。
-
路由器只根据目的站的IP地址进行转发。
-
在不同网络上传送时,其MAC首部中的源地址和目的地址要发生变化。
如图所示,开始在H到间传送时,MAC首部中写的是从MAC地址MAC1发送到MAC3地址。路由器R1收到此MAC后,在数据链路层,要剥去原来的MAC的首部和尾部。在转发时,在数据链路层,要重新添加上MAC的首部和尾部。这时首部中的源地址和目的地址分别变成为MAC4和MAC5。
地址解析协议ARP
地址解析协议ARP主要是为了解决主机通过IP地址找到相应的MAC地址。
在主机的ARP高速缓冲存放从IP地址到MAC地址的映射表,映射表动态更新。
工作流程
主机A要向本局域网上的某台主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址。如有,就在ARP高速缓存中查出其对应的MAC地址,再把这个MAC地址写入MAC,然后通过局域网把该MAC发往此MAC地址。
如果没有则执行以下步骤:
- ARP进程在本局域网上广播发送一个ARP请求分组
- 在本局域网上的所有主机上运行的ARP进程都收到此ARP请求分组
- 主机B的IP地址与ARP请求分组中要查询的IP地址一致,就收下这个ARP请求分组,并向主机A发送ARP响应分组,同时在这个ARP响应分组中写入自己的MAC地址
- 其余所有主机的IP地址都与ARP请求分组中要查询的P地址不一致,因此都不理睬这个ARP请求分组。
- 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到MAC地址的映射。

- 发送方是主机(如H1),要把IP数据报发送到同一个网络上的另一台主机(如H2)。这时H1发送ARP请求分组(在网络N1上广播),找到目的主机H2的MAC地址。
- 发送方是主机(如H1),要把IP数据报发送到另一个网络上的一台主机(如 H3或H4)。这时H1发送ARP请求分组(在网络N1上广播),找到上的一个路由器R1的MAC地址。
- 发送方是路由器(如R1,要把IP数据报转发到与连接在同一个网络N2上的主机(如H3)。这时R发送ARP请求分组(在N2上广播),找到目的主机H3的MAC地址。
- 发送方是路由器(如R1),要把IP数据报转发到网络N3的一台主机(如H4),H4与R1不是连接在同一个网络上的。这时R1发送ARP请求分组(在N2上广播),找到连接在N3上的一个路由器R2的MAC地址。
IP数据报格式

首部宽度32位(4字节),IP数据报由首部和数据部分两部分组成。
-
首部长度:占4位,能够表示最大十进制为15,表示单位是32位字长(4字节),也就是说首部最长为$15\times4=60$个字节。
IP首部固定是20个字节,也就是前四排,第五排是可选字段,通过首部长度可以算出可选字段的长度。
首部长度长度单位是32位字长(4字节),所以首部长度一定是4字节整数倍,不足用填充字段补充。
-
总长度:指整个IP数据报的长度,通过和首部长度计算出数据部分的长度。
IP数据报长,能够提高传输效率。数据报短,路由转发速度快,各有好处。
但以太网规定最大的传输单元MTU是1500字节,如果IP数据报过长,需要对数据报进行分片处理。
-
标志:占3位,只有两位有意义。
最低为MF,MF=1 表示后面“还有分片”的数据报;MF=0 表示这已是若干数据报片的最后一个。
中间是DF,DF=0 允许分片。
-
片偏移:占13位,指在原分组中的相对位置,该片从何处开始。片偏移以8个字节为偏移单位。除最后一个数据报片外,其他每个分片的长度一定是 8 字节(64 位)的整数倍。
-
生存时间位:(8位,TTL(Time To Live))每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报。
-
首部检验和:占16位,只检验数据报的首部,但不包括数据部分。
IP分组转发
- 从收到的分组的首部提取目的主机的IP地址D(即目的地址)。
- 若查找到有特定主机路由(目的地址为D),就按照这条路由的下一跳转发分组,否则从转发表中下一行(也就是前缀最长的一行)开始检查。
- 把这一行的子网掩码与目的地址D按位进行AND运算,若运算结果与本行的前缀匹配,则查找结束,按照“下一跳”所指出的进行处理(或直接交付本网络上的目的主机,或通过指定接口发送到下一跳路由器)。
- 若为没有对应的网络,则使用默认路由,则按照指明的接口,把分组传送到指明的默认路由器,否则,报告转发分组出错。
核心就是将目的地址和子网掩码进行AND运算,判断是否是对应的网路前缀,如果是则发送到指定的下一跳。
在和掩码进行AND运算时,可能有多个转发结果,此时需要采用最长前缀匹配的原则进行跳转。
网际控制报文协议ICMP

ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告。
ICMP是IP层的协议,作为数据部分封装到IP数据报的数据部分中。
ICMP差错报告报文

把收到的需要进行差错报告的 IP 数据报的首部和数据字段的前8个字节提取出来,作为 ICMP 报文的数据字段。再加上相应的ICMP 差错报告报文的前8个字节,就构成了ICMP 差错报告报文。
提取收到的数据报的数据字段前 8 个字节是为了得到运输层的端口号(对于 TCP和UDP)以及运输层报文的发送序号。
ICMP差错报告报文共有4种:
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文。
- 时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题:当路由器或目的主机收到的数据报的首部中有的字段的值不正确时就丢弃该数据报,并向源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(找到更好的路由转发)。
不发送ICMP报文的几种情况:
- 对ICMP差错报告报文,不再发送ICMP差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片,都不发送ICMP 差错报告报文。
- 对具有多播地址的数据报,都不发送ICMP 差错报告报文。
- 对具有特殊地址(如127.0.0.0 或0.0.0.0)的数据报,不发送ICMP 差错报告报文。
ICMP询问报文
分为两类:
- 回送请求或回送回答:主机发出的询问。收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。这
种询问报文用来测试目的站是否可达以及了解其有关状态。 - 时间戳请求或时间戳回答:在 ICMP 时间戳请求报文发出后,就能够收到对方响应的 ICMP 时间戳回答报文。利用在报文中记录的时间戳(如报文的发送时间和接收时间),发送方计算出当前网络的往返时延。
路由选择协议
内部网关协议
RIP协议
基于距离向量的路由选择协议,路由器都要维护从它自己到其他每一个目的网络的距离记录。路由器到直接连接的网络的距离定义为 1,从主机到非直接连接的网络的距离定义为所经过的路由器数加1。RIP 允许一条路径最多只能包含 15个网络。因此“距离”等于16时即相当于不可达,只适用于小型互联网。RIP 不能在两个网络之间同时使用多条路由。RIP 选择一条具有最少网络数的路由(即最短路由)。
特点
- 仅和相邻路由器交换信息,不相邻的路由器不交换信息。
- 路由器交换的信息是当前本路由器所知道的全部信息,到本自治系统中所有网络的(最短)距离,以及到每个网络应经过的下一跳路由器。
- 按固定的时间间隔交换路由信息。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。主机虽然也运行协议 RIP,但只被动地接收路由器发来的路由信息。
RIP协议就是路由器和自己相邻的路由器交换路由表信息,更新保存到本自治网络中所有目的网络的最短距离的路由转发下一跳的位置。
距离向量算法
对每一个相邻路由器发送过来的 RIP 报文,执行以下步骤:
- 对地址为X的相邻路由器发来的 RIP 报文,先修改此报文中的所有项目:把“下一跳”字段中的地址都改为X,并把所有的“距离”字段的值加1。项目有三个关键数据,即:到目的网络 Net,距离是d,下一跳路由器是X。
- 对修改后的RIP 报文中的每一个项目,进行以下步骤:
- 若原来的路由表中没有目的网络 Net,则把该项目添加到路由表中。
- 若原来的路由表有目的网络 Net,则检测下一条是否是 X,如果是则更新为最新的记录,如果不是,则判断距离,更新为距离小的记录,距离相等则不更新。
- 若三分钟没有收到相邻路由器的更新路由表,则将此相邻路由器即为不可达的路由器,距离设置为16。
协议RIP一特点:好消息传播快、坏消息传播慢。
OSPF协议
开放最短路径优先,使用了最短路径算法 SPF,主要特征是使用链路状态协议。
特点
- 路由器通过所有输出端口向所有相邻路由器发送信息,每个相邻的路由器又将此信息发送到所有的相邻路由器(不在发送刚刚发来消息的那个路由器),采用的泛洪法。
- 发送消息是本路由器相邻的所有路由器的链路状态,(链路状态是说明本路由器和那些路由器相邻,以及该链路的“度量”)。
- 当链路状态发生变化或每隔一段时间(30分钟),路由器向所有路由器使用泛洪法发送链路状态信息。
各路由器都能建立一个链路状态数据库(全网的拓扑结构图),OSPF协议更新收敛快
外部网关协议
BG 是不同自治系统的路由器之间交换路由信息的协议。
-
每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” 。
-
一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。
BGP发言者之间交换信息。