网络层的功能
互联网在网络层的设计思路是,向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务(不可靠)
如果主机中的进程之间的通信需要是可靠的,那么可以由更高层的传输层来负责
采用这种设计思路的好处是:网络的造价大大降低,运行方式灵活,能够适应多种应用
互联网能够发展到今日的规模,充分证明了当初采用这种设计思想的正确性
异构网络互联
要在全球范围内把数以百万计的网络互联起来,并且能够互相通信,是一项非常复杂的任务,要解决许多问题
用户的需求是多样的,没有一种单一的网络能适应所有用户的求;网络层需要将这些异构的网络实现互联
网络互联:将多个计算机网络,通过一定的方法,用通信处理设备(即中间设备)相互连接起来,构成更大的网络系统
中间设备又称中间系统或中继系统,根据所在的层次,中继系统分为以下 4 种:
- 物理层中继系统:中继器,集线器 Hub
- 数据链路层中继系统:网桥或交换机
- 网络层中继系统:路由器
- 网络层以上的中继系统:网关
物理层或数据链路层的中继系统,把一个网络扩大了,但从网络层的角度看,它仍然是同一个网络,不称之为网络互联
网络互联指用路由器进行网络互联和路由选择,路由器是一台专用计算机,用于在互联网中进行路由选择
注意:由于历史原因,许多有关 TCP/IP 的文献也把网络层的路由器称为网关
TCP/IP 在网络互联上的做法是在网络层(IP 层)采用标准化协议,但相互连接的网络可以是异构的
计算机网络通过一些路由器进行互联,且都使用相同的网际协议 IP,可以把互联后的计算机网络视为一个虚拟 IP 网络

虚拟互联网络就是逻辑互联网络,即虽然物理网络的异构性是存在的,但是通过 IP 就可以在网络层上让它们看起来是一个网络,这种使用 IP 的虚拟互联网络可简称为 IP 网络
虚拟互联网络的好处是:当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互联的具体的网络异构细节
选择题:要求路由器互联的多个局域网的物理层、数据链路层、物理层可以不同,但高层要相同,因为路由器不能处理高层
路由与转发
路由器主要完成两个功能:路由选择:确定转发路径;分组转发:分组到达时所采取的动作
- 路由选择:按照复杂的分布式算法,根据相邻路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由
- 分组转发:指路由器根据转发表将用户的 IP 数据报从合适的端口转发出去
路由表是根据路由选择算法得出的,而转发表是从路由表得出的
转发表的结构使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化
在讨论路由选择的原理时,往往不去区分转发表和路由表,而是笼统地使用路由表一词
拥塞控制
在通信子网中,因出现过量的分组而引起网络性能下降的现象称为拥塞
当路由器速率

判断网络是否进入拥塞状态的方法是,观察网络的吞吐量与网络负载的关系:
- 随着网络负载的增加,网络的吞吐量也增加,但明显小于正常的吞吐量,那么网络就可能已进入轻度拥塞状态
- 吞吐量随着网络负载的增大而下降,那么网络就可能已进入拥塞状态
- 网络的负载继续增大,而网络的吞吐量下降到零,那么网络就可能已进入死锁状态
拥塞控制主要解决的问题是如何获取网络中发生拥塞的信息,从而利用这些信息进行控制
拥塞控制的作用是确保子网能够承载所达到的流量,这是一个全局性的过程,单一地增加资源并不能解决拥塞
流量控制和拥塞控制的区别:
- 流量控制:在发送端和接收端之间的点对点通信量的控制,如抑制发送端发送数据的速率,以便使接收端来得及接收
- 拥塞控制:确保通信子网能够传送待传送的数据,是一个全局性的问题
拥塞控制的方法有两种:
开环控制:事先将有关发生拥塞的因素考虑周到,力求网络在工作时不产生拥塞
一种静态的预防方法,一旦整个系统启动并运行,中途就不再需要修改,做决定时不考虑当前网络的状态
开环控制手段包括确定何时可接收新流量、何时可丢弃分组及丢弃哪些分组,确定何种调度策略等
闭环控制:事先不考虑有关发生拥塞的各种因素,采用监测网络系统去监视,是一种动态的方法
及时检测哪里发生了拥塞,然后将拥塞信息传到合适的地方,以便调整网络系统的运行,并解决出现的问题
路由算法
静态路由与动态路由
路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的
从能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为如下两大类:
静态路由算法,非自适应路由算法:由网络管理员手工配置的路由信息
当发生变化时,网络管理员需要手工去修改路由表中相关的静态路由信息,用于简单的小型网络
优点:简便和开销较小,在拓扑变化不大的小网络中运行效果很好
动态路由算法,自适应路由算法:指路由器上的路由表项是按照一定的算法计算出来的,且会不断更新
优点:改善网络的性能并有助于流量控制;缺点:算法复杂,增加网络的负担
常用的动态路由算法可分为两类:距离-向量路由算法和链路状态路由算法
距离-向量路由算法
距离-向量路由算法中,所有结点都定期地将它们的整个路由选择表传送给所有与之直接相邻的结点
这种路由选择表包含:每条路径的目的地;路径的代价,也称距离
这种算法中,所有结点都必须参与距离向量交换,以保证路由的有效性和一致性,在下列情况更新它们的路由选择表:
- 被通告一条新的路由,该路由在本结点的路由表中不存在,此时本地系统加入这条新的路由
- 被通告一条已有路由,但通告的路由距离更短,则替换原有路由
距离-向量路由算法的实质:迭代计算一条路由中的站段数或延迟时间,从而得到到达一个目标的最短通路
- 第一次交换得到 1 跳的路由信息,第 n 此交换得到 n 跳的路由信息
更新报文的大小与通信子网的结点个数成正比,大的通信子网将导致很大的更新报文,因此适合于小型网络
最常见的距离-向量路由算法是 RIP 算法,它采用跳数作为距离的度量
链路状态路由算法
链路状态路由算法:每个参与该算法的结点都具有完全的网络拓扑信息,它们执行下述两项任务:
- 主动测试所有邻接结点的状态,两个共享一条链接的结点是相邻结点
- 定期地将链路状态传播给所有其他结点;典型的链路状态算法是 OSPF 算法
每个结点都用这种方式从网上所有其他的结点接收包含直接链路状态的路由选择信息
- 每个结点都群发连接的链路状态,因此每个结点都会接受到整个网络的拓扑消息,使用 Dijkstra 计算路由表
一旦链路状态发生变化,结点就对更新的网络图利用 Dijkstra 最短路径算法重新计算路由
链路状态路由算法主要有三个特征:
- 向本自治系统中所有路由器发送信息,这里使用的方法是泛洪法
- 发送的信息是与路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息
- 只有当链路状态发生变化时,路由器才向所有路由器发送此信息
链路状态路由算法的主要优点是:
- 每个路由结点都使用同样的原始状态数据独立地计算路径,而不依赖中间结点的计算
- 链路状态报文不加改变地传播,因此采用该算法易于查找故障
- 当一个结点从所有其他结点接收到报文时,它可以在本地立即计算正确的通路,保证一步汇聚
- 链路状态报文大小只与邻接结点数有关,因此链路状态算法比距离-向量算法有更好的规模可伸展性
距离-向量路由算法与链路状态路由算法的比较:在距离-向量路由算法中,每个结点仅与它的直接邻居交谈;在链路状态路由算法中,每个结点通过广播的方式与所有其他结点交谈;相比之下,距离-向量路由算法有可能遇到路由环路等问题
层次路由
因特网将整个互联网划分为许多较小的自治系统(包含多个局域网),每个自治系统决定本系统内使用的路由选择协议
如果两个自治系统需要通信,那么就需要一种在两个自治系统之间的协议来屏蔽这些差异
因特网把路由选择协议划分为两大类:
- 自治系统内部使用的路由选择协议称为内部网关协议
IGP,也称域内路由选择,具体的协议有 RIP 和 OSPF 等 - 自治系统之间使用的路由选择协议称为外部网关协议
EGP,也称域间路由选择,处理自治系统间的交换,具体的协议有BGP
使用层次路由时,使用 OSPF 把一个自治系统再划分为多个区域,每个路由器都仅知道在本区域内转发的细节
划分区域会令交换信息种类增多,和 OSPF 更复杂,但使区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于规模很大的自治系统中
IPv4
IPv4 分组
IPv4 分组的格式
一个 IP 分组由首部和数据部分组成,首部前一部分的长度固定,共 20B,是所有 IP 分组必须具有的
在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制

