中国A类IP地址小调查以及IPv6展望

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013390476/article/details/47132221

前言

我今天在学校的机房里面学习 TCP/IP + Linux。我在Linux中敲下如下几行命令:

  1. ifconfig :用来确定我的ip,发现是59.71.137.69。惊讶的发现:这是一个公有的A类地址!很久以前就听说中国的A类地址非常珍贵,难以寻觅,如今我却是A类地址。我告诉我爸,然后我爸在家远程登陆我的linux,登陆成功。毫无疑问,我是一个公有的A类IP地址。看来,武汉市教育网是属于A类IP地址。
  2. nmap -sP 59.71.137.1-255:我把整个机房”扫描”一遍,用于找出主机(电脑)是否是存在于相应的网络段中。我发现有24个Host 处于 up 状态。我数了一下机房里面的人数,23个人。看来我一个人占两个IP(windows+虚拟机中的linux),其余人一人一个IP,刚好2+22=24。
    左边是iptraf用来监控流量,右边是nmap -sP,显示参数网段内的主机
    用nmap扫描机房里的主机,全是外网的A类IP。上述现象产生了我调查中国A类IP地址做一次小调查的想法。

中国A类IP地址调查

A、B、C类IP地址
图片:A、B、C类地址分类

网上有人说:中国没有A类IP地址。我说:这是谬论!中国确实有A类IP地址,我现在不就是在使用A类IP地址么。实际上在我看来,中国是没有一个“完整的A类IP地址”。所谓“完整”,是指一个连续的2^24次方个A类IP,比如苹果公司的IP:17.0.0.0 ~~17.255.255.255,参考链接。原来,中国所分到的A类IP,是切成很多很多小段的,参考百度文库链接

网上又有人说:中国的A类IP地址非常之少。真的很少么?如果真的很少,到底有多少?我做了一个小调查~

  1. 获取数据。我在百度搜索关键词“中国的A类IP地址列表”,排名3名的网址分别是:百度文库,豆丁网,天涯社区。我分别看了看,居然一模一样。我认为,这些数据的可靠性十分高,于是以此数据作为调查样本。
  2. 我把数据复制到txt文档中。
  3. 编写C++程序,处理这一些数据。
  4. 得出结果:纯理论上,中国共有7976.6万个A类IP,全球总共有20.974亿个A类IP地址。中国的A类IP地址占全球的3.8031%

调查分析

  1. 中国作为全球第一大人口大国,其人口13.64亿,占全球72.40亿的18.84%。相比之下,A类地址只占全球的3.8031%,相差数倍。反观美国,其人口3.226亿,占全球4.46%,其拥有A类地址据说占超过70%。呵呵,没办法,整个互联网是美国人一手弄出来的呀。中国占有的A类IP地址的数量和中国的人口与综合国力相比,是严重不相称的!
  2. 上述计算得出的中国拥有A类IP地址7976.6万个,是理想的最大值,然而事实上,IP的地址的分配存浪费现象。比如:给苹果公司分配了17.0.0.0/8,及一个“完整”的A类IP地址,可以代表1677万个主机。然而苹果公司再有能耐,其研发部门、财务部门、市场部门等等部门加起来拥有的主机(电脑)加起来能够达到1677万么?这里还姑且不计算苹果公司的私有地址。再比如:子网划分可以很大程度上合理使用IP地址资源,然而子网划分技术本身又会产生许多无法分配给主机的广播地址(全1)和本网络地址(全0)。因此综上所述,能够真真切切使用A类IP地址的国人,远低于7976.6万这一理想数据

补充知识

A类地址的网络号只有126 (2^7-2)个,而B类地址的网络号有16383 (2^14-1)个,C类地址的网络号有2097151(2^21-1)个。可以这么理解,物以稀为贵,因此A类地址可以说是最为“金贵”的。一般来说,A类地址用于大型网络,B类地址用于中型网络,C类地址用于小型网络。
网络号

FAQ:
Q:A类IP地址真的金贵么?上面不是说A类IP地址有20.648亿么,占总共约40亿的一半呀。
A:A类IP地址之所以认为很金贵,是因为A类地址的网络号十分少,只有126个。每一个A级地址代表约1677万个地址,所有A类地址算出来有20.974亿之多了。中国没有分到一个“完整”的A类IP地址,而只是分到了一些A类IP地址之间的“缝隙”。在互联网的早期,很多“完整”或“准完整”的A类地址已经被美国的政府机构以及公司巨头瓜分的差不多了。中国能够申请的IP地址资源中,A类极少数,B类也不多,C类最多。

