1 地址解析协议 ARP
地址解析协议(Address Resolution Protocol,ARP):虽然网络层使用 IP 地址,但在数据链路层上传送数据帧时,最终必须使用链路层的 MAC 地址,所以需要一种方法来完成 IP 地址到 MAC 地址的映射,该映射的实现依赖 ARP 协议。
1.1 ARP 工作原理
现假设主机 A 往主机 B 发送数据报,如图所示:
- 主机 A (IP 地址为 192.168.0.1)在自己的 ARP 高速缓存(即 ARP 表,如下表所示)中查找有无主机 B(IP 地址为 192.168.0.2)的 MAC 地址,发现没有主机 B 的 MAC 地址。
IP 地址 | MAC 地址 | 类型 |
---|---|---|
192.168.0.3 | 00-0C-CF-B8-4A-82 | 动态 |
192.168.0.4 | 00-01-C7-D3-B2-B5 | 静态 |
【注】静态 ARP 和动态 ARP:
- 静态 ARP:通过手动配置的 ARP 表项,不会动态更新,也不会被动态删除。
- 动态 ARP:通过 ARP 自动获取,生命周期默认为两分钟,两分钟后将删除。
- 为什么需要动态周期性删除:ARP 表中的 IP 地址与 MAC 地址的对应关系并不是永久不变的。例如,主机更换了一块新网卡。
- 于是主机 A 发送一个 ARP 请求报文,报文内容大致如下(由于不知道主机 B 的 MAC 地址,故填入 00-00-00-00-00-00,表示任意地址):
操作类型 | 源 MAC 地址 | 源 IP 地址 | 目的 MAC 地址 | 目的 IP 地址 |
---|---|---|---|---|
ARP 请求 | 00-0C-85-72-AB-72 | 192.168.0.1 | 00-00-00-00-00-00 | 192.168.0.2 |
- 该报文向下传输到数据链路层时需要再次封装,在报文前面加入以太网帧首部(目的 MAC 地址 + 源 MAC 地址 + 帧类型),成为广播帧(FF-FF-FF-FF-FF-FF 表示该帧是一个广播帧):
目的 MAC 地址 | 源 MAC 地址 | 操作类型 | 源 MAC 地址 | 源 IP 地址 | 目的 MAC 地址 | 目的 IP 地址 |
---|---|---|---|---|---|---|
FF-FF-FF-FF-FF-FF | 00-0C-85-72-AB-72 | ARP 请求 | 00-0C-85-72-AB-72 | 192.168.0.1 | 00-00-00-00-00-00 | 192.168.0.2 |
- 主机 C 收到广播帧,发现不是自己的 IP 地址,丢弃;主机 B 收到广播帧,发现是自己的 IP 地址,于是主机 B 发送一个 ARP 响应报文,报文内容大致如下:
操作类型 | 源 MAC 地址 | 源 IP 地址 | 目的 MAC 地址 | 目的 IP 地址 |
---|---|---|---|---|
ARP 响应 | 00-E0-F9-A3-43-77 | 192.168.0.2 | 00-0C-85-72-AB-72 | 192.168.0.1 |
- 该报文向下传输到数据链路层时需要再次封装,在报文前面加入以太网帧首部,它是一个单播帧:
目的 MAC 地址 | 源 MAC 地址 | 操作类型 | 源 MAC 地址 | 源 IP 地址 | 目的 MAC 地址 | 目的 IP 地址 |
---|---|---|---|---|---|---|
00-0C-85-72-AB-72 | 00-E0-F9-A3-43-77 | ARP 响应 | 00-E0-F9-A3-43-77 | 192.168.0.2 | 00-0C-85-72-AB-72 | 192.168.0.1 |
- 主机 A 收到单播帧后,将主机 B 的 MAC 地址写入到自己的 ARP 表中:
IP 地址 | MAC 地址 | 类型 |
---|---|---|
192.168.0.3 | 00-0C-CF-B8-4A-82 | 动态 |
192.168.0.4 | 00-01-C7-D3-B2-B5 | 静态 |
192.168.0.2 | 00-E0-F9-A3-43-77 | 动态 |
1.2 使用 ARP 的典型情况
- 主机 A 发送给本网络上的主机 B:用 ARP 找到主机 B 的 MAC 地址。
- 主机 A 发送给另一网络上的主机 B:用 ARP 找到本网络上的路由器(网关)的 MAC 地址。剩下工作由该路由器完成。
- 路由器发给本网络上的主机 A:用 ARP 找到主机 A 的 MAC 地址。
- 路由器发给另一网络上的主机 A:用 ARP 找到本网络上的路由器(网关)的 MAC 地址。剩下工作由该路由器完成。
- 从以上四种情况可知:不能跨网络使用 ARP!
【例】主机 A 发送 IP 数据报给主机 B,途中经过了 8 个路由器,则在此过程中使用 ARP 的次数为 9 次。
2 网际控制报文协议 ICMP
为了更有效地转发 IP 数据报以及提高 IP 数据报交付成功的机会,TCP/IP 体系结构的网际层使用了网际控制报文协议(Internet Control Message Protocol,ICMP)。
ICMP 报文被封装在 IP 数据报中发送。
2.1 ICMP 报文类型
ICMP 报文类型有两种:差错报文和询问报文。
2.1.1 ICMP 差错报文
- 终点不可达:当路由器或主机不能交付 IP 数据报时,就向源点(即发送该数据报的主机)发送终点不可达报文。
- 源点抑制:当路由器或主机由于拥塞而丢弃 IP 数据报时,就向发送该 IP 数据报的源点发送源点抑制报文,使源点知道应当把 IP 数据报的发送速率放慢。
- 时间超时:当路由器收到一个目的 IP 地址不是自己的 IP 数据报时,会将其首部中生存时间 TTL 字段的值减 1。若结果不为 0,则路由器将该数据报转发出去;若结果为 0,路由器不但要丢弃该数据报,还要向发送该 IP 数据报的源点发送时间超过(超时)报文。
- 参数问题:当路由器或目的主机收到 IP 数据报后,根据其首部中的检验和字段的值发现首部在传送过程中出现了误码,就丢弃该数据报,并向发送该数据报的源点发送参数问题报文。
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将 IP 数据报发送给另外的路由器,这样可以通过更好的路由到达目的主机。
【注】以下情况不应发送 ICMP 报文:
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的 IP 数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有多播地址的 IP 数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(例如 127.0.0.0 或 0.0.0.0)的 IP 数据报不发送 ICMP 差错报告报文。
相关例题:
【例 1】若路由器 R 因为拥塞丢弃 IP 分组,则此时 R 可向发出该 IP 分组的源主机发送的 ICMP 报文类型是(C)。
A. 路由重定向
B. 目的不可达
C. 源点抑制
D. 超时
【例 2】若某个路由器收到 TTL 值为 1 的 IP 数据报,则(D)。
A. 转发该 IP 数据报
B. 仅仅丢弃该 IP 数据报
C. 丢弃该 IP 数据报并向发送该 IP 数据报的源主机发送类型为终点不可达的 ICMP 差错报告报文
D. 丢弃该 IP 数据报并向发送该 IP 数据报的源主机发送类型为时间超过的 ICMP 差错报告报文
2.1.2 ICMP 询问报文
- 回送请求和回答报文:由主机或路由器向一个特定的目的主机或路由器发出。收到此报文的主机或路由器必须给发送该报文的源主机或路由器发送 ICMP 回送回答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
- 时间戳请求和回答报文:用来请求某个主机或路由器回答当前的日期和时间。在 ICMP 时间戳回答报文中有一个 32 比特的字段,其中写入的整数代表从 1900 年 1 月 1 日起到当前时刻一共有多少秒。这种询问报文用来进行时钟同步和测量时间。
- 地址掩码请求和回答报文
- 路由器询问和通告报文
2.2 ICMP 的典型应用
- 分组网间探测(Packet InterNet Groper,PING):用来测试主机或路由器之间的连通性,所使用的 ICMP 报文类型为回送请求和回答。
【注】PING 是 TCP/IP 体系结构的应用层直接使用网际层 ICMP 的一个例子,它并不使用运输层的 TCP 或 UDP。
- 跟踪路由(traceroute/tracert):用于探测 IP 数据报从源主机到达目的主机要经过哪些路由器。
【注】在不同操作系统中,traceroute 应用的命令和实现机制有所不同:
- 在 Windows 版本中,具体命令为“tracert”,其应用层直接使用网际层的 ICMP 协议,所使用的 ICMP 报文类型有回送请求和回答报文以及差错报告报文。
- 在 UNIX 版本中,具体命令为“traceroute”,其在运输层使用 UDP 协议,在网络层使用 ICMP 报文类型只有差错报告报文。
3 (应用层)动态主机配置协议 DHCP——动态 IP
3.1 DHCP 的特点
- 动态主机配置协议 DHCP:用于给主机动态分配 IP 地址。
- 动态主机配置协议 DHCP 是应用层协议,基于 UDP。
- 使用客户/服务器方式,通过广播方式进行交互。
- 支持即插即用的联网方式,允许一台主机加入新的网络和获取 IP 地址而不用手工参与。
3.2 DHCP 的工作原理
步骤 | 操作 | 源地址 | 目的地址 |
---|---|---|---|
1 | DHCP 客户机广播 DHCP 发现报文,试图找到网络中的 DHCP 服务器,并从服务器获得一个 IP 地址 | 0.0.0.0 | 255.255.255.255 |
2 | DHCP 服务器收到 DHCP 发现报文后,广播 DHCP 提供报文,其中包括拟分配给客户机的 IP 地址 | DHCP 服务器地址 | 255.255.255.255 |
3 | DHCP 客户机收到 DHCP 提供报文后,广播 DHCP 请求报文,请求服务器提供 IP 地址 | 0.0.0.0 | 255.255.255.255 |
4 | DHCP 服务器收到 DHCP 请求报文后,广播 DHCP 确认报文,将 IP 地址正式分配给客户机 | DHCP 服务器地址 | 255.255.255.255 |
- 可能网络上有多台 DHCP 服务器,客户机可能会收到多个提供报文,则只会挑选最先到达的那个。
- DHCP 服务器分配给 DHCP 客户机的 IP 地址是临时的,因此客户机只能在有限的一段时间内使用这个 IP 地址,这段时间称为租用期。
- 客户机可以对租用期提出要求,也可以由服务器自己决定。
- 使用广播的原因:DHCP 的双方均不知道对方的 IP 地址,且客户机未分配 IP 地址。
4 IP 多播
4.1 IP 多播的概念
- 单播:用于发送数据包到单个目的地,且每发送一份单播报文都使用一个单播 IP 地址作为目的地址。是一种点对点传输方式。
- 广播:是指发送数据包到同一广播域或子网内的所有设备的一种数据传输方式,是一种点对多点传输方式。
- 多播(Multicast,也称为组播):是一种实现“点对多点”通信的技术,与传统单播“点对点”通信相比,多播可以极大地节省网络资源。在因特网上进行的多播,称为 IP 多播。
多播提高了数据传送效率。减少了主干网出现拥塞的可能性。当多播组的成员数量很大时,采用多播方式可以显著地减少网络中各种资源的消耗,如下图所示:
主机使用 IGMP 协议加入多播组。多播需要路由器支持才能实现,能够运行多播协议的路由器称为多播路由器。
4.2 IP 多播地址和多播组
- 多播地址(D 类地址):224.0.0.0 ~ 239.255.255.255
4b | 28b |
---|---|
1110 | 任意变化 |
- 并非所有 D 类地址都能作为多播地址,见下表:
地址 | 用途 |
---|---|
224.0.0.0 | 基地址(保留) |
224.0.0.1 | 仅在本子网上的所有参加多播的主机和路由器 |
224.0.0.2 | 仅在本子网上的所有参加多播的路由器 |
224.0.0.3 | 未指派 |
224.0.0.4 | DVMRP 路由器 |
224.0.0.5 | OSPF 路由器 |
… | … |
- 多播地址只能用作目的地址,而不能用作源地址。
- 多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后输入多播地址,将永远得不到响应。
- IP多播数据报也是“尽最大努力交付”,不保证一定能够交付给多播组内的所有成员。
- 用每一个 D 类地址来标识一个多播组,使用同一个 IP 多播地址接收 IP 多播数据报的所有主机就构成了一个多播组。
- 每个多播组的成员是可以随时变动的,一台主机可以随时加入或离开多播组。
- 多播组成员的数量和所在的地理位置也不受限制,一台主机可以属于几个多播组。
4.3 IP 多播的类型
4.3.1 局域网(以太网)上的硬件多播
- 多播 MAC 地址(加粗的“1”表示“多播”):
0 | 1 | 0 | 0 | 5 | E | 23b | |
---|---|---|---|---|---|---|---|
0000 | 0001 | 0000 | 0000 | 0101 | 1110 | 0 | 剩余 23 比特可任意变化 |
- 因特网号码指派管理局 IANA,将自己从 IEEE 注册管理机构申请到的以太网 MAC 地址块中从 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF 的多播 MAC 地址,用于映射 IPv4 多播地址。
- 多播 MAC 地址映射到 IPv4 多播地址:由于 IP 多播地址可变化的 28 比特的前 5 个比特无法映射到 MAC 多播地址,这会造成 IP 多播地址与多播 MAC 地址的映射关系并不是唯一的。
32 比特的多播 IP 地址 | 1110 | 这里无法映射 | 这里无法映射 | 只能映射低 23 比特 | ||||
---|---|---|---|---|---|---|---|---|
48 比特的多播 MAC 地址 | 0000 | 0001 | 0000 | 0000 | 0101 | 1110 | 0 | 来自多播地址的低 23 比特 |
- 由于 IP 多播地址与多播 MAC 地址的映射关系不是唯一的,因此收到 IP 多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的 IP 多播数据报丢弃。
【例 1】多播 IP 地址:224.215.145.230 --> 224.1101 0111.145.230 --> 1101 0111(D7) --> 101 0111(57) --> 多播 MAC 地址:01-00-5E-57-91-E6
【例 2】现有以下多播 IP 地址,有一 IP 多播数据报,其目的 IP 地址:226.128.9.26,目的 MAC 地址:01-00-5E-00-09-1A,则匹配情况如下表所示:
多播 IP 地址 | 映射的多播 MAC 地址 | MAC 层匹配? | 网际层匹配? |
---|---|---|---|
226.0.9.26 | 01-00-5E-00-09-1A | √ | x |
226.128.9.26 | 01-00-5E-00-09-1A | √ | √ |
228.1.1.1 | 01-00-5E-01-01-01 | x | x |
4.3.2 因特网上的 IP 多播
要在因特网上进行 IP 多播,就必须要考虑 IP 多播数据报经过多个多播路由器进行转发的问题,因此这涉及到两个协议。
4.3.2.1 网际组管理协议 IGMP
- 网际组管理协议(Internet Group Management Protocol,IGMP):TCP/IP 体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(或进程)加入或退出了某个多播组。
- 加入多播组的过程:
- 主机 A 想加入多播组 X,则主机 A 应向多播组 X 的多播地址发送 IGMP 报文,说明自己想要成为里面的成员;
- 多播路由器收到 IGMP 报文后,解析该报文,把主机 A 的多播 IP 地址加入到多播组列表中。
- 监视多播组的成员变化的过程:
- 多播路由器默认每隔 125 秒就向其直连网络发送一个封装有 IGMP 报文的 IP 多播数据报;
- 只要某个多播组的一个主机响应,则认为这个组是活跃的;
- 若连续多次查询,某个多播组均没有一个主机响应,则认为这个组不活跃,将该组从多播组列表中删除。
4.3.2.2 多播路由选择协议
- 多播路由选择协议目的是找出以源主机为根节点的多播转发树。
- 构造树可以避免在路由器之间兜圈子。
- 对不同的多播组对应于不同的多播转发树;同一个多播组,对不同的源点也会有不同的多播转发树。
- 要建立广播转发树,可以使用洪泛(Flooding)法。
5 移动 IP
5.1 相关基本概念
名词 | 释义 |
---|---|
归属网络 | 每个移动主机都有一个默认连接的网络或初始申请接入的网络 |
归属地址(主地址) | 移动主机在归属网络中的 IP 地址在其整个移动通信过程中是始终不变的 |
归属代理 | 在归属网络中,代表移动主机执行移动管理功能的实体(通常是连接在归属网络上的路由器) |
外地网络 | 移动主机当前漫游所在的网络 |
外地代理 | 在外地网络中,代表移动主机执行移动管理功能的实体 |
转交地址(辅地址) | 通常是连接在外地网络上的路由器。外地代理会为移动主机提供一个临时使用的属于外地网络的转交地址 |
5.2 移动 IP 的工作原理
5.2.1 主机刚进入外部网络
- 获得外部代理的转交地址(外部代理广播报文)。
- 移动节点通过外部代理发送注册报文给归属代理(包含永久地址和转交地址)。
- 归属代理接收请求,并将移动节点的永久地址和转交地址绑定(以后到达该归属代理的数据报且要发往移动节点的数据报将被封装,并以隧道方式发给转交地址),并返回一注册响应报文。
- 外部代理接收注册响应,并转发给移动节点。
5.2.2 主机移动到下一个网络
- 在新外部代理登记注册一个转交地址。
- 新外部代理给本地代理发送新的转交地址(覆盖旧的)。
- 通信。
5.2.3 主机回到归属网络
- 主机向本地代理注销转交地址。
- 按原始方式通信。