2011-02-06 63 views
8

我目前正试图了解IPv6地址如何工作。分别用于小型和组织网络的链接本地和本地本地地址。但是,如果其中一个客户也可以访问互联网,则需要两个IP,对吗?一个链接/网站本地和一个全球地址。接口和路由器是如何管理的?一个接口需要两个IP,因为IPv6中没有NAT。IPv6接口上的本地链接和全局IP

+2

这相当属于http://serverfault.com/;也许版主会转移这个问题,或者你可以在那里重新提问。 – 9000 2011-02-06 11:46:18

+1

这个问题当然有与编程有关的方面。某些应用程序可能需要将接口地址列表折叠为某种算法,并且当您从getifaddrs()返回时,它有助于了解您正在处理的地址类型。 – 2011-02-07 06:04:24

回答

14

在一般情况下,接口有一个链路本地范围单播地址和零个或多个全局范围单播地址。 (它们也可能是一些有限数量的多播组的成员。)地址可以像在IPv4中一样手动或通过DHCPv6分配,但当路由器通告允许时,它们有时(并非总是)会自动生成。一些主机实现会自动为路由器通告的每个前缀生成一个永久性全局地址,并为其附带一个辅助隐私地址,c.f. RFC 4191。在使用DHCPv6分配地址的情况下,主机可能会请求一个或多个临时地址而不是隐私地址。

请勿使用站点本地地址。它们被RFC 3879弃用,主要是因为sin6_scope_id字段没有为站点本地地址定义好。从getifaddrs()返回的列表中看到它们的应用程序可能会将它们带有标准错误流的诊断消息丢弃。应用程序应该期望网络管理员将使用唯一的本地地址(ULA),而不是站点本地地址,c.f. RFC 4941

ULA地址的可达性通常不能由应用软件决定。您唯一能确定的是,它们无法通过全局公共无缺省区域的任何路径访问。它们可以从互联网上的任何地方到达,ULA前缀的路由在自治系统之间的双边协议中交换。另一方面,它们通常会通过IPv6本地网关进行广告,仅供用户本地使用,并且在家庭以外任何地方都无法到达,c.f. I-D.ietf-v6ops-ipv6-cpe-router

9

每个接口都有一个链路本地地址和一个或多个公共或站点本地地址。看起来是这样的:

$ ip -o -6 addr show dev eth0 
eth0 inet6 2001:abcd:ef::1/64 scope global (..) 
eth0 inet6 fe80::1234:5678:2/64 scope link (...) 

当发送的东西,一切都发送到链路本地地址(即fe80::/64)从本地链接地址发送的,一切从全球其他人。

(选择并不总是可能的。例如,如果回答ping命令,则答案的源IP将是请求的目的IP,不管哪一个地址)

相关问题