Q:192.168.1.*是啥?
A:windows系统下,打开cmd敲下ipconfig就可以查看自己的IP地址,相信很多很发现自己的IP是192.168.1.*。这很正常,这说明你使用的IP是属于私有IP。首先IP的分成两种,共有IP和私有IP。私有IP技术是解决IP资源匮乏的一个重要方法。家用路由器的默认IP地址一般是192.168.1.1。

IP的合理利用以及IPv6的展望

合理使用

我上述所说的IP地址,都默认是指IPv4,其实早在2011年2月,IPv4已经分配完毕。参考链接。IP地址资源极其宝贵,因此需要合理利用。我简单介绍3种合理利用IP资源的方法:
1. 子网划分:借用主机号的高若干位来充当子网地址,从而将原网络划分成若干子网。 举个例子,假设有一个公司,这个公司有两个部门:位于北京总部和位于上海的分部,两个部门分别有100台电脑。这个公司申请C类IP的时候,不需要申请两个IP,而是只需要申请一个IP地址就行了,假设是201.102.123.0。子网掩码设定为255.255.255.128就可以把一个C类IP地址划分为两个子网:201.102.123.0 ~~ 201.102.123.127
201.102.123.128~ 201.102.123.255。 这样的话北京和上海分别使用同一个C类IP地址的两个不同子网。如果没有子网划分技术的话,北京和上海就需要分别申请两个不同的C类IP,这就造成了IP浪费。
2. 私有地址的使用。与可以Internet使用的公网IP地址不同,私有IP地址是特定只能在局域网中使用的IP地址。私有地址分为三类,A类是10.x.x.x,B类是172.16.x.x–172.31.x.x,C类是192.168.x.x。假设你向电信申请了一个C类IP公有地址,那么你可以自己组建一个无线局域网(wifi),你可以组建A类、B类、C类私有网三者中任意一个。不过,一般而言,都是组建C类私有网。假设你在windows的cmd里面敲下:ipconfig。那么你可以观察到你的“无线局域网适配器”里面的IPv4地址是192.168. * . * ,这说明你正在使用私有地址。私有地址需要转换成公有地址才能够“出去”,这项技术叫做NAT链接。私有地址的使用,可以让很多人同时使用一个公有IP地址。
3. 动态IP。每一次上网,都临时分配一个IP地址,往往每次分配的IP地址都不同。很多人上网的时间和空间是“离散”的,不连续。比如,一个人一天上了3次网,每一次1个小时。那么如果给这个人分配一个固定的IP地址,那么是极其浪费的,因为一天24个小时中,只有3个小时得到了利用。如果采取动态分配IP的方法,只是在上网的时候临时分配一个IP地址。这样同一个IP地址可以在同一天之内被多个人使用。假设每一个每天上3个小时的网,那么一个IP地址最理想可以同时供8个人使用。这样,一个IP地址在不同时间段分给不同人使用。

IPv6

无论如何合理使用IP地址,再怎么“节约”,在移动互联网的浪潮和物联网的大爆发之下,IPv4终究是不够用的。更何况在互联网早期,30年前天真的人类认为40亿个IPv4地址是天文数字,取之不尽用之不竭也,因此经常随意分配,导致很多IP地址已经不可逆般地被大量不合理分配掉了。一方面,手机的数量超过电脑,手机上网当然也需要IP地址;另一方面,物联网方兴未艾,夸张的说,未来每一粒沙子都会拥有一个IP地址。在这样的背景之下,IPv6不可避免的将要走向历史的前沿。

IPv6是何方神圣?其全称是Internet Protocal version 6。与IPv4的一个IP地址只有32位不同,一个IPv6的IP地址将有128位,可以说是指数级别的提高。经计算,每平方厘米的土地上,可以拥有2244个IP地址。我在windows下cmd敲下ipconfig,便可以发现IPv6的踪迹。
IPv6
如图所示,我的IPv6的地址是 fe80::28f3:e757:ca41:5dea 。有人可能会机智的问:“这怎么就是128位?完全看不出来呀!”原来是这样的:一个数字或者字母均是16进制的,16进制代表4位。所以fe80就是4 * 4=16位。然而,如果这样数下来,只有16 * 5 =80 位呀,肿么破。原来是这样的, 这里面藏有玄机:问题出在“ :: ” 符号。这个”::“符号,代表着48个0。所以我的IPv6扩展开来就是fe80:0000:0000:0000:28f3:e757:ca41:5dea。这样就没有问题了,详情参考链接

