DNS原理2-域名介绍

域名空间结构 根域:标识为 . 点,对应全球13组根域名服务器以英文字母A到M依序命名,域名格式为字母.root-servers.net。其中有11个是以任播技术在全球多个地点设立镜像站。比如中国大陆在北京有两台编号为L的镜像,编号为F、I、J的镜像各一台,共5台;香港有编号为D、J的镜像各2台,编号为A、F、I、L的镜像各一台,共8台;台湾则有编号为F、I、J各一台,共3台。如下图截止2019年根域和镜像服务器数量 顶级域(Top Level Domain,简称TLD),如.com, .cn, .top等,顶级域分为三类 通用顶级域名gTLDs(generic top-level domains),诸如 .com(商业机构) .org(非营利性组织) .net(网络服务机构)等 国家顶级域名ccTLDs(country code top-level domains),诸如 .cn(中国) .uk(英国) .us(美国) .jp(小日本) 国家地区顶级域被IANA委托给国家性的域名注册管理机构来管理,比如德国的DENIC、英国的Nominet、中国大陆的CNNIC、台湾的TWNIC等。 新通用顶级域名(New gTLD),如通用的.xyz、代表“高端”的.top、代表“红色”的.red、代表“人”的.men等 子域名(二级域名),即顶级域名的子域名(也有叫主域名),如 example.com, example.net, example.top 等 三级域名,即二级域名的子域名,如 abc.example.com, abc.example.net 等 以此类推,在上一级域名最左侧进行域名级别的拓展,def.abc.example.com、def.abc.example.net、def.abc.example.org等 域名组织机构 ICANN(互联网名称与数字地址分配机构)是一家非营利私人组织,是互联网的管理机构。 ICANN 负责域名系统 (DNS) 的技术运营,并负责制定政策来规定互联网的名称和地址的工作原理。 InterNIC 和IANA是由 ICANN 运营的两个组织。 InterNIC:网络信息中心 (InterNIC) 提供关于域名注册服务的信息。 IANA(互联网号码分配机构)是一家互联网地址指派机构,管理国际互联网中使用的IP地址、域名和许多其它参数的机构。IANA 将对所有其他网域(非根网域)的管辖权委托给其他域名注册管理机构。负责运营域名系统根区域、委派顶级域名的管理,并负责.int和.arpa两个域名的管理。 域名注册管理机构是管理一个或多个顶级或下级域名的组织。例如,Verisign 负责维护若干个顶级域名,包括 .com、.net 和 .name 域名。域名注册管理机构通过IANA获得某个顶级域名的管辖授权。 每个域名注册管理机构均管理着其管辖范围内域名和子域名的管理数据。此类数据管理包括含有每个域名的域名服务器地址和注册者信息的区文件。 国家及地区顶级域(Country code top-level domains,ccTLD)被IANA委托给国家性的域名注册管理机构来管理,比如德国的DENIC、英国的Nominet、中国大陆的CNNIC、台湾的TWNIC等。 截至 2019 年 9 月,已有 30 家域名注册管理机构获准在我国境内运营和管理 112 个顶级域(详见表2),135 家域名注册服务机构(域名注册商)获准按相应的域名注册服务项目提供服务...

June 6, 2021 · 1 min

DNS原理1-nameserver

