端口如何与 IPv6 配合使用?

Posted

技术标签:

【中文标题】端口如何与 IPv6 配合使用?【英文标题】:How do ports work with IPv6? 【发布时间】:2010-09-16 06:07:16 【问题描述】:

传统的 IPv4 点分四边形表示法用冒号将地址与端口隔开,如以下环回接口上的网络服务器示例:

127.0.0.1:80

但使用 IPv6 表示法,地址本身可以包含冒号。例如,这是环回地址的简写形式:

::1

如何在 IPv6 地址/端口端点的文本表示中表示端口(或其功能等效项)?

【问题讨论】:

【参考方案1】:

Wikipedia points out 指出,IPv6 地址的语法包含冒号,并且具有防止固定长度解析的简短形式,因此您必须用 [] 分隔地址部分。这完全避免了奇怪的解析错误。

(取自an editPeter Wone对原问题提出。)

【讨论】:

【参考方案2】:

我想说最好的参考是Format for Literal IPv6 Addresses in URL's,其中定义了 [] 的用法。

另外,如果是用于编程和代码,特别是Java,我建议这里阅读Class for Inet6Addressjava/net/URL definition,其中详细介绍了Inet6内涵中Inet4地址的使用以及其他情况。就我而言,IPv4 映射地址的形式为::ffff:w.x.y.z,用于 IPv6 地址表示 IPv4 地址也解决了我的问题。它允许本地程序在与 IPv4 和 IPv6 节点通信时使用相同的地址数据结构和相同的套接字。亚马逊云 Linux 盒子默认设置就是这种情况。

【讨论】:

【参考方案3】:

它们的工作方式与今天几乎相同。但是,请确保在您的 IP 周围添加[]

例如:http://[1fff:0:a88:85a3::ac1f]:8001/index.html

***有一篇关于 IPv6 的不错的文章:http://en.wikipedia.org/wiki/IPv6#Addressing

【讨论】:

【参考方案4】:

我很确定端口只在 tcp 和 udp 中有一部分。所以即使使用新的IP协议也是一样的

【讨论】:

DCCP 和 SCTP 也有端口,但 SCTP 中的端口略有不同,因为附加了关联标识符。【参考方案5】:

它们是一样的,不是吗?现在我对自己失去了信心,但我真的认为 IPv6 只是一种寻址方式的改变。 TCP 和 UDP 仍然像在 IPv4 下一样被寻址。

【讨论】:

这不仅仅是地址更改。它应该带来一些很酷的功能(例如全球多播)。但是是的,它对上层是透明的。 “只是”地址更改。您所说的是寻址 :) 但它关注/混淆人们的原因是网络设计将“寻址”视为地址,将“服务”视为端口号。但是你不能在没有这两者的情况下在 TCP 或 UDP 中做任何事情,所以大多数人都试图让套接字级寻址工作,并且无法理解为什么人们不断编造或更改分隔符:空格,然后是点,然后冒号,然后是磅符号?所以,是的,我可以看到 IPv6 让人们担心。【参考方案6】:

IPv6 中使用的协议与 IPv4 中的协议相同。两个版本之间唯一改变的是寻址方案,DHCP [DHCPv6] 和 ICMP [ICMPv6]。所以基本上,任何与 TCP/UDP 相关的东西,包括端口范围 (0-65535) 都保持不变。

编辑: 端口 0 是 TCP 中的保留端口,但它确实存在。见RFC793

【讨论】:

以上是关于端口如何与 IPv6 配合使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NodeJS 中使用 http 模块在同一端口上打开 IPv4 和 IPv6 套接字?

如何设置IPv4和IPv6报文的DSCP值——网络测试仪实操

将 IPv4/IPv6 地址和端口设置为 sockaddr_storage 结构

从给定的 IPv6 列表中搜索 IPv6:端口组合的最快搜索算法是啥:O(1)时间复杂度的端口?

解决CentOS7 docker容器映射端口只监听ipv6的问题

(网络安全)主动信息收集---端口扫描同时配合wireshark分析