IPv6离我们并不遥远,目前正是从IPv4向IPv6的过渡期。随着IPv6的大力发展,将从根本上解决IP地址不够用的问题,因而成为互联网发展的超级助推器。”互联网+“在未来将会无处不在!

附加程序代码

源自百度文库的A类IP地址数据样本格式:

************************
Author: Caitao Zhan
Created: 2015/7/29
************************
main.cpp

#include <iostream>
#include <fstream>
#include "aClassIP.h"
using namespace std;

int main()
{
    ifstream in("aClassIP.txt");
    if (in.is_open())
    {
        int sum = 0; 
        while (in.peek() != EOF)
        {
            int a, b, c, d;
            int e, f, g, h;
            char ch;
            in >> a; in >> ch;
            in >> b; in >> ch;
            in >> c; in >> ch;
            in >> d; 
            in.get(), in.get();  //aClassIP.txt 出现了一个中文字符,其占两个字节。。
            aClassIP aIP1(a, b, c, d);

            in >> e; in >> ch;
            in >> f; in >> ch;
            in >> g; in >> ch;
            in >> h;
            aClassIP aIP2(e, f, g, h);

            sum += aIP2.minus(aIP1);
        }
        cout << sum << endl;
        cout << 126 * 256 * 256 * 254 << endl;
        cout << (double)sum / (double)(126 * 256 * 256 * 254) << endl;
    }
    else
    {
        cerr << "Error openning file!" << endl;
    }

    in.close();
    system("pause");
    return 0;
}
aClassIP.h

#pragma once
#include <iostream>
#include <iomanip>
using namespace std;

class aClassIP
{
public:
    int m_a;  //为了减少麻烦,在此舍弃private(一般不推荐。。。)
    int m_b;
    int m_c;
    int m_d;

    aClassIP();
    aClassIP(int a, int b, int c, int d);
    int minus(const aClassIP& aIP);//两个aClassIP对象之间的减法,计算两个a类IP对象之间的个数
    friend ostream& operator<<(ostream &out, const aClassIP &aIP);
};
aClassIP.cpp

#include "aClassIP.h"

aClassIP::aClassIP(){};

aClassIP::aClassIP(int a, int b, int c, int d) :m_a(a), m_b(b), m_c(c), m_d(d){};

/*
*this aClassIP 是数值上更大的一个,参数中的aClassIP是较小的一个,算出两个IP之差
这计算出来的结果是纯理论最大值,不考虑子网划分等等技术。
乘以254是因为不考虑全1和全0,主机号全1代表广播,全0代表该网络本身*/
int aClassIP::minus(const aClassIP& aIP)
{
    int sum = 0;
    sum += (m_a - aIP.m_a) * 256 * 256 * 254;
    sum += (m_b - aIP.m_b) * 256 * 254;
    sum += (m_c - aIP.m_c) * 254;
    sum += (m_d - aIP.m_d);
    return sum;
}
/*
曾经一度以为此算法在逻辑层面有错误,后来经过实验证明是正确的。
以下是一度引起我警觉的测试数据:
59.192.0.0~60.31.255.255,我一度以为,这个数据需要分开计算,如下:
59.192.0.0~59.255.255.255 + 60.0.0.0~60.31.255.255
然而我发现:一次性计算和分步骤计算的结果是一样的。。。*/

/*
重载operator<<*/
ostream& operator<<(ostream &out, const aClassIP &aIP)
{
    out << setw(3) << aIP.m_a << '.' << setw(3) << aIP.m_b << '.'
     << setw(3) << aIP.m_c << '.' << setw(3) << aIP.m_d;
    return out;
}
展开阅读全文

IPv6地址以及IPv6的DNS

11-17