IP 首部的部分重要字段含义如下:
版本:指 IP 的版本,目前广泛使用的版本号为 4
首部长度:以
32bit为单位,最大值为60B,常用的首部长度是20B即 101总长度:首部和数据之和的长度,单位为字节,数据报的最大长度为
65535B标识:一个计数器,每产生一个数据报就加 1,并赋值给标识字段(不是序号,分片用的)
标志:
标志字段的最低位为
MF,MF= 1 表示后面还有分片,MF= 0 表示最后一个分片标志字段中间的一位是
DF,只有当DF= 0 时才允许分片片偏移:较长的分组在分片后,某片在原分组中数据部分的相对位置,片偏移以 8 个字节为偏移单位
生存时间 TTL:数据报在网络中可通过的路由器数的最大值,确保分组不会永远在网络中循环
路由器在转发分组前,先把 TTL 减 1,若 TTL 被减为 0,则该分组必须丢弃
协议:指出此分组携带的数据使用何种协议

首部校验和:IP 数据报的首部校验和只校验分组的首部,而不校验数据部分
源地址字段:标识发送方的 IP 地址
目的地址字段:标识接收方的 IP 地址
IP 数据报分片
一个数据链路层数据报能承载的最大数据量称为最大传送单元 MTU
IP 的数据报最终会封装成帧,数据报大于 MTU 时就要分成多份,这就是给数据报分片
为了让接收方可以把拆开的数据报可以合起来,让它们每个都带个 IP 头,形成的小 IP 数据报叫做片
- 创建一个 IP 数据报时,源主机为该数据报加上一个标识号
- 当一个路由器或主机需要将一个数据报分片时,形成的每个数据报都具有原始数据报的标识号
- 目的主机收到来自同一发送主机的一批数据报时,检查数据报的标识号来确定属于同一个原始数据报的片
- 目的主机在对片进行重组时,使用片偏移字段来确定片应放在原始 IP 数据报的哪个位置
如一个长 4000B 的 IP 数据报,首部部分 20B 数据部分 3980B 到达一个路由器,需要转发到一条 MTU 为 1500B 的链路上,假定原始数据报的标识号为 777 那么分成的 3 片如下:

额外:分片时会修改总长度、标志、片偏移字段;如上面第二个的总长度为 1500,标志为 011,片偏移为 185
网络层转发分组的流程
网络层的路由器执行的分组转发算法如下:
从数据报的首部提取目的主机的 IP 地址 D,得出目的网络地址 N
若网络 N 与此路由器直接相连,则直接交付给目的主机 D,这称为路由器的直接交付;否则是间接交付,执行步骤 3
思考:直接交付指目的网络在与路由器直接连接的网络中,不需要转发;间接交付指需要给其他路由器转发
若路由表中有目的地址为 D 的特定主机路由,则交付给路由表中所指明的下一跳路由器;否则,执行步骤 4
若路由表中有到达网络 N 的路由,则交付给路由表指明的下一跳路由器;否则,执行步骤 5
若路由表中有一个默认路由,则交付给路由表中所指明的默认路由器;否则,执行步骤 6
报告转发分组出错
注意:这里拿到的下一条地址用来转换成 MAC 地址进行通信,而且如果使用的是 PPP 协议的话,直接通过对应的端口转发
IPv4 地址与 NAT
IPv4 地址
IP 地址:连接到因特网上的每台主机或路由器的一个 32 比特的唯一标识符,IP 地址又分为 A、B、C、D、E 五类
无论哪类 IP 地址,都由网络号和主机号两部分组成,即 IP 地址 =
网络号标志主机或路由器所连接到的网络,它在整个因特网范围内必须是唯一的
主机号标志该主机或路由器,它在所在的网络内是唯一的

在各类 IP 地址中,有些 IP 地址具有特殊用途,不用做主机的 IP 地址:
主机号全为 0 表示本网络本身,都不能做
主机号全为 1 表示本网络的广播地址,又称直接广播地址,只能做目的地址
网络号全为 0 表示本网络内某个特定主机,只能做源地址
127.0.0.0 保留为环回自检地址,此地址表示任意主机本身,都可以做
目的地址为环回地址的 IP 数据报永远不会出现在任何网络上
32 位全为 0 表示本网络上的本主机,只能做源地址
32 位全为 1 表示整个 TCP/IP 网络的广播地址,又称受限广播地址,只能做目的地址
实际使用时,由于路由器对广播域的隔离,255.255.255.255 等效为本网络的广播地址
常用的三种类别 IP 地址的使用范围如下:

