IP地址(Internet Protocol Address)
它来自TCP/IP协议,存在于其中的IP层,用于实现不同计算机之间的通信,类似于门牌号。
设计之处,IP地址是准备给地球上每一台计算机一个唯一的IP地址的,那是在1970年代,计算机尚未民用,只是存在于军队、科研院所,当然,体型巨大、拥有成本非常高也是重要原因。
但后来随着IT产业的发展,计算机数量出现暴增,最初设计的IP地址资源渐渐面临枯竭,于是,产生了最新的IPv6版本,之前的叫做IPv4版本,也就是当下使用最广泛的版本——IPv6尚未大范围使用,目前存在一个叫做“雪人计划”的测试平台(Testbed)在全球进行测试(关于“雪人计划”,百度百科说是由中国科学家发起的,其实大错特错,可以参考本文章的解释,对比了官网信息,果然)。
IPv4地址是一个32位的二进制地址,从00000000 00000000 00000000 00000000到11111111 11111111 11111111 11111111,不方便看吧?于是,科学家设计了 点分十进制记法(dotted decimal notation),前面两个地址科转换为0.0.0.0和255.255.255.255,这样就好多了。
由于IPv4的地址池已分配完毕(美国分配了最多的IPv4地址,毕竟因特网都是由美国搞起来的嘛)(百度百科:2011年2月3日IPv4位地址分配完毕),于是提出了IPv6,而IPv6地址则是一个128位二进制地址,这就比IPv4地址多太多了,见过一些中文资料,说是可以给地球上每一粒沙子进行地址分配,或许吧!可是,沙子还是有基本原子组成的,请问IPv6够吗?孤以为,科学家不会这么说的,媒体,可以理解,不少标题党嘛——为了生存!
下面是一些源起时间点——来自百度百科的TCP/IP协议词条:
-1970年12月制定出来了最初的通信协议由卡恩(Robert E. Kahn)开发、瑟夫(Vinton G.Cerf,从小喜欢标新立异,坚强而又热情)参与的“网络控制协议”(NCP);
-1974年12月,卡恩、瑟夫的第一份TCP协议详细说明正式发表。当时美国国防部与三个科学家小组签定了完成TCP/IP的协议,结果由瑟夫领衔的小组捷足先登,首先制定出了通过详细定义的TCP/IP协议标准。
-1983年1月1日,运行较长时期曾被人们习惯了的NCP被停止使用,TCP/IP协议作为因特网上所有主机间的共同协议,从此以后被作为一种必须遵守的规则被肯定和应用。
需要知道的是,最初并非只有TCP/IP协议,还有很多科学家开发了一些其它协议,但经过选择、淘汰,TCP/IP协议被广泛地使用起来。
目前广泛使用的IPv4地址分为A、B、C、D、E五类,其中,D、E作为多播和保留使用,在前面三类中,又分为公网地址、私网地址。由于中国接入国际互联网时间较晚——1980年代末期,因此,中国获得的公网IP地址并不多,因此,大多数我们上网获取的IP地址为私网地址。
更多信息,请参考更多资料。 下面是TCP/IP协议(IP地址位于网络层)和IP地址的两张截图(如有侵权,请告知)。
在Windows下,大家可以使用下面的命令查看自己的IP地址相关信息:
ipconfig
可以添加“/all”选项,会看到更多信息。
在Linux下,可以使用下面的命令查看:
ifconfig
注意,是if,不是Windows下的ip了!同样的,可以添加“-a”选项查看更多信息。
域名(Domain Name)
点分十进制记法的IP地址很容易记录吗?也是不容易的!我们几乎不可能通过一个IP地址就知道它属于那个 对象(个人、公司、其它组织),除非每个人脑袋里装一个IP地址到所属对象的关系词典,于是,域名诞生了,这个工作交给机器系统来完成吧!
通过域名,人们可以很直接地知道其所属的 对象(著名的、热度靠前的),比如,www.google.com是谷歌的,www.taobao.com是阿里巴巴的,www.tmall.com还是阿里巴巴的。使用浏览器访问网站时,人们只需要在地址栏中输入域名即可访问网站(默认是使用HTTP协议,有时候网站启动了HTTPS,此时某些网站不会自动跳转到HTTPS网站,还没搞清楚)。
访问网站这个过程对于人们来说很简单了(搜索引擎、浏览器收藏夹、其它工具可以让这个过程更easy),但大家知道这个场景背后发生了什么吗?TCP/IP协议栈(对了,是 协议栈,是由多个协议组成的)是不支持域名的,两台计算机(你的电脑和网站服务器)是怎么进行通信的呢?这时就需要 域名解析 了!
域名解析 属于整个Internet,它是一个系统,由于将一个请求中的域名解析为IP地址,然后,两台计算机使用IP地址进行通信(中间还要经过交换机、路由器、防火墙等设备,需要更多网络知识才可以理解)。因此,访问网站的场景可以分为下面两步:
a.域名--域名解析--获得网站的IP地址;
b.使用网站的IP地址进行通信;
讲了这么多,那么,域名是什么?域名解析 系统 又是什么?
域名 是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(百度百科词条 域名);
域名解析 是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务(百度百科词条 域名解析)。
DNS服务器在域名解析过程中的查询顺序为:本地缓存记录、区域记录、转发域名服务器、根域名服务器。——引用自百度百科词条 DNS服务器
域名解析也是由电脑完成,这电脑当然是服务器了,也叫做DNS,Domain Name Server,下一小节详细介绍。
14:45补充:
ipconfig /flushdns 清楚本地DNS缓存
ipconfig /displaydns 显示本地DNS缓存
15:48补充:
来自*的资料更准确且权威:Domain Name
另外就是RFC文档了:RFC官网
域名解析系统(Domain Name Resolution)
域名解析服务,最早于1983年由保罗·莫卡派乔斯(Paul V. Mockapetris)发明;原始的技术规范在882号因特网标准草案(RFC 882)中发布。1987年发布的第1034和1035号草案修正了DNS技术规范,并废除了之前的第882和883号草案。在此之后对因特网标准草案的修改基本上没有涉及到DNS技术规范部分的改动。
备注,从TCP/IP在1974年发布,到1983年域名解析服务发明,间隔了9年时间。为何当初的科学家不一股脑地设计出来呢?或许可以,但难度极大,况且那个时候也没有更强大的计算力。幸好,人类拥有面对问题、困难时,分析问题、寻找问题解决方案 的超级能力。于是就由了一个叫做 迭代 的词,逐步改进,对象 之间的区别是,迭代的快慢和成本的高低。
在有了规范之后,就是开发域名解析软件了,有了软件,就可以实现域名解析的功能了。用户只需要每次向域名解析服务器发送查询请求,即可获得对应的IP地址。
此时存在一个问题,怎么保证域名解析获得的IP地址是正确的呢?具备权威性呢?要是存在几十个域名解析系统,那么,注册一个域名是否要在这几十个域名解析系统上都要做?
于是,一个统一的域名解析系统应运而生。
下面的文字摘录自百度百科词条 ICANN:
Internet起源于美国,在90年代之前一直是一个为军事、科研服务的网络。在90年代初,由美国国家科学基金会(NSF)为Internet提供资金并代表美国*与NSI公司(Network Solutions)签定了协议,将Internet*域名系统的注册、协调与维护的职责都交给了NSI。而Internet的地址资源分配则交由IANA来分配,由IANA将地址分配到ARIN(北美地区)、RIPE(欧洲地区)和APNIC(亚太地区),然后再由这些地区性组织将地址分配给各个ISP。
但是,随着Internet的全球性发展,越来越多的国家对由美国独自对Internet进行管理的方式表示不满,强烈呼吁对Internet的管理进行改革。
美国商业部在1998年初发布了Internet域名和地址管理的绿皮书,认为美国*有对 Internet的直接管理权,因此在它发布后遭到了除美国外几乎所有国家及机构的反对。
美国*在征求了大量意见后,于1998年6月5日发布了"绿皮书"的修改稿"白皮书"。白皮书提议在保证稳定性、竞争性、民间协调性和充分代表性的原则下,在1998年10月成立一个民间性的非盈利公司,即ICANN,开始参与管理Internet域名及地址资源的分配。
2009年10月2日已获准独立于美国*之外,取得独立地位。
2016年10月1日(美国东部时间),美国商务部下属机构国家电信和信息局把互联网域名管理权完全交给位于加利福尼亚州的“互联网名称与数字地址分配机构”(ICANN),两者之间的授权管理合同在10月1日自然失效,不再续签。这标志着作为世人日常生活一部分的互联网迈出走向【全球共治】的重要一步。
看到了吧?经过马上的时间、竞争和合作后,全球的Internet解析服务赢得了【全球共治】的局面,当然,还是要感谢美国及其科学家发明了Internet这个极好的东西!
1983到1998,15年;1998到2009,11年;2009到2016年,7年;
当然,故事未完,还将继续下去!未来会怎样?未来会更好!
除了时间,当然还有把自己的精时奉献给这项极好的东西的人们,尤其是科学家们。
ICANN负责做什么呢?看下面的百度百科词条 域名注册商 摘录:
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构是一个非营利性的国际组织,成立于1998年10月,是一个集合了全球网络界商业、技术及学术各领域专家的非营利性国际组织,负责互联网协议(IP)地址的空间分配、协议标识符的指派、通用*域名(gTLD)以及国家和地区*域名(ccTLD)系统的管理、以及根服务器系统的管理。
注意最后三项。这和本文讲解的内容有关系了。
ICANN负责管理gTLD、ccTLD和根服务器系统。
通用*域名有哪些呢?.com, .top, .net, .org, .gov, .edu, .mil, .int。
国家和地区*域名呢?地理*域名,共有243个国家和地区的代码,例如.CN代表中国,.UK代表英国。
那么,怎么拥有域名呢?要申请!向域名注册商申请!
在美国,域名注册商和ICANN之间还隔着一个Verisign公司,注册商相当于从Verisign公司批发域名,但管理注册机构还是ICANN。
而在中国,是没有Verisign的公司的,国内的CNNIC负责管理域名的,下面是来自其百度百科词条的介绍:
CNNIC是我国域名注册管理机构和域名根服务器运行机构。负责运行和管理国家*域名.CN、中文域名系统,以专业技术为全球用户提供不间断的域名注册、域名解析和WHOIS查询等服务。
其中的.CN*域名的运行和管理很关键,至于 中文域名系统 尚未使用过,发现一些公司的被抢注了。
关于我国对域名的管理,制定了一些法律法规,比如,《中国互联网络域名管理办法》、《非经营性互联网信息服务备案管理办法》,*国务院令第291号《*电信条例》、第292号《互联网信息服务管理办法》(简称ICP管理办法)……在注册商申请域名后,网站想要正常地被访问,还需要备案,并要符合相关法律法规(据说备案一般要一个月,没有经历过,不确定)。
腾讯云、阿里云都可以进行域名注册(它们是域名注册商吗?),其中,阿里云提供注册服务的是之前的万网——被阿里云收购了。
下面是阿里云上的备案流程截图——看来真的要近一个月:
对了,是不是有些跑题了啊?哈哈,立刻返回!
前面讲到,ICANN还负责根服务器的管理,什么是根服务器呢?就是域名解析系统的最*的服务器,负责管理ICANN需要管理的 通用*域名和国家及地区*域名。目前共有13台根服务器,下面是来自百度百科词条 根域名服务器的介绍:
根服务器主要用来管理互联网的主目录,全世界只有13台(这13台根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。
注意,上面的词条中关于“雪人计划”的描述是错误的!首先一个就是,这个计划并非由下一代互联网国家工程中心牵头发起,这是错误的,请参考下面的文章和雪人计划官网:
厌恶这种被欺骗的感觉,这种错误的信息是犯罪!昨天在微博向百度举报了,可到今天都还没更正。
只有13台服务器?怎么够全世界使用呢?别着急,这13台只是 根 域名服务器!整个域名解析系统是有多层次的、成千上万台的DNS构成的。
一台电脑要上网,首先要找互联网服务提供商(ISP,Internet Service Provider);
前面讲了,ICANN、CNNIC负责管理域名注册的,此时存在一个域名注册商;
综上,DNS是由ISP、域名注册商提供的,当然,也存在第三方的DNS——为什么用第三方的呢?
终于,在域名管理机构、域名注册商、ISP、第三方DNS的共同努力下,整个域名解析系统搭建完成。
回到前面使用浏览器上网的场景:
当你访问网络时,首先向ISP提出解析请求,如果它能解析,返回ISP地址,否则,逐层向上提交解析请求,直到根域名服务器;
解析成功,获取域名对应的IP地址,解析失败,返回域名不存在等错误;
不过,域名解析成功,并不代表着你就能访问域名所对应的网站,可能由于某些公司不符合某些国家的政策,因此,这些公司的网站在这些国家是被屏蔽、禁止了的,比如,在现在的中国访问美国Google公司的网站(google.com)就是不可以的,但可以使用nslookup命令(Windows,bash里面也有此命令,但获取的内容和Windows下有些区别)获取其IP地址:
从上图可以看到,非权威应答下的Addresses的第一行是一个IPv6地址,第二行是一个IPv4地址,要是你的电脑支持IPv6的话,或许可以通过google.com的IPv6地址访问其网站(我的电脑不可以的)。
下面是baidu.com的解析结果:
可以看到两个IPv4地址,是的,一个域名可以对应多个IP地址,但其提供的服务却是一致的,这也是为了负载均衡的考虑,如果上亿的请求都去访问同一个IP地址所在的服务器,怎么可能完成当今世界如此繁荣的互联网呢?所以,人类总是会想到更好的办法的!
其它
讲到这里,大家清楚了上面三个概念了吧?下面补充一点,几乎整个知识系统就完整了。
DNS中继!
这是什么呢?
上网时,电脑会连接到交换机、网关、路由器等,可是,这些设备并非DNS服务器,无法解析你的域名为IP地址的,而在这些设备上搭建DNS域名解析服务?开玩笑好伐!成本太高啦!于是,DNS中继 功能就诞生了!
但你的域名解析请求发送到以上设备时,它们因为有DNS中继功能,因此会将你的请求转发到真正的DNS,之后再将DNS解析得到的IP地址返回给你的电脑。
下面是来自百度知道的一张截图:
可以使用ipconfig /all(Linux用ifconfig -a)查看到电脑的dns信息,或者查看网络连接的属性的TCP/IP:
从上图可以看到,我的电脑是自动从网关获取了IP及DNS等地址,而DNS的地址和网关地址相同,因为网关具有DNS中继功能,因此我的电脑才可以畅游Internet。
域名解析的的类型:
A记录解析、CNAME记录解析、MX记录解析;
域名解析软件:
BIND, DJBDNS, MaraDNS, PowerDNS等;
域名解析协议及端口号:
UDP, 53
参考链接:DNS协议详解及报文格式分析
动态域名解析(DDNS)
典型场景中,域名和IP地址是固定绑定在一起的,但是,由于业务、需求、限制等原因,存在一个域名绑定的IP地址会经常变化的情况,因此有了 动态域名解析服务。
DDNS的作用就是 将域名对应的服务器的实时IP地址解析出来返回,而这项服务一般是收费的,但作为程序员,可以尝试自己开发,因为,阿里云上见到过这样的实现。
后记
一直以来都没有对这些概念彻底搞清楚,通过这两天的 钻研,并写了这篇博文,终于,明白了。
特别感谢百度百科提供的各种词条——有错还是要赶紧更正才是,也感谢其它网友提供的信息,没有你们发布的各种信息,我很难获得如此完整的信息。
时间有限,行文急促,如有不妥,还请回复告知,谢谢!
And I want to thank the pioneers of the Internet! You make the world a better place!