• 随着信息技术的不断进步,互联网在我国得到了迅速的发展。据调查,我国上网人数突破5千万,达到世界第二。互联网上的计算机之间的通信采用IP技术,现在的IP版本是IPv4。但是,随着互联网络规模的迅速扩大,IPv4逐渐暴露出了一些缺陷。为了更好的适应互联网的发展,国际网络标准组织提出了新的IP版本IPv6,它弥补了IPv4的缺陷,是将取而代之的新技术。rnrn IPv6协议具有很多优点。首先,它提供了巨大的地址空间,这实际上是推广IPv6的最大动力。其次,IPv6的地址结构和地址分配采用严格的层次结构,以便于进行地址聚合,从而大大减小了路由器中路由表的规模。再次,IPv6协议支持网络节点的地址自动配置,可以实现即插即用功能。而且, IPv6协议对主机移动性有较好的支持,适合于越来越多的互联网移动应用。另外,IPv6协议在安全性、对多媒体流的支持性等方面都具有超过IPv4的优势。rnrn 互联网上的应用很多,但大都离不开域名系统(DNS)的支持,域名系统的主要作用是用来进行域名与IP地址的转换,即域名解析,比如浏览网站、 Email、FTP等都需要先进行域名解析。IPv6网络中的DNS非常重要,一些IPv6的新特性和DNS的支持密不可分。下面从IPv6 DNS的体系结构、IPv6的地址解析、IPv6地址自动配置和即插即用、IPv4到IPv6的过渡等几方面对IPv6 DNS进行介绍。rnrn (1)IPv6域名系统的体系结构rnrn IPv6网络中的DNS与IPv4的DNS在体系结构上是一致的,都采用树型结构的域名空间。IPv4协议与IPv6协议的不同并不意味着需要单独两套IPv4 DNS体系和IPv6 DNS体系,相反的是,DNS的体系和域名空间必须是一致的,即,IPv4和IPv6共同拥有统一的域名空间。在IPv4到IPv6的过渡阶段,域名可以同时对应于多个IPv4和IPv6的地址。以后随着IPv6网络的普及,IPv6地址将逐渐取代IPv4地址。rnrn (2)DNS对IPv6地址层次性的支持rnrn IPv6可聚合全局单播地址是在全局范围内使用的地址,必须进行层次划分及地址聚合。IPv6全局单播地址的分配方式如下:顶级地址聚合机构 TLA(即大的ISP或地址管理机构)获得大块地址,负责给次级地址聚合机构NLA(中小规模ISP)分配地址,NLA给站点级地址聚合机构SLA(子网)和网络用户分配地址。IPv6地址的层次性在DNS中通过地址链技术可以得到很好的支持。下面从DNS正向地址解析和反向地址解析两方面进行分析。rnrn a. 正向解析rnrn IPv4的地址正向解析的资源记录是“A”记录。IPv6地址的正向解析目前有两种资源记录,即,“AAAA”和“A6”记录。其中, “AAAA”较早提出<4>,它是对“A”记录的简单扩展,由于IP地址由32位扩展到128位,扩大了4倍,所以资源记录由“A”扩大成4 个“A”。“AAAA”用来表示域名和IPv6地址的对应关系,并不支持地址的层次性。rnrn “A6”在RFC2874<5>中提出,它是把一个IPv6地址与多个“A6”记录建立联系,每个“A6”记录都只包含了IPv6地址的一部分,结合后拼装成一个完整的IPv6地址。“A6”记录支持一些“AAAA”所不具备的新特性,如地址聚合,地址更改(Renumber)等。rnrn 首先,“A6”记录方式根据TLA、NLA和SLA的分配层次把128位的IPv6的地址分解成为若干级的地址前缀和地址后缀,构成了一个地址链。每个地址前缀和地址后缀都是地址链上的一环,一个完整的地址链就组成一个IPv6地址。这种思想符合IPv6地址的层次结构,从而支持地址聚合。rnrn 其次,用户在改变ISP时,要随ISP改变而改变其拥有的IPv6地址。如果手工修改用户子网中所有在DNS中注册的地址,是一件非常繁琐的事情。而在用“A6”记录表示的地址链中,只要改变地址前缀对应的ISP名字即可,可以大大减少DNS中资源记录的修改。并且在地址分配层次中越靠近底层,所需要改动的越少。rnrn b. 反向解析rnrn IPv6反向解析的记录和IPv4一样,是“PTR”,但地址表示形式有两种。一种是用 “.”分隔的半字节16进制数字格式(Nibble Format),低位地址在前,高位地址在后,域后缀是“IP6.INT.”。另一种是二进制串(Bit-string)格式,以“\<”开头, 16进制地址(无分隔符,高位在前,低位在后)居中,地址后加“>”,域后缀是“IP6.ARPA.”。半字节16进制数字格式与“AAAA”对应,是对IPv4的简单扩展。二进制串格式与“A6”记录对应,地址也象“A6”一样,可以分成多级地址链表示,每一级的授权用“DNAME”记录。和 “A6”一样,二进制串格式也支持地址层次特性。rnrn 总之,以地址链形式表示的IPv6地址体现了地址的层次性,支持地址聚合和地址更改。但是,由于一次完整的地址解析分成多个步骤进行,需要按照地址的分配层次关系到不同的DNS服务器进行查询。所有的查询都成功才能得到完整的解析结果。这势必会延长解析时间,出错的机会也增加。因此,需要进一步改进DNS地址链功能,提高域名解析的速度才能为用户提供理想的服务。rnrn (3)IPv6中的即插即用与DNSrnrn IPv6协议支持地址自动配置,这是一种即插即用的机制,在没有任何人工干预的情况下,IPv6网络接口可以获得链路局部地址、站点局部地址和全局地址等,并且可以防止地址重复。IPv6支持无状态地址自动配置和有状态地址自动配置两种方式。rnrn IPv6节点通过地址自动配置得到IPv6地址和网关地址。但是,地址自动配置中不包括DNS服务器的自动配置。如何自动发现提供解析服务的DNS服务器也是一个需要解决的问题。正在研究的DNS服务器的自动发现的解决方法可以分为无状态和有状态两类。rnrn 在无状态的方式下,需要为子网内部的DNS服务器配置站点范围内的任播地址。要进行自动配置的节点以该任播地址为目的地址发送服务器发现请求,询问DNS服务器地址、域名和搜索路径等DNS信息。这个请求到达距离最近的DNS服务器,服务器根据请求,回答DNS服务器单播地址、域名和搜索路径等 DNS信息。节点根据服务器的应答配置本机DNS信息,以后的DNS请求就直接用单播地址发送给DNS服务器。rnrn 另外,也可以不用站点范围内的任播地址,而采用站点范围内的多播地址或链路多播地址等。还可以一直用站点范围内的任播地址作为DNS服务器的地址,所有的DNS解析请求都发送给这个任播地址。距离最近的DNS服务器负责解析这个请求,得到解析结果后把结果返回请求节点,而不像上述做法是把DNS 服务器单播地址、域名和搜索路径等DNS信息告诉节点。从网络扩展性,安全性,实用性等多方面综合考虑,第一种采用站点范围内的任播地址作为DNS服务器地址的方式相对较好。rnrn 在有状态的DNS服务器发现方式下,是通过类似DHCP这样的服务器把DNS服务器地址、域名和搜索路径等DNS信息告诉节点。当然,这样做需要额外的服务器。rnrn (4)IPv6过渡阶段与DNSrnrn 在IPv4到IPv6的过渡过程中,作为Internet基础架构的DNS服务也要支持这种网络协议的升级和转换。IPv4和IPv6的DNS记录格式等方面有所不同,为了实现IPv4网络和IPv6网络之间的DNS查询和响应,可以采用应用层网关DNS-ALG结合NAT-PT的方法,在 IPv4和IPv6网络之间起到一个翻译的作用。例如,IPv4的地址域名映射使用“A”记录,而IPv6使用“AAAA”或“A6”记录。那么, IPv4的节点发送到IPv6网络的DNS查询请求是“A”记录,DNS-ALG就把“A”改写成“AAAA”,并发送给IPv6网络中的DNS服务器。当服务器的回答到达DNS-ALG时,DNS-ALG修改回答,把“AAAA”改为“A”,把IPv6地址改成DNS-ALG地址池中的IPv4转换地址,把这个IPv4转换地址和IPv6地址之间的映射关系通知NAT-PT,并把这个IPv4转换地址作为解析结果返回IPv4主机。IPv4主机就以这个IPv4转换地址作为目的地址与实际的IPv6主机通过NAT-PT通信。rn 论坛

没有更多推荐了,返回首页