每类地址的网络号不可委派而减 1,用于表示本网络内某个特定的主机;A 类网络因为 127 被占用所以减 2
IP 地址有以下重要特点:
每个 IP 地址都由网络号和主机号两部分组成,是一种分等级的地址结构,分等级的好处是:
- IP 地址管理机构只分配网络号,而主机号由该网络的单位自行分配,方便了 IP 地址的管理
- 路由器仅根据网络号来转发分组,从而减小了路由表所占的存储空间
IP 地址是标志一台主机或路由器和一条链路的接口
一台主机同时连接到两个网络时,该主机就必须同时具有两个不同网络号的 IP 地址,路由器也是一样
用转发器或桥接器连接的若干 LAN 仍然是同一个网络,IP 地址的网络号必须相同,但主机号必须不同
在 IP 地址中,所有分配到网络号的网络都是平等的
同一个局域网上的主机或路由器的 IP 地址中的网络号必须一样;路由器的每个端口都有一个不同网络号的 IP 地址
网络地址转换
网络地址转换 NAT 是指通过将专用网络地址转换为公用地址从而对外隐藏内部管理的 IP 地址
它使得整个专用网只需要一个全球 IP 地址就可以与因特网连通,它隐藏了内部网络结构,降低内部网络受到攻击的风险
划出了部分 IP 地址为私有 IP 地址,私有 IP 地址只用于 LAN,并且允许私有 IP 地址被重用,有效解决 IP 地址不足的问题
私有IP地址网段如下:
- A类:1 个 A 类网段,即 10.0.0.0 ~ 10.255.255.255
- B类:16 个 B 类网段,即 172.16.0.0 ~ 172.31.255.255
- C 类:256 个 C 类网段,即 192.168.0.0 ~ 192.168.255.255
在因特网中的所有路由器,对目的地址是私有地址的数据报一律不进行转发
这种采用私有 IP 地址的互联网络称为专用互联网或本地互联网,私有 IP 地址也称可重用地址
使用 NAT 时需要在专用网连接到因特网的路由器上安装 NAT 软件,NAT 路由器至少有一个有效的外部全球地址
使用本地地址的主机和外界通信时,NAT 路由器使用 NAT 转换表将本地地址转换成全球地址,或将全球地址转换成本地地址
NAT 转换表中存放着 {本地 IP 地址: 端口} 到 {全球 IP 地址: 端口} 的映射,让多个私有 IP 地址映射到同一个全球 IP 地址
注意:普通路由器在转发 IP 数据报时,不改变源 IP 和目的 IP;NAT 路由器在转发 IP 数据报时,一定更换 IP 地址
- 如上图,发送时源 IP 从
192.168.0.x变成138.76.29.7;接受时目的 IP 从138.76.29.7变成192.168.0.x
选择题:NAT 表项需要管理员添加,若主机发送的分组在 NAT 表项中找不到,则不转发丢弃
子网划分与子网掩码、CIDR
子网划分
在 IP 地址中又增加了一个子网号字段,使两级 IP 地址变成了三级 IP 地址,这种做法称为子网划分
子网划分的基本思路如下:
子网划分纯属一个单位内部的事情,单位对外仍然表现为没有划分子网的网络
从主机号借用若干比特作为子网号,三级 IP 地址的结构如下:IP 地址 = {<网络号>, <子网号>, <主机号>}
其他网络根据 IP 数据报的目的网络号,先发送给连接到本单位网络上的路由器
该路由器收到 IP 数据报后,按目的网络号和子网号找到目的子网,把 IP 数据报直接交付给目的主机
注意:
划分子网不改变 IP 地址原来的网络号,因此从一个 IP 地址本身或 IP 数据报的首部,其网络看不出是否进行了子网划分
RFC 950 规定,对分类的 IPv4 地址进行子网划分时,子网号不能为全 1 或全 0
这是因为无法分清 192.168.1.255 是子网的广播还是本网络的广播,所以去掉子网号全 1 全 0 的情况
无类别域间路由 CIDR 消除了 A/B/C 类型网络,就可以使用全 1 和全 0 了,但要注意路由器是否支持 CIDR
不论是分类的 IPv4 地址还是 CIDR,其子网中的主机号为全 0 或全 1 的地址都不能被指派
子网中主机号全 0 的地址为子网的网络号,主机号全 1 的地址为子网的广播地址
选择题:使用变长子网划分,得到的最小子网的可分配 IP 地址数最少
- 变长子网划分:指 0、10、110、111 这样的划分方式
子网掩码
使用子网掩码来表达对原网络中主机号的借位,子网掩码长 32bit 的二进制串,它由一串 1 和跟随的一串 0 组成
其中 1 对应于 IP 地址中的网络号及子网号,而 0 对应于主机号,将 IP 地址和子网掩码逐位与,可得出子网的网络地址
因特网标准规定:所有的网络都必须使用子网掩码,如果一个网络未划分子网,那么就采用默认子网掩码,A、B、C 类地址的默认子网掩码分别为 255.0.0.0、255.255,0.0、255.255.255.0
路由器在相互之间交换路由信息时子网掩码也要告诉对方
在使用子网掩码的情况下:
- 一台主机在设置 IP 地址信息的同时,必须设置子网掩码
- 同属于一个子网的所有主机及路由器的相应端口,必须设置相同的子网掩码
- 路由器的路由表中,所包含信息的主要内容必须有目的网络地址、子网掩码、下一跳地址
使用子网掩码时路由器的分组转发算法如下:
- 从收到的分组的首部提取目的 IP 地址,记为 D
- 用各相邻的网络的子网掩码和 D 逐位相与,若与其网络地址匹配,则将分组直接交付,否则间接交付,执行 3
- 若路由表中有目的地址为 D 的特定主机路由,则转发给路由表中所指明的下一跳路由器,否则,执行 4
- 对路由表中的每一行的子网掩码和 D 逐位相与,若结果与该行的网络地址匹配,则转发给下一跳路由器;否则,执行 5
- 若路由表中有一个默认路由,则转发给默认路由器;否则,执行 6
- 报告转发分组出错
无分类域间路由选择 CIDR
无分类域间路由选择是一种消除传统 A、B、C 类网络划分,可以在软件的支持下实现超网构造的一种地址的划分方法
它可以大幅度提高 IP 地址空间的利用率,减小路由器的路由表大小,提高路由转发能力
CIDR 的主要特点如下:
消除了传统 A、B、C 类地址及划分子网的概念,因而可以更有效地分配 IPv4 的地址空间
CIDR 使用网络前缀的概念代替子网络的概念,IP 地址的无分类两级编址为:IP =
CIDR 还使用斜线记法,即 IP 地址/网络前缀所占比特数,网络前缀所占比特数是子网掩码中连续 1 的个数
对于 128.14.32.5/20 这个地址,通过逐位相与的方法得到该地址的网络前缀:
分配到一个 CIDR 地址块的组织,仍可以在本组织内根据需要再划分出一些子网
如某组织分配到地址块/20,再继续划分为 8 个子网后,每个子网的网络前缀是 23 位,全 0 和全 1 的主机地址不使用
将网络前缀都相同的连续 IP 地址组成 CIDR 地址块,这种地址的聚合称为路由聚合或构成超网
路由聚合让路由表的一个项目表示多个传统分类地址的路由,减少路由器之间的路由选择信息的交换,提高网络性能
如下图:R1 有到网络 1、2 的两个路由表项,下一跳都是 R2,所以使用路由聚合合并位一个路由表项 206.1.0.0/16

