ISATAP

ISATAP（Intra-Site Automatic Tunnel Addressing Protocol）是一种IPv6转换传送机制，允许IPv6数据包通过IPv4网络上双栈节点传输。

不同于6over4，ISATAP视IPv4网络为一个非广播多路访问网络的数据链路层，因此它不需要底层的IPv4网络基础设施来支持多播。

运行方法
ISATAP包含一种基于IPv4地址生成IPv6本地链路地址的方法，和基于IPv4网络的邻居发现机制。
地址产生
任何一个希望通过特定IPv4网络使用ISATAP的主机都可以建立虚拟的IPv6网络接口。将主机的IPv4地址比特串加上特定IPv6前缀作为接口的IPv6地址，对于全球单播地址使用fe80::0200:5efe:，对于专用网络地址则使用fe80::0000:5efe:。例如，一个主机IPv4地址为192.0.2.143，则其ISATAP接口的IPv6地址为fe80::0200:5efe:192.0.2.143，转为完整最短IPv6为fe80::200:5efe:c000:28f（c000:28f为其IPv4地址192.0.2.143的十六进制值）。

邻居发现
由于ISATAP将IPv4基础网络视为一个非广播或多播多路访问网络的数据链路层，不同于以太网，使其原有的ICMPv6邻居发现不能如常操作，使ISATAP比6over4的运作有所困难。

对于IPv6数据包来说，IPv4网络是它的物理链路层，由于其IPv6地址已经包含了作为链路层的地址，即IPv4地址，所以其无需进行邻居发现。但是缺少多播功能导致其无法进行路由自动发现，所以ISATAP主机必须配置一个潜在路由器列表（potential routers list，PRL），这列表中的路由器通常不需要使用ICMPv6的路由发现来寻获和确定其是否已在线可运行，并且其只进行单播地址自动配置（通常可以借此为ISATAP的接口自动配置到其他IPv6前缀）。

实际上，PRL是通过DNS查询获得，例如如果本地网络域名为example.com，可通过查询isatap.example.com。本地网络域名通过IPv4网路上的DHCP或者本地静态配置获得。

实现
ISATAP已经在Microsoft Windows XP、Windows Vista、Windows 7、Windows 8、Windows 10（但在1703更新中默认关闭，1803更新后会移除）、Windows Server 2008、Windows Server 2012、Windows Mobile、Linux和Cisco IOS（自IOS 12.2(14)S、 IOS XE Release 2.1）中实现。

由于专利权利要求，早期在（*BSD）和USAGI（Linux）的内核实现被移除过，然而，IETF知识产权披露搜索引擎报道，该侵权专利的持有者不需要实现者的许可。Linux内核自2.6.35版本实现了内核支持，并提供了一个用户空间配置工具isatapd。对于之前的Linux内核，开源项目Miredo提供了一个不完整的用户空间实现，之后版本1.1.6中被移除。

批评
ISATAP通过查询DNS来构建PRL，因此，对应于OSI模型，其依赖于一个高层协议来构建低层协议。其依赖于IPv4的DNS来避免循环，而不是IPv6路由的构建。然而，有些网络专家认为这这违反了他们认为普遍接受的设计原则，并进一步声称这些违规行为会导致协议不健全。

ISATAP有着和6over4一样的安全风险，也就是IPv4虚拟链路需要在网络边缘被小心地分隔开，以便外部IPv4主机不能假装成为ISATAP链路的一部分。通常是通过将IP协议号为41的IP包（也就是6in4等所使用的IP协议号）使用防火墙来拦截。

参考文献

外部链接
 F. Templin, T. Gleeson, D. Thaler Intra-Site Automatic Tunnel Addressing Protocol (ISATAP) RFC 5214, March 2008.
 http://www.isatap.org/

Category:IPv6
Category:网络协议