name servers介绍及历史 本篇文章我们会讨论互联网世界里最重要和不可避免的资源,我们每个人有意或无意地使用它。 网络中的每台机器都是由一个ip(数字地址)标识。这个地址可以被网络中的其它机器使用,以便进行通信。在没有和这个ip地址相关的名称时,ip地址难以记忆,即使本地网络少量机器地址也难以记住,更不用说网络中成千上万机器地址了。 最初主机文件(hosts file, hosts file介绍看这里)的概念是为了解决这个问题而诞生的,网络中的每一台机器都有一个主机文件(Un*x下是/etc/hosts),记录了主机名称(computer name/host name)跟IP地址映射关系(dns出现后也可以记录域名和ip映射关系),转换为IP地址就是在这里完成的。有了hosts file,只要记住主机名称即可,通过目标机器的主机名称来访问目标机器,不需要再记ip地址了。 但随时间推移,网络中机器越来越多且不同网络间通信需求,hosts file方式暴露了一些问题: 每次出现新机器时,网络中其它机器都要更新映射关系 没有有效的机制,通知这些机器去更新映射关系 随时间推移,主机文件越来越大,很难维护 hosts file适用于机器较少的本地网络,不适用于分布在不同网络上的大量机器场景 在1970年中期,name server(名称服务器)的概念出现了。这个name server背后的基本思想是,人们发现名称比起数字更容易记,特别是当名称描述资源的一些属性时。而名称转换为ip的问题与计算机网络本身一样古老。 当网络中有name server时,网络中的其它机器只要知道name server的ip地址以及目标机器或网站的名称。有了这些信息后就可以跟name server请求目标机器的ip地址。 中心化的name server服务器比起hosts file主机文件方案要好的多,因为现在有了专门用于名称到地址映射的中心化服务器,网络中机器只要记住它的ip,然后向它发起查询请求即可返回名称对应的ip地址。 中心化的name server主要好处是机器修改ip地址后,不需要通知网络中其它机器了,机器ip修改后,只需要在name server上更新下最新ip地址即可。缺点也显而易见,服务器挂的话整个网络访问都不可用了,所以出现了多台name server的方案,一个作为master或primary,其它作为slave或secondary,如果master不可用则slave提供查询服务。 即使是多台name server的实现也有一些缺点: 随着网络中名称不断增加,name server从数百万个条目中检索信息变得非常困难,所以我们需要一种方法来组织这些名称。 想象单台name server每秒执行越来越多请求,这种情况下name server负载会增加,所以我们需要想办法分散负载。 我们需要一种机制来分离name server上的条目管理,以便不同管理员可以添加条目。 为了有效的管理名称或域名的解析(解析成IP地址)工作,随后设计了DNS(域名系统) DNS(Domain Name System) 域名系统 域名结构和域名系统是为了在大型分布式网络中组织和查找计算机ip地址而开发的。在域名结构出现之前,通过上文提到的hosts file来记录主机名称和ip地址映射关系 在介绍dns之前,先看下域名结构。 DNS系统设计成一个与域名结构类似的倒树层次化的dns名称服务器结构,树根叫root name server(根名称服务器),接着是TLD name server(顶级域名称服务器),TLD后是SLD name server(二级域/权威名称服务器) 完整的dns功能描述请查阅RFC 1034 1035 dns系统中,每个节点都被分配给一个权威机构或组织进行管理。负责特定节点的组织是该节点的权威。 现在位于dns系统层次顶端的是根名称服务器,它是由ICANN这个组织管理。 gTLD通用顶级域名称服务器如(.com, .net)等也是由ICANN管理并委托给注册管理机构,ccTLD国家顶级域名称服务器被授权给不同国家进行管理 在域名中,经常出现的www(如www.baidu.com)是主机名称,仅仅是个惯例,你也可以叫 xyz.baidu.com 当我在浏览器地址栏上输入www.example.com回车时会发生什么? 在名称服务器层级里,根名称服务器是最重要资源,当其它名称服务器查询不到信息时,它们首先会请求根名称服务器。 全球有13组根服务器: a.root-servers.net. b.root-servers.net. c....

May 23, 2021 · 2 min

一次DNS查询

域名查询过程 以用户在浏览器输入www.baidu.com为例,我们详细说明一下实际域名查询过程: 用户输入www.baidu.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns); local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询; 根服务器返回顶级域com的服务器地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复; local dns查询com。com返回baidu.com地址; local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。 名词解释 解析器 即resolver: 处于DNS客户端的一套系统,用于实现正向解析或者反向解析。 Local DNS(递归dns): 个人电脑使用的DNS server是路由器上的dns server,一般路由器使用运营商dns server,运营商(如缓存等)那查不到结果,则进入迭代dns查询(就是查询根服务器到权威dns返回结果)。 递归DNS可以理解为是一种功能复杂些的resolver,其核心功能一个是缓存、一个是递归查询。收到域名查询请求后其首先看本地缓存是否有记录,如果没有则一级一级的查询根、顶级域、二级域……直到获取到结果然后返回给用户。日常上网中运营商分配的DNS即这里所说的递归DNS。 权威DNS: 处于DNS服务端的一套系统,该系统保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器。 转发DNS: 转发DNS是一种特殊的递归。如果本地的缓存记录中没有相应域名结果时,其将查询请求转发给另外一台DNS服务器,由另外一台DNS服务器来完成查询请求。 公共DNS: 公共DNS属于递归DNS。其典型特征为对外一个IP,为所有用户提供公共的递归查询服务。

April 8, 2020 · 1 min

http post 数据分析

在一次POST图片的base64编码时,后端(golang)始终无法正确获取提交的base64,排查发现后端net包的url模块在parseQuery提交的数据时,把参数拆成了2部分,一番尝试,把提交的数据编码后就可以了;猜测应该是特殊字符问题,遂整理了以下知识点: ...

April 20, 2019 · 3 min

go http包处理post请求分析

理论 POST数据提交方式 HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样: <method> <request-URL> <version> <headers> <entity-body> 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。 但数据发送出去,还要服务端能解析才行。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。**服务端通常根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。**所以说到 POST 数据提交方案,包含了 Content-Type 和消息主体编码方式两部分。这里摘录两种Content-Type,其它参阅参阅 application/x-www-form-urlencoded 这应该是最常见的 POST 提交数据的方式了。浏览器的原生 表单,如果不设置 enctype 属性,默认以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样(无关的请求头在本文中都省略掉了): POST http://www.example.com HTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3 首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。例如 PHP 中,$_POST['title'] 可以获取到 title 的值,$_POST['sub'] 可以得到 sub 数组。...

April 10, 2019 · 3 min