CIDR 地址块中的地址数一定是 2 的整数次幂,实际可指派的地址数通常为
优点:网络前缀长度的灵活性;上层网络的路由表的项目较少;内部又可采用延长网络前缀的方法来灵活地划分子网
最长前缀匹配,最佳匹配:使用 CIDR 时,路由表中的每个项目由网络前缀和下一跳地址组成:
- 若在查找路由表时得到不止一个匹配结果,就选择网络前缀最长的那一个(地址块越小,路由越具体)
CIDR 查找路由表的方法:为了更加有效地查找最长前缀匹配,将无分类编址的路由表存放在一种层次式数据结构中,然后自上而下地按层次进行查找,常用的是二叉线索
ARP、DHCP 与 ICMP
IP 地址与硬件地址
IP 地址是网络层使用的地址,它是分层次等级的;硬件地址是数据链路层使用的地址,它是平面式的
通过数据封装,把 IP 数据报分组封装为 MAC 帧后,数据链路层看不见数据报分组中的 IP 地址
在网络层使用 IP 地址来完成寻址,而在目标 LAN 中通过数据链路层的 MAC 地址以广播方式寻址,以提高路由选择的效率
- 在 IP 层抽象的互联网上只能看到 IP 数据报
- 路由器只根据目的 IP 地址的网络号进行路由选择
- 在局域网的数据链路层,只能看见 MAC 帧,因此 IP 数据报在被路由器转发时,帧的 MAC 地址是不断改变的
- 尽管互联在一起的网络的硬件地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些复杂的细节
注意:路由器由于互联多个网络,因此它不仅有多个 IP 地址,也有多个硬件地址
地址解析协议 ARP
在实际网络的链路上传送数据帧时,必须使用硬件地址,因此使用地址解析协议 ARP 来完成 IP 地址到 MAC 地址的映射
每台主机都设有 ARP 高速缓存,用来存放本局域网上各主机和路由器的 IP 地址到 MAC 地址的映射表,称 ARP 表
ARP 工作在网络层,主机 A 向本局域网的主机 B 发送 IP 数据报的过程:
- 先在 ARP 高速缓存中查看有无主机 B 的 IP 地址,有就将此硬件地址写入MAC 帧,并把 MAC 帧发往此硬件地址
- 若没有,就把帧的目的 MAC 地址设为 FF-FF-FF-FF-FF-FF 并广播 ARP 请求分组,里面包含 B 的 IP
- B 收到该 ARP 请求后,对比 IP 发现是自己,向 A 发出响应 ARP 分组,包含 B 的 IP 与 MAC 地址的映射关系
- 主机 A 在收到后将此映射写入 ARP 缓存,回到 1
额外:ARP 表每过一段时间会进行刷新,这是为了防止其他主机的 MAC 地址更换
注意:ARP 由于看到了 IP 地址,所以它工作在网络层;NAT 路由器由于看到了端口,所以它工作在传输层
ARP 的 4 种典型情况总结如下:
- 主机发送 IP 数据报给本网络的主机:用 ARP 找到目的主机的硬件地址
- 主机发送 IP 数据报给另一个网络的主机:用 ARP 获取网关路由器的硬件地址,剩下的工作由该路由器来完成
- 路由器发送 IP 数据报给本网络的主机:用 ARP 找到目的主机的硬件地址
- 路由器发送 IP 数据报给另一个网络的主机:用 ARP 获取下一跳路由器的硬件地址,剩下的工作由该路由器完成
从 IP 地址到硬件地址的解析是自动进行的,主机的用户并不知道这种地址解析过程
思考:谁发送数据帧源 MAC 地址就是谁;要把数据帧发送给谁,目的 MAC 地址就是谁;PPP 协议除外
思考:通过子网掩码发现不是同一网络时,用网关 IP 拿到 MAC 地址,然后把数据报转发给网关
动态主机配置协议 DHCP
动态主机配置协议:给主机动态地分配 IP 地址,它提供了即插即用的联网机制,DHCP 是基于 UDP 的应用层协议
DHCP 的工作原理如下:
- C/S 方式,需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文
- 广播域内主机都能收到此广播报文,但只有 DHCP 服务器才回答此广播报文
- DHCP 服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息
- 若找不到,则从服务器的 IP 地址池中取一个地址分配给该计算机,DHCP 服务器的回答报文称为提供报文
DHCP 服务器聚合 DHCP 客户端的交换过程如下:
DHCP 客户机广播 DHCP 发现消息,试图找到网络中的 DHCP 服务器来获得一个 IP 地址
DHCP 服务器收到 DHCP 发现消息后,向网络中广播 DHCP 提供消息,包括提供客户机的 IP 地址和相关配置信息
DHCP 客户机收到 DHCP 提供消息后,如果接受 DHCP 服务器所提供的相关参数
那么广播 DHCP 请求消息向 DHCP 服务器请求提供 IP 地址(让其他 DHCP 知道选择了谁)
DHCP 服务器广播 DHCP 确认消息,将 IP 地址分配给 DHCP 客户机
网络上有多台 DHCP 服务器时,DHCP 客户机发出的 DHCP 请求可能收到多个应答消息,DHCP 客户机挑选最先到达的
DHCP 服务器分配给 DHCP 客户的 IP 地址是临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址
DHCP 称这段时间为租用期,租用期的数值应由 DHCP 服务器自己决定,DHCP 客户也可提出对租用期的要求
DHCP 执行初期,客户端不知道服务器端的 IP 地址,执行中间,客户端并未被分配 IP 地址,所以采用广播的方式
连对方的 IP 地址都不知道,更不可能使用 TCP 连接,所以使用 UDP 协议(TCP 不能发广播,UDP 可以)
额外:只有应用层才有的两种工作方式:C/S 方式和 P2P 方式
网际控制报文协议 ICMP
为了提高 IP 数据报交付成功的机会,在网络层使用了网际控制报文协议来让主机或路由器报告差错和异常情况
ICMP 报文作为 IP 层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去,ICMP 是 IP 层协议
ICMP 报文的种类有两种:ICMP 差错报告报文和 ICMP 询问报文
ICMP 差错报告报文
ICMP 差错报告报文用于目标主机或到目标主机路径上的路由器向源主机报告差错和异常情况,共有以下 5 种类型:
终点不可达:当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
源点抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点把发送速率放慢
时间超过:向源点发送时间超过报文
当路由器收到生存时间为零的数据报时,丢弃该数据报外
当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,丢弃已收到的数据报片
参数问题:路由器或目的主机收到的数据报的首部中有的字段的值不正确时,丢弃该数据报,向源点发送参数问题报文
改变路由:路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的(更好的)路由器
不应发送 ICMP 差错报告报文的几种情况如下:
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
- 对具有组播地址的数据报都不发送 ICMP差错报告报文
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文
ICMP 询问报文
ICMP 询问报文有:回送请求和回答报文、时间戳请求和回答报文、掩码地址请求和回答报文、路由器询问和通告报文
- 回送请求和回答报文:收到此报文的主机必须给源主机发送回送回答报文,测试目的站是否可达以及了解其相关状态
- 时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间,进行时钟同步和测量时间
ICMP 的两个常见应用是分组网间探测 PING 和 Traceroute:
- PING:用来测试两台主机之间的连迪性,使用 ICMP 回送请求和回答报文
- Traceroute:用来跟踪分组经过的路由,使用了 ICMP 时间超过报文,通过发不同的 TTL 的数据报来跟踪
注意:PING 工作在应用层,它直接使用网络层的 ICMP,Traceroute/Tracert 工作在网络层
*ICMP 报文的格式
ICMP 报文的格式:

