Igo*_*rov 8 iphone networking ipv4 ipv6 ios
我试图了解我的活动网络接口IP版本是什么 - IPv4或IPv6.我正在使用下一个说明http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/来测试我的应用程序的IPv6兼容性.
我检查了这里可用的所有资源(例如Swift - 获取设备的IP地址,如何以编程方式获取iphone的ip地址,究竟是什么意思是iOS网络接口名称?什么是pdp_ip?什么是ap?),它有助于获得可用接口列表.当我的iPhone连接到IPv4 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "192.168.1.190";
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
当它连接到IPv6 WiFi网络时,列表是下一个:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "169.254.127.94";
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都有en0/ipv4和en0/ipv6,所以我不清楚如何以编程方式决定我的网络的ip版本实际上是什么.
非常感谢任何帮助.提前致谢.
第一个也是最重要的事情是,你几乎总是"在"IPv4和IPv6网络上"(除非其中一个被禁用).未能收到DHCP地址并不意味着您没有"在网络上".它只是意味着没有DHCP服务器与您交谈(拥有没有DHCP服务器的网络是完全合法的).事实上,没有其他人与你在这个网络上并不意味着你不在网络上.你可以单独在网络上.你是.
迂腐,但对于理解正在发生的事情很重要.你通常的意思是"我在这个网络上有一个'公开'可路由的地址." 而大多数人的真正含义(并且是一个完全不同的问题,往往很难回答)是"我的'主要'网络是什么?" (这尤其困难,因为您的"主要"网络可能会有所不同,具体取决于您尝试访问的地址.)
但是对于你可能想要回答的实际问题,"我是否有一个已分配且可能可路由的IPv4/6地址?" 为此,您必须查看您拥有的地址,并查看其分配的内容.我首选的列表是维基百科的保留IP地址.看一下,我们可以考虑上面的每个地址.
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df"; # fe80 => Link local (not routable)
"en0/ipv4" = "192.168.1.190"; # 192.168 => Private network (but *probably* NAT)
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e"; # fdba => Unique local address (not routable)
"lo0/ipv4" = "127.0.0.1"; # 127 => Host loopback (not routable)
"lo0/ipv6" = "fe80::1"; # fe80 => Host loopback (not routable)
"pdp_ip0/ipv4" = "100.83.148.33"; # 100.83 => Service provider (not useful to you)
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded"; # fe80 => Host loopback (not routable)
Run Code Online (Sandbox Code Playgroud)
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df"; # Loopback
"en0/ipv4" = "169.254.127.94"; # Link local (not routable)
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678"; # 2001 => "Teredo tunnel" (IPv6 routable over IPv4)
"lo0/ipv4" = "127.0.0.1"; # loopback
"lo0/ipv6" = "fe80::1"; # loopback
"pdp_ip0/ipv4" = "100.83.148.33"; # Service provider
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded"; # loopback
Run Code Online (Sandbox Code Playgroud)
特别是你通常希望看到它en0(第一个以太网接口,在iPhone上是WiFi).你可以在第一种情况下看到:
"en0/ipv4" = "192.168.1.190"; # 192.168 => Private network (but *probably* NAT)
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e"; # fdba => Unique local address (not routable)
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,你有:
"en0/ipv4" = "169.254.127.94"; # Link local (not routable)
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678"; # 2001 => "Teredo tunnel" (IPv6 routable over IPv4)
Run Code Online (Sandbox Code Playgroud)
这就是你怎么知道哪一个是可路由的.你必须检查它的范围.(对于问题:"为什么它不能只说'你在互联网上?',答案的一个主要部分是该规范没有定义"互联网. "互联网只是一个非常大的特定网络.而且,你看到的大多数IPv4地址无论如何都是私有的,技术上并不在"互联网上".网卡不知道是否存在从私有网络到公共网络的某个地方的NAT.)
顺便说一句,当我说"不可路由"时,这并不意味着它不是你的主要地址.例如,您可以拥有基于链接本地地址的整个网络(我已经完成了很多次).但是这些地址不会路由(即它们不会被转发到当前网段),因此对于大多数常见用途,可以认为它们"不是真正的地址".同样,我完全用主机地址构建"网络",但由于它们不通过当前机器,它们通常不是人们对"网络"的意思.
| 归档时间: |
|
| 查看次数: |
1803 次 |
| 最近记录: |