IPv6吸食

在我装满盒式磁带的抽屉里,有一本卡尔·马拉穆兹出版的《网络谈话电台》的录音带集,这是互联网上第一个也是迄今为止最极客的电台。

这些磁带是1994年的,主题是“IPng”,即最终成为IPv6的IPv4替代品。说我现在有点厌倦了IPv6,就是指责教皇信教。

数字形式的IPv4地址写为192.168.0.1,为了不将IPv6与IPv4混淆,在RFC1884中决定IPv6将使用冒号和16位组,并且因为128位是很多位,所以引入了秘密‘::’技巧,以抑制我们可能永远不需要的所有零位:1080::8:800:200C:417A

之所以选择冒号,是因为它已经在MAC/以太网地址中使用,并且在那里没有损坏,而且它在Shell中不是一个麻烦的元字符。别担心。

大多数协议都有一个众所周知的服务编号,Telnet是23,SSH是22,HTTP是80,所以人们通常只需要关心IP编号。

除非它们不这样做,例如,当它们在同一台机器上运行多个Web服务器时。

别担心,控制URL外观的力量说,我们只需在IP#后面加上冒号就可以了:

这显然不适用于IPv6,所以RFC3986转过身来说:“该死,我们没有想到这一点”,并将IPv6地址放入 [...] 带给我们:

还记得那个“炮弹里的无害”的细节吗?是啊,很抱歉。

现在,还有一个RFC认可的API用于将套接字地址转换为ASCII字符串,即getnameinfo(),如果您告诉它您想要一个数字返回值,您就会得到一个数字返回值,而且您甚至不需要知道它是IPv4地址还是IPv6地址。

但是它返回一个缓冲区中的IP#和另一个缓冲区中的端口号,所以如果您想要按照RFC5952推荐的方式(与RFC3986相同)格式化sockaddr,则需要检查sockaddr中的Version字段,以确定是否应该这样做

“%S:%S”,主机,端口

“ [%s] :%S“,主机,端口

粗心大意的标准化成本代码,我以前提过吗?

Varnish将套接字地址报告为两个字段:IP空间端口,现在您知道原因了。

直到下一次,

保尔-亨宁,2010-08-24