ICMP 差错报告报文格式:

IPv6
IPv6 的主要特点
解决 IP 地址耗尽问题的措施有以下三种:
- 采用无类别编址 CIDR,使 IP 地址的分配更加合理
- 采用网络地址转换 NAT 方法以节省全球 IP 地址
- 采用具有更大地址空间的新版本的 IPv6,从根本上解决了 IP 地址的耗尽问题
IPv6 的主要特点如下:
- 更大的地址空间:IPv6 将地址从 IPv4 的 32 位增大到了 128 位
- 扩展的地址层次结构
- 灵活的首部格式,减少了首部条目,头部固定,扩展头部在数据部分
- 改进的选项
- 允许协议继续扩充
- 支持即插即用(即自动配置,不需要 DHCP)
- 支持资源的预分配
- IPv6 只在包的源结点才能分片,是端到端的,所以从一般意义上说,IPv6 不允许分片,若路由器接不能转发就丢弃
- IPv6 首部长度必须是
8B的整数倍,而 IPv4 首部是4B的整数倍 - 增大了安全性,身份验证和保密功能是 IPv6 的关键特征(支持质量服务
QoS)
虽然 IPv6 与 IPv4 不兼容,但总体而言它与所有其他的因特网协议兼容,只是在少数地方做了必要的修改
IPv6 相当好地满足了预定的目标,主要体现在:
- IPv6 的地址用 16 个字节表示,从长远来看,这些地址是绝对够用的
- 简化了 IP 分组头,它包含 8 个域,这一改变使得路由器能够更快地处理分组,从而可以改善吞吐率
- 更好地支持选项,一些从前必要的段现在变成了可选段。此外,表示选项的方式的改变还能加快分组的处理速度
- IPv6 将 IPv4 的校验和字段彻底移除,以减少每跳的处理时间
IPv6 地址
IPv6 数据报的目的地址可以是以下三种基本类型地址之一:
- 单播:单播就是传统的点对点通信
- 多播:多播是一点对多点的通信,分组被交付到一组计算机的每台计算机
- 任播:任播的目的站是一组计算机,但只交付给其中的一台计算机,通常是距离最近的一台计算机
在 IPv6 地址表示:每 4 位用一个十六进制数表示,并用冒号分隔 16 位,如 4BF5:AA12:0216:FEBC:BA5F:039A:BE9A:2170
当 16 位域的开头有一些 0 时,可以采用一种缩写表示法,但在域中必须至少有一个数字
- 如把地址
4BF5:0000:0000:0000:BA5F:039A:000A:2176缩写为4BF5:0:0:0:BA5F:39A:A:2176
有相继的 0 值域时,这些域可以用双冒号缩写,但在一个地址中仅能出现一次,上面地址可以写成 4BF5::BA5F:39A:A:2176
IPv6 使用以下 3 个等级:
- 第一级:指明全球都知道的公共拓扑,顶级
- 第二级:指明单个场点,场点级
- 第三级:指明单个网络接口
IPv6 地址采用多级体系主要是为了使路由器能够更快地查找路由
IPv4 向 IPv6 过渡只能采用逐步演进的办法,同时还必须使新安装的 IPv6 系统能够向后兼容
IPv4 向 IPv6 过渡可以采用双协议栈和隧道技术两种策略:
- 双协议栈技术:在一台设备上同时装有 IPv4 和 IPv6 协议栈,有两个协议的地址,可以实现两个协议的通信
- 隧道技术:将整个 IPv6 数据报封装到 IPv4 数据报的数据部分,使得 IPv6 数据报可以在 IPv4 网络的隧道中传输
*IPv6 数据报格式

