V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
DinoStray
V2EX  ›  程序员

同一个服务, 不能同时支持 ipv4 和 ipv6 对么

  •  
  •   DinoStray · 2020-12-15 10:52:15 +08:00 · 2920 次点击
    这是一个创建于 1464 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单看了看 ipv6 相关的 api, 暂时的结论是, 如果想支持 ipv6, 需要在负载均衡层面, 额外添加 ipv6 的服务, 不能一个服务同时支持 ipv4 和 ipv6.
    我的结论是对是错, 如果不对请喷

    17 条回复    2020-12-16 09:52:00 +08:00
    codehz
        1
    codehz  
       2020-12-15 10:58:37 +08:00
    你这上下文都不写,直接谜语提问?
    oxromantic
        2
    oxromantic  
       2020-12-15 11:02:02 +08:00
    这要看你怎么定义同一个服务?一个 app(单个或多个进程)同时提供 udp tcp 协议,他算同一个服务还是 不同的服务?
    liangch
        3
    liangch  
       2020-12-15 11:02:15 +08:00
    啥都没有,还程序员
    msg7086
        4
    msg7086  
       2020-12-15 11:02:57 +08:00
    可以。
    TendernessMiao
        5
    TendernessMiao  
       2020-12-15 11:04:14 +08:00
    nginx 可以同时支持 ipv4 和 ipv6,不知道是不是你说的意思
    lanternxx
        6
    lanternxx  
       2020-12-15 11:05:28 +08:00
    你的标题是错误的,现代 web 服务器都是支持 IPv4+IPv6 的。
    但从正文来看,你似乎在使用某个服务商提供的负载均衡之类的服务,那就要看服务商的支持情况了。
    lithium4010
        7
    lithium4010  
       2020-12-15 11:36:00 +08:00
    能啊
    bfdh
        8
    bfdh  
       2020-12-15 12:19:25 +08:00
    不对
    longaiwp
        9
    longaiwp  
       2020-12-15 14:31:56 +08:00
    你能不能先描述一下你在干嘛?
    cloverzrg2
        10
    cloverzrg2  
       2020-12-15 15:02:29 +08:00
    可以看出你计算机基础基本为 0
    IMCA1024
        11
    IMCA1024  
       2020-12-15 15:07:00 +08:00
    应该可以吖
    我看某些 app 首页 logo 下面还写着支持 ipv6 了
    cheng6563
        12
    cheng6563  
       2020-12-15 16:09:13 +08:00
    TCP/IP 你看中间有个斜杠,他们其实是分开的
    ragnaroks
        13
    ragnaroks  
       2020-12-15 16:12:41 +08:00
    考虑竞争 csgo 吧年度 TOP 吗?
    Zhuzhuchenyan
        14
    Zhuzhuchenyan  
       2020-12-15 17:56:59 +08:00
    从 tcp socket 上来看的话,双栈 socket 是很常见的吧,
    简单举个 C#的例子,
    var listener = new TcpListener(IPAddress.IPv6Any, Constant.TcpPort);
    listener.Server.SetSocketOption(SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);
    这样这个 tcp listener 就可以在同一个端口同时监听 v4 和 v6 的流量,v4 的地址会被加上 ffff:前缀变成兼容 v6 的
    flynaj
        15
    flynaj  
       2020-12-15 18:34:53 +08:00
    golang 写的软件都同时支持 ip4/v6 的。最简单的一个程序。 无论你用 http://127.0.0.1:800 还是 http://[::1]:800 或者网卡上的其它 IP 都可以访问!
    ```
    package main

    import (
    "net/http"
    )

    func main() {
    http.ListenAndServe(":800", http.FileServer( http.Dir(".")))
    }
    ```
    jinliming2
        16
    jinliming2  
       2020-12-15 23:23:27 +08:00
    > 简单看了看 ipv6 相关的 api
    我想请问的是,IPv6 的什么 API ?

    如果从监听端口提供服务的角度来看,通常监听 [::] 而不指定其他选项的话,那么就是 IPv4 和 IPv6 都可以支持访问。(如果监听 [::] 导致 IPv4 不能访问,要检查一下是否设置了 IPv6 Only 的选项,不同语言 /程序配置不一样)
    如果是从程序本身的角度来看,如果程序内部对 IP 地址进行了处理,并且只考虑了 IPv4 的情况(比如拿字符串存 IP,只保留了 char[16] 之类的硬编码),那么则需要对程序进行更新。
    cxy4133
        17
    cxy4133  
       2020-12-16 09:52:00 +08:00
    @Zhuzhuchenyan 正解 hh
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:21 · PVG 02:21 · LAX 10:21 · JFK 13:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.