在 PowerShell 中尝试 IPv6 通信 — ::1 的 localhost TCP 与 IPv4 有何不同?

ネットワーク・RFCカテゴリを表すパンダのイラスト 网络・RFC

关于本文
本文是通过生成式 AI 辅助的自动化流程创建的。我们参考了 RFC 4291、Microsoft Learn 的 Socket API 以及现有的 Daily-Code-Samples,并将其整理为无需外部网络、仅使用 ::1 即可观察 IPv6 TCP 的形式。

验证状态:📘 已确认官方信息 · Windows 实机未验证

即使没有外部网络,你也可以使用自己电脑的回环地址 ::1 来尝试 IPv6。类似于 IPv4 的 127.0.0.1,你可以在同一台电脑上同时运行服务器和客户端,从而观察端点表示法和地址族的差异。

首先运行

本次的成功条件是发送 HELLO_IPV6,并收到 ACK_IPV6 返回。完整版代码已放置在 GitHub 上,正文将介绍其核心部分。

$listener = [Net.Sockets.TcpListener]::new(
    [Net.IPAddress]::IPv6Loopback,
    48061
)
$listener.Server.DualMode = $false
$listener.Start()

Write-Host "[LISTEN] $($listener.LocalEndpoint)"

$client = [Net.Sockets.TcpClient]::new(
    [Net.Sockets.AddressFamily]::InterNetworkV6
)
$client.Connect([Net.IPAddress]::IPv6Loopback, 48061)

Write-Host "[SUCCESS] connected to $($client.Client.RemoteEndPoint)"

$client.Dispose()
$listener.Stop()

IPv6 回环在《IPv6 寻址体系结构》中被定义为 ::1

观察这里

输出的端点不是 IPv4 的 127.0.0.1:48061,而是类似于 [::1]:48061 的形式。

sequenceDiagram
    participant C as Client [::1]
    participant S as Server [::1]
    C->>S: TCP connect
    S-->>C: accept
    C->>S: HELLO_IPV6
    S-->>C: ACK_IPV6

TCP 的“连接 → 发送 → 接收 → 断开”这一流程与 IPv4 大多相同,改变的主要是地址体系和 Socket 设置。

修改一个地方

仅将端口从 48061 更改为 48062 并重新运行。

由于完整版示例带有 -Port 参数,因此你可以按如下方式进行比较。

.\Test-Ipv6LoopbackTcp.ps1 -Port 48062

如果不盲目同时修改地址或 DualMode,而是先仅更改端口,就会更容易追溯“修改带来了什么结果”。

将 DualMode 设为 false 的原因

由于本次冒烟测试(Smoke Test)旨在观察 IPv6 本身,因此监听器被设为了 DualMode = $false。DualMode 涉及到 IPv6 socket 同时处理 IPv4 的配置,如果一开始就将其混合进来,会增加观察的对象。

如果在工作中实际使用

能够在 localhost 上运行并不证明可以使用外部 IPv6 通信。在实际运营中,还需要单独确认以下内容。

  • 操作系统/网卡是否启用了 IPv6

  • DNS 的 AAAA 记录

  • 防火墙

  • 监听地址

  • 双栈(dual-stack)策略

  • 对 IPv4 映射地址的处理

此外,为了确保 Socket/Stream 即使在发生异常时也能 Dispose() / Stop(),使用 try/finally 是更安全的做法。完整版代码甚至包含了善后清理工作。

GitHub 示例

官方信息与第一手资料

总结

::1通过使用

文档信息

文章??
在 PowerShell 中尝试 IPv6 通信 — ::1 的 localhost TCP 与 IPv4 有何不同?
?布日期
更新日期
来源
https://papanda925.com/?p=17055&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制