头部大小 40B,红色部分,扩展头部在数据部分
- 版本:IP 版本
- 流标签:分片用的标识符
- 有效载荷长度:有效载荷(扩展首部 + 数据)的长度
- 下一个首部:下个首部的位置,首部与扩展首部用单链表连起来
路由协议
自治系统
自治系统 Autonomous System,AS:一个有权自主地决定在本系统中应采用各种路由协议的小型单位
有共同的协议与度量,一个自治系统的所有路由器在本自治系统内都必须是连通的
域内路由与域间路由
自治系统内部的路由选择称为域内路由选择,自治系统之间的路由选择称为域间路由选择
因特网有两大类路由选择协议:
- 内部网关协议 Interior Gateway Protocol,
IGP:在一个自治系统内部使用的路由选择协议,如 RIP 和 OSPF - 外部网关协议 External Gateway Protocol,
EGP:在多个自治系统间使用的路由选择协议,如 BGP-4
下面是两个自治系统互联的示意图:

路由信息协议 RIP
路由信息协议 Routing Information Protocol,RIP 是内部网关协议中最先得到广泛应用的协议
RIP 是一种分布式的基于距离向量的路由选择协议,其最大优点就是简单
RIP 规定
网络中的每个路由器都要维护从它自身到其他每个目的网络的距离记录,这组距离称为距离向量
距离也称跳数,规定从一个路由器到直接连接网络的距离为 1,而每经过一个路由器距离加 1
RIP 认为好的路由就是它通过的路由器的数目少,即优先选择跳数少的路径
RIP 允许一条路径最多只能包含 15 个路由器,因此距离等于 16 时,它表示网络不可达
规定路径上的最高跳数防止数据报不断循环在环路上,减少网络拥塞的可能性
RIP 默认每 30 秒广播一次 RIP 路由更新信息,以便自动建立并维护路由表
RIP 中不支持子网掩码的 RIP 广播;
RIP2中,支持变长子网掩码和 CIDR
RIP 的特点
- 仅和相邻路由器交换信息
- 路由器交换它所知道的全部信息,即自己的路由表
- 按固定的时间间隔交换路由信息,如每隔 30 秒
RIP 通过距离向量算法来完成路由表的更新:
- 最初,每个路由器只知道与自己直接相连的网络
- 经过 1 次 RIP 广播后,每个路由器知道距离自己跳数为 1 的网络
- 经过若干 RIP 广播后,所有路由器都知道整个 IP 网络的路由表,称 RIP 最终是收敛的
- 通过 RIP 收敛后,每个路由器到每个目标网络的路由都是距离最短的(跳数最短,不是时间最短)
距离向量算法
每个路由表项目都有三个关键数据:<目的网络 N,距离 d,下一跳路由器地址 X>
对于每个相邻路由器 X 发送过来的 RIP 报文,执行如下步骤:
修改此报文中的所有项目:把下一跳字段中的地址都改为 X,并把所有距离字段的值加 1
对修改后的 RIP 报文中的每个项目,执行如下步骤:
当原来的路由表中没有目的网络 N 时,把该项目添加到路由表中
当原来的路由表中有目的网络 N,且下一跳路由器的地址是 X 时,就替换原路由表中的项目
当原来的路由表中有目的网络 N,且下一跳路由器的地址不是 X 时
如果收到的项目中的距离 d 小于路由表中的距离,那么就替换原路由表中的项目;否则什么也不做
如果 180 秒(默认超时时间)还没有收到更新路由表,就把此相邻路由器的距离设置为 16(不可达)
返回
优点:实现简单、开销小、收敛过程较快;缺点:
RIP 限制了网络的规模,它能使用的最大距离为 15,只适用于小型互联网
路由器之间交换的是路由器中的完整路由表,因此网络规模越大,开销也越大
网络出现故障时,会出现慢收敛现象,俗称坏消息传得慢,使更新过程的收敛时间长
A 的直接网络出错了,距离改为 16,但交换信息时会误以为可以从临近路由到达(每次交换距离加 1,直到加到 16)
RIP 是应用层协议,它使用 UDP 传送数据,端口 520
开放最短路径优先 OSPF 协议
OSPF 协议的基本特点
开放最短路径优先协议是使用分布式链路状态路由算法的典型代表,也是内部网关协议的一种
OSPF 与 RIP 相比有以下 4 点主要区别:
OSPF 向本自治系统中的所有路由器发送信息,这里使用的方法是洪泛法;RIP 仅向自己相邻的路由器发送信息
泛洪:将从某个接口收到的数据流向除该接口之外的所有接口发送出去
OSPF 发送的信息是相邻的所有路由器的链路状态;RIP 发送的信息是整个路由表
链路状态:该链路连接的路由器是谁,该链路的度量(代价)是多少
OSPF 中链路状态发生变化时才发送信息,且更新过程收敛得快;RIP 中会定期交换路由表的信息
OSPF 是网络层协议,用 IP 数据报传送,协议字段为 89;RIP 是应用层协议,用 UDP 协议传送
OSPF 还有以下特点:
- OSPF 对于不同类型的业务可计算出不同的路由,十分灵活
- 可以将通信量分配给多条路径实现多路径间的负载平衡
- 所有在 OSPF 路由器之间交换的分组都具有鉴别功能,因而保证了仅在可信赖的路由器之间交换链路状态信息
- 支持可变长度的子网划分和无分类编址 CIDR
- 每个链路状态都带上一个 32 位的序号,序号越大,状态就越新
OSPF 的基本工作原理
各路由器之间频繁地交换链路状态信息,所有路由器最终都能建立一个链路状态数据库
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(称为链路状态数据库的同步)
每个路由器根据这个全网拓扑结构图,使用 Dijkstra 算法计算到各目的网络的最优路径,以此构造自己的路由表
此后,当链路状态发生变化时,每个路由器重新计算到各目的网络的最优路径,构造新的路由表
注意:虽然使用 Dijkstra 算法能计算出完整的最优路径,但路由表中只存储下一跳
为使 OSPF 能够用于规模很大的网络,OSPF 将一个自治系统再划分为若干更小的范围,称为区域
划分区域的好处:将利用洪泛法的范围局限于每个区域,减少了整个网络上的通信量
一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况
这些区域也有层次之分:处在上层的域称为主干区域,负责连通其他下层的区域和其他自治域
OSPF 的五种分组类型
OSPF 共有以下五种分组类型:
- 问候分组:用来发现和维持邻站的可达性
- 数据库描述分组:向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
- 链路状态请求分组:向对方请求发送某些链路状态项目的详细信息
- 链路状态更新分组:用洪泛法对全网更新链路状态
- 链路状态确认分组:对链路更新分组的确认
通常每隔 10 秒,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达
在路由器刚开始工作时,工作过程如下:
- 使用问候分组建立邻居关系
- 让每个路由器使用数据库描述分组和相邻路由器交换本数据库中已有的链路状态摘要信息(泛洪发送?)
- 路由器使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息
- 经过一系列的这种分组交换,就建立了全网同步的链路数据库
- 当链路状态发生变化时,该路由器就要使用链路状态更新分组,用洪泛法向全网更新链路状态
- 其他路由器在更新后,发送链路状态确认分组对更新分组进行确认
思考:刚开始交换信息拿到全网的拓扑,使用 Dijkstra 得到最佳路径,生成路由表,以后收到链路变化信息时,修改拓扑再生成路由表;路由器内记录了拓扑图和路由表,路由表是为了方便查询

