四《网络层》——下

📅 发布时间:2026/7/9 5:36:01 👁️ 浏览次数:
四《网络层》——下
目录4.6IPv4和IPv6的共存技术4.6.1双协议线4.6.2DNS64/NAT644.6.3网络隧道4.7ICMPv44.7.1ICMPv4的数据包格式4.7.2具有代表性的ICMPv4的操作4.8ICMPv64.8.1ICMPv6的数据包格式4.8.2具有代表性的ICMPv6的操作4.9IPsec4.9.1站点间IPsec VPN与远程访问IPsec VPN4.9.2IPsec协议具备的功能4.6IPv4和IPv6的共存技术虽然IPv4和IPv6 都称为IP协议但是它们无法直接兼容两者非常相似但是完全不同。因此为了让这两种IP协议标准可以共存双协议栈、DNS64/NAT64 和网络隧道这3种技术也随之出现4.6.1双协议线双协议栈是一种为一台终端分配IPv4 地址和 IPv6 地址的技术。与IPv4 终端进行通信时需要使用 IPv4 地址;与 IPv6 终端进行通信时则需要使用 IPv6 地址。由于双协议栈可以直接使用 IPv4 地址因此即使需要支持新的 IPv6也不会影响现有的IPv4 环境这是它的优点。此外由于需要对IPv4 和IPv6 双方进行运用和管理因此会产生两种管理负担这是它的缺点。4.6.2DNS64/NAT64DNS64/NAT64 是一种利用 DNS 服务器的功能使 IPv6 终端可以和 IPv4 终端进行通信的技术。即使将自己的网络设置成纯 IPv6 环境也并不意味着通信对象一定是支持 IPv6 地址的。因此需要将 DNS 和 NAT 结合起来运用才能让通信成为可能。eg:接下来介绍其实际处理流程。将以 IPv6 终端访问具有 1.1.1.1的IPv4 地址的 www.example.com 为例对流程进行讲解1.IPv6 终端会向 DNS 服务器査询 www.example.com的IPv6 地址(AAAA 记录 )。该过程就相当于在询问“请告诉我 www.example.com 的 IPv6 地址”2.DNS 服务器只有 www.example.com 的IPv4 地址(A记录 )。因此DNS 服务器需要将 IPv4 地址转换成十六进制数将其嵌入 64:ff9b::/96后面的 32 比特中并将其作为 AAAA 记录发回给 IPv6终端。由于www.example.com的IPv4地址是 1.1.1.1因此需要将“64:ff9b::101:101”作为 AAAA记录发送。该步骤就是 DNS64 的处理3.这样IPv6 终端就可以对接收到的 AAAA 记录的 IPv6 地址 64:09b::101:101进行访问4.当 NAT 设备(路由器)接收到接收方IPv6 地址为 64:ff9b::/96的数据包时就可以确定这是发往IPv4 终端的通信。然后从接收方IPv6 地址中提取接收方 IPv4 地址。并且同时将发送方 IPv4地址转换为任意的地址。该步骤就是 NAT64 的处理4.6.3网络隧道网络隧道是一种使用IPv6 网络传递 IPv4 数据包或者相反地使用 IPv4 网络传递IPv6数据包的技术。前者被称为IPv4 over IPv6后者则被称为 IPv6 over IPv4这种技术用于终端之间没有使用同一网络进行直接连接且路由过程中存在不同版本的网络时通过使用路由过程中的版本将原始版本的数据包封包的方式实现通信eg对实际的处理流程进行讲解。将以IPv4 终端通过 IPv6 网络发送 IPv4 数据包为例即以 IPv4 over IPv6 为例进行讲解1.IPv4 终端 A 会向默认网关即路由器发送 IPv4 数据包2.路由器会使用IPv6 对接收到的 IPv4 数据包进行封包处理并将其发给对端的路由器3.对端的路由器会从 IPv6 数据包中提取原始的IPv4 数据包并将其发送给 IPv4 终端 B4.IPv4 终端 B会接收原始的 IPv4 数据包一个典型的使用网络隧道的示例就是使用IPoE连接FLETS网络IPoE 是一种PPPoE 的扩展连接协议不支持IPv4。因此要连接IPv4 的网络就需要在VNE(Virtual Network Enabler)提供的路由器中临时创建 IPv4 over IPv6 的网络隧道再通过该网络隧道与 IPv4 的网络进行连接4.7ICMPv4还有一个网络层的协议是不可忽视的。虽然它不像IP协议那样万众瞩目但是它是一种可以在背后给予IP协议大力支持的协议,它就是ICMP(Internet Control Message Protocol,因特网控制消息协议 )ICMP可以检査IP层面的通信报告各种错误是一种在IP网络中不可或缺的、极为重要的协议。工作中涉及IT系统的都听过 ping 这样的术语。ping 是一种专门用于发送 ICMP 数据包的网络诊断程序(网络诊断命令)ICMP 可以大致分为用 IPv4 格式创建的 ICMPv4 和用 IPv6 格式创建的 ICMPv6这两种4.7.1ICMPv4的数据包格式ICMP是一种传输控制(Control)互联网(Interet)消息(Message)的协议(Protocol)其中ICMPv4 是由 RFC 791 Internet Protocol 进行定义的,一种对IP 进行了扩展的协议并由 RFC 792 Internet Control Message Protocol文档确定了规范标准。在RFC 792中注明了ICMP is actually an integral part of IP, and must be implemented by every IP module(ICMP是IP中不可或缺的一部分必须在所有的IP模块中实现 )任何网络终端都必须配套地实现IPv4和ICMPv4ICMPv4 是一个直接将ICMP 消息嵌入 IPv4 中的、协议号为1的IPv4 数据包。由于它只负责返回通信结果或者返回较为琐碎的错误内容因此其数据包格式非常简单构成 ICMPv4 的字段中最为重要的是位于消息开头的类型和代码。查看这两个值的组合就可以知道在IP层面大概出现了什么状况。表中汇总了一些具有代表性的类型和代码的定义4.7.2具有代表性的ICMPv4的操作Echo Request/Reply在IP 层面检查通信状态时需要使用的ICMPv4 数据包是Echo Request(回显请求)和 Echo Reply(回显响应 )。当在 Windows 操作系统的命令提示符或者 Linux 操作系统的终端执行 ping 命令时就需要向指定的IP地址发送类型为 8、代码为0的回显请求;接收到回显请求的终端则会发送类型为 0、代码为0的回显响应作为答复在实际网络中大多数情况下故障排除是从 ping 命令即ICMP 的回显请求开始的。使用 ping命令确认网络层级的通信时,如果会返回回显响应,就需要向上检查传输层(TCP、UDP)、应用层(HTTP、SSL、DNS 等)的通信;如果不会返回回显响应就需要向下检查网络层(IP)、数据链路层(ARP、以太网 )、物理层(缆线、物理端口、无线环境)的通信Destination Unreachable如果无法将IPv4 数据包路由到接收方IPv4 地址的终端报告错误的ICMPv4 数据包就是Destination Unreachable(无法到达接收方 )。路由IPv4 数据包失败的路由器会将目标 IP 数据包丢弃同时将类型为3的 Destination Unreachable 数据包发送给发送方IPv4地址。此外发送的代码也会根据丢弃的理由不同而有所不同Time-to-live exceeded当IPv4 数据包的TTL变成0被丢弃时需要将这一情况通知给发送方终端所使用的数据包是Time-to-live exceeded(超过生存时间在后面的内容中将其简称为 TTL Exceeded)。TTL Exceeded 具有两个作用一是预防路由环路二是确认通信路径预防路由环路由于路由设置错误而导致IP 数据包在多台路由器之间循环游走的现象被称为路由环路。由于以太网和无线局域网数据包中没有检测和中止环路的字段因此存在一旦出现路由环路就会导致数据包永不停歇地在环路中循环传输的致命缺陷。IPv4 中则包含了克服这种缺陷的字段即 TTLeg将以图所示的网络结构为例对产生路由环路和 TTL Exceeded 的处理机制进行讲解如图中的结构所示由于原本必须定向到互联网的路由器R2的默认网关被定向到了路由器 R1,因此产生了路由环路问题将使用该网络结构从PC1对 Google 的公共 IPv4 地址 8.8.8.8执行 ping 命令。这样一来R1 和R2 就会无休止地传递数据包处于路由环路状态。然后当TTL变成0时TTLExceeded 数据包就会被发送出去确认通信路径可以根据 TTL Exceeded 的操作确认通信路径的程序有 traceroute(Limnux 操作系统的场合)和 tracert(Windows 操作系统的场合)。traceroute 通过发送从1开始逐一增加 TTL 的 IPv4 数据包的方式来检查数据是通过哪一条路径到达接收方 IP 地址的4.8ICMPv6ICMPv6 除了具有 ICMPv4 那样强大的底层功能之外还具有学习MAC 地址、检测重复地址以及提供网络信息等功能因此也具有极为重要的作用4.8.1ICMPv6的数据包格式ICMPv6 是 IPv6 中不可或缺的一部分基础协议(本规范要求的所有的消息和行为)必须在所有的IPv6 终端实现任何网络终端都必须配套地实现IPv6 和 ICMPv6ICMPv6 是一种将ICMP消息直接嵌入 IPv6 中、协议号为58的IP 数据包。与IPv4进行对比就会知道差别只是首部变成了IPv6 而已。与ICMPv4 一样由于它只负责返回通信结果和较为琐碎的错误内容因此其数据包格式非常简单在ICMPv6 中类型和代码也同样重要。与ICMPv4 一样将这两个值结合起来就可以知道在IP层面大概出现了什么状况。表中汇总了一些具有代表性的类型和代码的定义4.8.2具有代表性的ICMPv6的操作一些相关操作与IPv4没有显著差别但ICMPv6除了具备ICMPv4基本功能外还具备邻居发现协议(Neighbor Discovery ProtocolNDP)功能IPv6地址的重复检测IPv4 是使用 GARP 检测是否存在重复的IP地址的。在IPv6 中这一处理是由 ICMPv6 进行的。IPv6 终端设置IP地址的方式多种多样可以通过SLAAC自动生成IPv6也可以使用DHCPv6服务器分配此时需要进行一种检查地址是否重复的名为DADDuplicate Address Detection重复地址检测)的处理eg将对IPv6 终端连接网络设置链路本地地址时即使用SLAAC和 DHCPv6 设置IPv6 地址之前的处理进行讲解1.当IPv6终端连接网络时会自动生成一个临时的链路本地地址2.IPv6终端会发送一个类型为135的NS(Neighbor Solicitation相邻节点请求)数据包来检查该链路本地地址是否可以使用,即检查该地址是否重复。此时的发送方IPv6地址是::/128(未指定地址)接收方IPv6 地址是ff02::1:ff加上链路本地地址的低24比特的地址。此外需要将自己的临时链路本地地址嵌入载荷部分的目标地址字段中3.如果返回了类型为136的NA(Neighbor Advertisement相邻节点通告)数据包就可以判断出这是重复的地址;如果没有返回就表示该临时的链路本地地址没有被使用可以作为真正的地址设置到接口中根据接收方IPv6地址获取接收方MAC地址IPv4 需要使用 ARP 对地址进行解析IPv6 中也需要使用 ICMPv6 的NS 数据包和 NA 数据包进行地址解析大致的处理与 ARP 并没有太大差别。如果发送组播的NS 数据包询问“⭕⭕先生在吗?”就会有人发送单播的 NA数据包回答“是我!”提供网络信息SLAAC 和 DHCPv6 的无状态模式是从路由器接收网络信息生成IPv6 地址的。这一处理中也需要使用 ICMPv6。如果设置链路本地地址IPv6 就会发送类型为133的RS(Router Solicitation路由请求)数据包查询网络信息。然后,路由器会将MAC地址、MTU大小,前缀等信息嵌入类型为134的RA( Router Advertisement路由通告)数据包中并将其返回。路由器将继续定期地向ff02::1(所有终端)发送 RA数据包。4.9IPsecIPsec(Security Architecture for Internet Protocol互联网络层安全协议)是一种使用网络层进行IP数据包的封包、认证和加密处理的在互联网上创建虚拟专用线路(隧道)的虚拟化技术。IPsec作为一种可以安全且低成本连接站点和远程用户的技术被广泛且普遍地运用。最近还用于连接公司内部构建的环境(内部部署)和公共云环境以构建一种混合云的云服务式4.9.1站点间IPsec VPN与远程访问IPsec VPNIPsec 可以分为连接站点的站点间 IPsec VPN 和连接终端的远程访问 IPsec VPN两种类型站点间IPsec VPN站点间IPsec VPN专门用于连接在不同位置设有网络节点(分公司和云环境等)的企业。如果使用专用线路连接世界各地的每一个网络节点有多少钱都是不够的。因此可以使用IPsec 在互联网上创建隧道(虚拟的直连线路 )就像使用专用线路一样对各个节点的网络进行连接。这样一来不仅可以对隧道像专用线路那样进行使用还可以只用支付互联网的连接费用就可以连接网络节点因此可以显著地降低使用成本远程访问IPsec VPN远程访问 IPsec VPN 通常用于移动用户和远程办公人员的远程访问过程中。如果需要在家远程办公就可以使用操作系统的标准功能或第三方的 VPN 软件创建用于 VPN 的虚拟的 NIC 网卡从而在VPN 设备(路由器和防火墙等)之间建立 IPsec 隧道4.9.2IPsec协议具备的功能IPsec需要结合IKE(Internet Key Exchange互联网密钥交换)、ESP(Encapsulating Security Payload封装安全负载)和AH(Authentication Header身份认证头协议)3 种协议提供创建 VPN 所需的功能IKEIPsec无法突然之间就创建出隧道需要做好安全通信的事先准备工作才能着手创建隧道。这种事先准备或者说准备工作中需要使用的协议被称为IKE。IKE 是一个发送方端口号和接收方端口号均为 500 的 UDP数据包包括 IKEv1和 IKEv2 两个版本。这两个版本无法相互兼容行为也略有不同IKEv1IKEv1 由第一阶段和第二阶段组成。第一阶段是创建控制隧道的ISAKMP SA(Internet Security Association and Key Management Protocol Security Association网络安全协会和密钥管理协议安全协会)的阶段。要创建ISAKMP SA需要获得设置(加密算法、哈希函数、认证方式等)的许可共享加密密钥以及认证连接对象。在第一阶段中有主模式和野蛮模式两种交换步骤主模式需要按照设置的许可、加密密钥的共享、连接对象的认证的顺序进行3个步骤的处理。虽然在连接之前要逐一完成这几个步骤需要花费一些时间但是由于认证步骤是加密的因此具有安全级别高的优点。另外野蛮模式是主模式的简化模式可以直接完成设置的许可、加密密钥的共享、连接对象的认证等多个步骤。由于所有的处理都是一步完成的因此连接时间短但是由于认证信息(表示连接源身份的 ID)没有进行加密就会被发送出去因此也存在安全级别低于主模式的缺点完成了第一阶段的处理创建好了 ISAKMP SA 之后就需要进入第二阶段。第二阶段是创建传输实际数据的 IPsec SA 的阶段也可以将交换步骤本身称为快速模式。在第二阶段中需要在第一阶段创建的ISAKMP SA 中进行创建IPsec SA 所需的设置(加密算法、哈希函数等)的许可进行加密密钥的共享创建用于上行通信和下行通信的两个IPsec SA。此外ISAKMP SA 将继续对加密密钥的交换进行管理IKEv2毫无疑问IKEv1 是一种长期为 IPsec VPN 提供支持的协议。但是由于其根据时代的需要添加了各种扩展功能因此如果厂商、型号、版本不同实现情况也有所不同故而存在容易出现兼容性问题的缺点IKEv2就是为了消除这种混乱状态而整合了各种功能的一种新的标准化协议。最近Windows 操作系统、macOS、iOS和 Android 都已经支持了这种协议且正在逐渐得到普及IKEv2 由IKE_SA_INIT 和 IKE_AUTH两个步骤组成IE_SA_INIT 是创建控制隧道连接的IKE SA的步骤其作用与 IKEv1 的第一阶段类似。为了创建IKE SA需要进行必要的设置共享加密密钥。创建好了IKE SA之后就进入了IKE_AUTH 阶段IKE_AUTH 是创建实际进行数据传输的隧道 Child SA 的步骤其作用与IKEv1 的第二阶段类似。需要在使用 IKE_SA_INIT 创建的 IKE SA 中进行创建 Child SA所需的设置共享加密密钥以及对连接对象进行认证创建用于上行通信和下行通信的两个 Child SAIKEv1 和 IKEv2 之间传输的信息并没有太大区别可以通过减少传输的次数或者改变步骤来简化连接的过程IKEv1与IKEv2比较ESP/AH使用IKE完成了事先准备工作之后接下来就需要在 IPsec/Child SA 的上方开始转发数据。在IPsec/Child SA中需要使用 ESP或者 AH协议。ESP 和 AH的区别在于是否具备加密功能ESP 具备加密功能AH则不具备加密功能。AH 是一种主要在数据加密算法受到限制的国家中使用的协议至少日本是没有相关规定的因此没有选择 AH的必要故只有ESP 一种选择在IPsec/Child SA 中存在隧道模式和传输模式两种操作模式隧道模式:一种用更新的IP首部对原始IP数据包进行封包的模式用于站点间IPsec VPN 和一般的远程访问 IPsec VPN 中传输模式:一种将用于隧道的首部插入原始IP数据包中的模式用于L2TP over IPsec中。L2TP over IPsec会将封包(隧道化)处理交给L2TP执行加密则交给IPsec(ESP)执行隧道模式和传输模式具有不同的加密范围和消息认证范围具体取决于是使用 ESP 还是使用 AH相关的详细内容请参考图例在ESP的隧道模式中在 192.168.1.0/24和 192.168.2.0/24之间部署了站点间 VPN 处理就需要像图那样使用 ESP进行封包和加密之后再进行连接。NAT穿透如前所述,IPsec 为了顺应时代的发展加入了很多扩展技术。其中在远程访问IPsec VPN时会在不知不觉间使用的一项重要的功能就是NAT穿透。NAT穿透是一种穿越NAT的技术,但是IPsec 中的NAT穿透和之前讲解的内容有所不同ESP会对原始的IP数据包(IP首部IP载荷)进行加密处理。这样一来TCP/UDP 首部中包含的发送方端口号就会被加密变成不可见。如果是NAPT 的场合就需要将发送方端口号和发送方IP地址关联起来,实现 n:1的通信。因此,如果看不到发送方端口号,就无法进行关联,从而无法进行 NAPT 处理在NAT 穿透中首先需要使用IKE彼此识别“支持 NAT 穿透 ”和“使用了 NAPT 设备”,然后将发送方/接收方端口号从500更改成 4500之后的通信则需要使用 UDP的 4500 号进行。使用IKE 完成了事先准备工作之后需要使用 UDP 的4500 号对 ESP 进行封包并穿越NAPT 设备。在完成了IPsec 的连接处理并进行了 PPP认证之后PPP 就会为使用 VPN 软件创建的用于 VPN 的 NIC 网卡分配 正地址然后需要将该IP地址作为原始IP地址尝试进行连接