为了确保链路状态数据库与全网的状态保持一致,OSPF 还规定每隔一段时间(如 30 分钟)刷新一次数据库中的链路状态
由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系
当互联网规模很大时,OSPF 要比 RIP 好得多,而且 OSPF 协议没有坏消息传播得慢的问题
边界网关协议 BGP
边界网关协议 Border Gateway Protocol,BGP:不同自治系统的路由器之间交换路由信息的协议,是一种外部网关协议
边界网关协议用于互联网的网关之间,路由表包含已知路由器列表、路由器能够达到的地址、到达路由器的路径的跳数
边界网关协议只能力求寻找一条能够到达目的网络且比较好的路由(无圈非最佳路由),主要原因如下:
- 因特网的规模太大,使得自治系统之间路由选择非常困难
- 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的(自治区权重不一样)
- 自治系统之间的路由选择必须考虑有关策略
BGP 采用的是路径向量路由选择协议,BGP 是应用层协议,它是基于 TCP 的
BGP 的工作原理
- 每个自治系统的管理员要选择至少一个路由器作为该自治系统的 BGP 发言人
- 一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接
- 在此连接上交换 BGP 报文以建立 BGP 会话,再利用 BGP 会话交换路由信息
- 当所有 BGP 发言人都相互交换网络可达性的信息后,各 BGP 发言人就可找出到达各个自治系统的较好路由
每个 BGP 发言人除必须运行 BGP 外,还必须运行该 AS 所用的内部网关协议
BGP 所交换的网络可达性信息就是要到达某个网络所要经过的一系列 AS

BGP 的特点
- BGP 交换路由信息的结点数量级是自治系统的数量级,要比这些自治系统中的网络数少很多
- 每个自治系统中 BGP 发言人的数目是很少的,这样就使得自治系统之间的路由选择不致过分复杂
- BGP 支持 CIDR,因此 BGP 的路由表当包括目的网络前缀、下一跳路由器、要经过的各个自治系统序列
- 在 BGP 刚运行时,BGP 的邻站交换整个 BGP 路由表,但以后只需在发生变化时更新有变化的部分
BGP-4 共使用 4 种报文:
- 打开 Open 报文:用来与相邻的另一个 BGP 发言人建立关系
- 更新 Update 报文:用来发送某一路由的信息,以及列出要撤销的多条路由
- 保活 Keep alive 报文:用来确认打开报文并周期性地证实邻站关系
- 通知 Notification 报文:用来发送检测到的差错
三种协议的比较

IP 组播
组播的概念
组播机制是让源计算机一次发送的单个分组可以抵达用一个组地址标识的若干目标主机,并被它们正确接收
组播一定仅应用于 UDP,它可以把一个报文同时发送给多个接收者
源主机把单个分组发送给一个组播地址,该组播地址标识一组地址,网络把这个分组的副本投递给该组中的每台主机
因特网中的 IP 组播也使用组播组的概念,每个组都有一个特别分配的地址,使用这个地址作为分组的目标地址
主机使用 IGMP 的协议加入组播组,使用该协议通知本地网络上的路由器,要接收某个组播组的分组的愿望
主机组播时仅发送一份数据,只有数据在传送路径出现分岔时才将分组复制后继续转发

IP 组播地址
IP 组播使用 D 类地址格式,范围是 224.0.0.0~239.255.255.255,每个 D 类 IP 地址标志一个组播组
组播的 IP 数据报是使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用 IGMP
需要注意的是:
- 组播数据报也是“尽最大努力交付”,不提供可靠交付
- 组播地址只能用于目的地址,而不能用于源地址
- 对组播数据报不产生 ICMP 差错报文
- 并非所有的 D 类地址都可作为组播地址
IP 组播可以分为两种:只在本局域网上进行硬件组播;在因特网的范围内进行组播
在因特网上进行组播的最后阶段,还是要把组播数据报在局域网上用硬件组播交付给组播组的所有成员
硬件组播
IANA 的以太网组播地址范围:01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF
可见只有 23 位可用作组播,和 D 类 IP 地址中的 23 位有一一对应关系
D 类 IP 地址可供分配的有 28 位,可见在这 28 位中,前 5 位不能用来构成以太网的硬件地址

但 224.128.64.32 和 224.0.64.32 转换成以太网的硬件组播地址都是 01-00-5E-00-40-20,因此收到组播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃
IGMP 与组播路由算法
因特网组管理协议 Internet Group Management Protocol,IGMP:使路由器知道组播组成员的信息
- IGMP 让连接到本地局域网上的组播路由器知道本局域网上是否有主机参加或退出了某个组播组
组播路由选择协议:使连接到局域网上的组播路由器和因特网上的其他组播路由器协同工作
IGMP 应视为 TCP/IP 的一部分,其工作可分为两个阶段:
第一阶段:
当某台主机加入新的组播组时,该主机应向组播组的组播地址发送一个 IGMP 报文,声明自己要成为该组的成员
本地的组播路由器收到 IGMP 报文后,将组成员关系转发给因特网上的其他组播路由器
第二阶段:
本地组播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否仍继续是组的成员
只要对某个组有一台主机响应,那么组播路由器就认为这个组是活跃的
但一个组在经过几次的探询后仍然没有一台主机响应时,则不再将该组的成员关系转发给其他的组播路由器
组播路由选择选择:找出以源主机为根结点的组播转发树,其中每个分组在每条链路上只传送一次
- 不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树
在许多由路由器互联的网络上实现因特网组播,主要有三种路由算法:
- 基于链路状态的路由选择
- 基于距离-向量的路由选择
- 协议无关的组播
PIM:可以建立在任何路由器协议之上
思考:IGMP 处理局域网相关的组播,组播路由选择协议处理局域网间的组播信息
思考:组播的过程
以下全是思考得到的,没有依据:
- 发送者向组播 IP 发送信息,局域网广播发送
- 到达路由器后,查看 IP 发现是组播 IP 根据组播路由选择协议组发给其他组播内的路由器
- 到达最后的路由器后,转换成 MAC 组播地址在局域网内广播
- 接受者发现自己是组播的一员,就处理消息
接受者先根据 MAC 地址检测这是不是自己的组播,再根据 IP 地址检测,若是才处理
# 这是发送端
mcast_group_ip = '239.255.255.252' # 组播 IP
mcast_group_port = 23456 # 组播给哪个端口
send_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 使用 UDP 协议
message = "this message send via mcast !"
send_sock.sendto(message.encode(), (mcast_group_ip, mcast_group_port)) # 发送组播
# 这是接受端
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) # 使用 UDP 协议
sock.bind((socket.gethostbyname(socket.gethostname()), mcast_group_port)) # 绑定接受端口
mreq = struct.pack("=4sl", socket.inet_aton("239.255.255.252"), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) # 加入广播
message, addr = sock.recvfrom(1024) # 接受消息
print(message.decode())移动 IP
移动 IP 的概念
支持移动性的因特网体系结构与协议共称为移动 IP,它是为了满足移动结点在移动中保持其连接性而设计的
移动 IP 的目标是把分组自动地投递给移动结点,移动结点是从一个网络或子网改变到另一个网络或子网的主机
思考:其实就是实现去了其它的局域网,但可以继续使用原局域网的功能
基于 IPv4 的移动 IP 定义三种功能实体:移动结点、归属代理、外部代理;归属代理和外部代理统称为移动代理
- 移动结点:具有永久 IP 地址的移动结点
- 归属网络:在一个网络环境中,一个移动结点的永久居所
- 本地代理,归属代理:在归属网络中代表移动结点执行移动管理功能的实体
- 转交地址,辅地址:移动站点在外部网络使用的临时地址
- 外部代理:在外部网络中帮助移动结点完成移动管理功能的实体
移动 IP 通信过程
在移动 IP 中,移动结点都有唯一的本地地址,移动时本地地址不变,在本地网络上还有一个本地代理来为它维护位置信息
移动结点连接到外地网络上时,转交地址就用来标识移动结点现在所处的位置,以便进行路由选择
移动结点得到转交地址时,向本地代理注册转交地址,以便让本地代理即时了解移动结点的当前位置
移动 IP 技术的基本通信流程如下:
移动结点在本地网时,按传统的 TCP/IP 方式进行通信
移动结点漫游到一个外地网络时,仍然使用固定的 IP 地址进行通信
移动结点需要向本地代理注册当前的位置地址,即转交地址,以收到通信对端发给它的 IP 分组
本地代理接收注册后,构建一条通向转交地址的隧道,将截获的发给移动结点的分组通过隧道送到转交地址处
转交地址处解除隧道封装,恢复原始的 IP 分组,送到移动结点,这样就收到发到归属网络的移动结点的信息了
移动结点在外网通过外网的路由器或外部代理向通信对端发送 IP 数据包(会在转交地址处进行隧道封装)
移动结点来到另一个外网时,向本地代理更新注册的转交地址,就可继续通信
移动结点回到本地网时,向本地代理注销转交地址,按传统的 TCP/IP 方式进行通信
思考:移动结点的主地址永不改变,去到其他网络时要申请辅地址,并在本地代理注册后,才能在通信(代理技术)
网络层设备
路由器的组成和功能
路由器是具有多个输入/输出端口的专用计算机,其任务是连接不同的网络并完成路由转发
当源主机要向目标主机发送数据报时:
如果源主机和目标主机在同一个网络上,那么直接交付而无须通过路由器
如果不在同一个网络上,那么按照转发表将数据报转发给下一个路由器,这称为间接交付
路由器可以连接不同的 LAN、VLAN、WAN,或者把 LAN 和 WAN 互联起来,路由器隔离了广播域
从结构上看,路由器由路由选择和分组转发两部分构成;从模型上看,路由器是网络层设备,它实现了网络模型的下三层

路由选择部分也称控制部分,包括:路由选择处理机、路由选择协议、路由表
- 路由选择处理机【核心构件】:根据所选定的路由选择协议构造出路由表,通过交换路由信息不断更新和维护路由表
分组转发部分由三部分组成:
一组输入端口:从物理层接收到的比特流中提取出数据链路层帧,进而从帧中提取出网络层数据报
一组输出端口:执行与输入端口恰好相反的操作
交换结构【关键部件】:根据转发表对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去
常用的交换方法:通过存储器进行交换、通过总线进行交换、通过互联网络进行交换
注意:如果一个存储转发设备实现了某个层次的功能,那么它就可以互联两个在该层次上使用不同协议的网段
路由器主要完成两个功能:
- 分组转发:处理通过路由器的数据流,关键操作是转发表查询、转发及相关的队列管理和任务调度等
- 路由计算:通过和其他路由器进行基于路由协议的交互,完成路由表的计算
现今的路由器一般都提供多种协议的支持,包括 OSI、TCP/IP、IPX 等
路由表与路由转发
路由表是根据路由选择算法得出的,主要用途是路由选择,其结构应对网络拓扑变化的计算最优化
标准的路由表有 4 个项目:目的网络 IP 地址、子网掩码、下一跳 IP 地址、接口

R1 的路由表见表:

转发表是从路由表得出的,其表项和路由表项有直接的对应关系;它和路由表的格式不同,其结构应使查找过程最优化
转发表中含有一个分组将要发往的目的地址,以及分组的下一跳(即下一步接收者的目的地址,实际为 MAC 地址)
使用一个默认路由代替所有相同下一跳的项目,并将默认路由设置得比其他项目的优先级低,以减少转发表的重复项目

路由表总是用软件来实现的;转发表可以用软件来实现,甚至也可以用特殊的硬件来实现
📝 个人补充与原笔记精华
IMPORTANT
在 IP 数据报首部中有三个关于长度的标记:首部长度、总长度、片偏移,其基本单位分别为
NOTE
路由器在接收到分组后,剥离该分组的数据链路层协议头,然后在分组被转发之前,给分组加上一个新的链路层协议头。
IMPORTANT
得到下一跳路由器的 IP 地址后,并不是直接将该地址填入待发送的数据报,而是将该 IP 地址通过 ARP 转换成 MAC 地址,将此 MAC 地址放到 MAC 帧首部中。在不同网络中传送时,MAC 帧中的源地址和目的地址会不断改变,但 IP 地址保持不变。
