精华内容
下载资源
问答
  • DNS查询过程

    千次阅读 2016-08-09 20:04:18
    1.什么是DNS DNS域名系统是种适用于TCP/IP的分布式数据库,提供的功能包括: ...DNS的组织结构需要分为两个部分来阐述,个是存储的组织结构,另个方面是如何管理这些DNS记录。 2.1DNS的存储结构

    1.什么是DNS

    DNS域名系统是一种适用于TCP/IP的分布式数据库,提供的功能包括:

    • 主机名字和IP地址之间的转化
    • 有关电子邮件的选路信息

    另外DNS还规定了DNS服务器之间交换信息的报文格式,这个报文在应用层,基于UDP或者TCP

    2.DNS的组织结构

    DNS的组织结构需要分为两个部分来阐述,一个是存储的组织结构,另一个方面是如何管理这些DNS记录。

    2.1DNS的存储结构

    DNS用树状结构存储结构我们从两个方向来描述这个结构

    从上到下的描述:

    根部是一个没有任何标示符号的节点,然后是各种顶级和次级域名

    从左到右的描述:

    arpa这个域名用来做反向解析(从IP地址解析到域名,解析的过程如下,当申请到一个域名和IP的时候在这个域名下面会获得一个域名空间,即一个存储信息的节点,里面回包括域名信息,arpa的结构是,次一级为IP第一个字节,以此类推,因此127.45.67.89的反向域名就是89.67.45.127.in-addr.arpa  因为域名是从当前节点书写到根节点

    三字符的是普通域名

    二子节的是基于国家代号的国家域名

    2.2如何管理这些结构

    网络信息中心(NIC)负责分配顶级域名和委派机构来管理相应的域(一个独立的DNS子树被称为一个域)

    一个机构管理的时候,当有新的系统加入,先申请域名和IP地址存储到机构自己的DNS服务器,出于容灾考虑DNS服务器一般有两个。

    3.DNS的查询格式和步骤

    3.1DNS查询的步骤

    服务器向根域名服务器发出查询请求,根服务器返回可以查询到的服务器列表,然后在向该服务器发送相同的请求获取结果

    3.2DNS查询类型

    • A 查询主机的IP地址
    • PTR 指针查询,用于查询IP对应的域名地址
    • CNAME,查询主机的规范名字
    • MX交换记录,用来说明邮件被发到哪里,可以有多个,有自己的优先级
    • HINFO,主机信息

    linux下的查询举例

    host -t a baidu.com

    3.3DNS报文信息

    基本为12子节首部和四个可以变的字段(问题,回答,授权,额外信息)

    参考《TCP/IP协议详解:卷1》

    4.DNS的实现考量

    DNS可以基于UDP或者TCP,UDP的优点在于速度快,但是不可靠需要自己实现超时和重传的机制。

    因此一般用UDP,在需要分片报文的时候需要用TCP重新传输

    辅DNS服务器从主DNS服务器获取记录的时候也用的是TCP协议。

    展开全文
  • DNS 是互联网核心协议之。不管是上网浏览,还是编程开发,都需要了解一点它的知识。 本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNSDNS 是什么...

    DNS 是互联网核心协议之一。不管是上网浏览,还是编程开发,都需要了解一点它的知识。

    本文详细介绍DNS的原理,以及如何运用工具软件观察它的运作。我的目标是,读完此文后,你就能完全理解DNS。

    一、DNS 是什么?

    DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。

    举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69

    如果你不清楚为什么一定要查出IP地址,才能进行网络通信,建议先阅读我写的《互联网协议入门》

    二、查询过程

    虽然只需要返回一个IP地址,但是DNS的查询过程非常复杂,分成多个步骤。

    工具软件dig可以显示整个查询过程。

    
    $ dig math.stackexchange.com
    

    上面的命令会输出六段信息。

    第一段是查询参数和统计。

    第二段是查询内容。

    上面结果表示,查询域名math.stackexchange.comA记录,A是address的缩写。

    第三段是DNS服务器的答复。

    上面结果显示,math.stackexchange.com有四个A记录,即四个IP地址。600是TTL值(Time to live 的缩写),表示缓存时间,即600秒之内不用重新查询。

    第四段显示stackexchange.com的NS记录(Name Server的缩写),即哪些服务器负责管理stackexchange.com的DNS记录。

    上面结果显示stackexchange.com共有四条NS记录,即四个域名服务器,向其中任一台查询就能知道math.stackexchange.com的IP地址是什么。

    第五段是上面四个域名服务器的IP地址,这是随着前一段一起返回的。

    第六段是DNS服务器的一些传输信息。

    上面结果显示,本机的DNS服务器是192.168.1.253,查询端口是53(DNS服务器的默认端口),以及回应长度是305字节。

    如果不想看到这么多内容,可以使用+short参数。

    
    $ dig +short math.stackexchange.com
    
    151.101.129.69
    151.101.65.69
    151.101.193.69
    151.101.1.69
    

    上面命令只返回math.stackexchange.com对应的4个IP地址(即A记录)。

    三、DNS服务器

    下面我们根据前面这个例子,一步步还原,本机到底怎么得到域名math.stackexchange.com的IP地址。

    首先,本机一定要知道DNS服务器的IP地址,否则上不了网。通过DNS服务器,才能知道某个域名的IP地址到底是什么。

    DNS服务器的IP地址,有可能是动态的,每次上网时由网关分配,这叫做DHCP机制;也有可能是事先指定的固定地址。Linux系统里面,DNS服务器的IP地址保存在/etc/resolv.conf文件。

    上例的DNS服务器是192.168.1.253,这是一个内网地址。有一些公网的DNS服务器,也可以使用,其中最有名的就是Google的8.8.8.8和Level 3的4.2.2.2

    本机只向自己的DNS服务器查询,dig命令有一个@参数,显示向其他DNS服务器查询的结果。

    
    $ dig @4.2.2.2 math.stackexchange.com
    

    上面命令指定向DNS服务器4.2.2.2查询。

    四、域名的层级

    DNS服务器怎么会知道每个域名的IP地址呢?答案是分级查询。

    请仔细看前面的例子,每个域名的尾部都多了一个点。

    比如,域名math.stackexchange.com显示为math.stackexchange.com.。这不是疏忽,而是所有域名的尾部,实际上都有一个根域名。

    举例来说,www.example.com真正的域名是www.example.com.root,简写为www.example.com.。因为,根域名.root对于所有域名都是一样的,所以平时是省略的。

    根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com.net;再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.example.com里面的.example,这一级域名是用户可以注册的;再下一级是主机名(host),比如www.example.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

    总结一下,域名的层级结构如下。

    
    主机名.次级域名.顶级域名.根域名
    
    # 即
    
    host.sld.tld.root
    

    五、根域名服务器

    DNS服务器根据域名的层级,进行分级查询。

    需要明确的是,每一级域名都有自己的NS记录,NS记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。

    所谓"分级查询",就是从根域名开始,依次查询每一级域名的NS记录,直到查到最终的IP地址,过程大致如下。

    1. 从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录(IP地址)
    2. 从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录(IP地址)
    3. 从"次级域名服务器"查出"主机名"的IP地址

    仔细看上面的过程,你可能发现了,没有提到DNS服务器怎么知道"根域名服务器"的IP地址。回答是"根域名服务器"的NS记录和IP地址一般是不会变化的,所以内置在DNS服务器里面。

    下面是内置的根域名服务器IP地址的一个例子

    上面列表中,列出了根域名(.root)的三条NS记录A.ROOT-SERVERS.NETB.ROOT-SERVERS.NETC.ROOT-SERVERS.NET,以及它们的IP地址(即A记录)198.41.0.4192.228.79.201192.33.4.12

    另外,可以看到所有记录的TTL值是3600000秒,相当于1000小时。也就是说,每1000小时才查询一次根域名服务器的列表。

    目前,世界上一共有十三组根域名服务器,从A.ROOT-SERVERS.NET一直到M.ROOT-SERVERS.NET

    六、分级查询的实例

    dig命令的+trace参数可以显示DNS的整个分级查询过程。

    
    $ dig +trace math.stackexchange.com
    

    上面命令的第一段列出根域名.的所有NS记录,即所有根域名服务器。

    根据内置的根域名服务器IP地址,DNS服务器向所有这些IP地址发出查询请求,询问math.stackexchange.com的顶级域名服务器com.的NS记录。最先回复的根域名服务器将被缓存,以后只向这台服务器发请求。

    接着是第二段。

    上面结果显示.com域名的13条NS记录,同时返回的还有每一条记录对应的IP地址。

    然后,DNS服务器向这些顶级域名服务器发出查询请求,询问math.stackexchange.com的次级域名stackexchange.com的NS记录。

    上面结果显示stackexchange.com有四条NS记录,同时返回的还有每一条NS记录对应的IP地址。

    然后,DNS服务器向上面这四台NS服务器查询math.stackexchange.com的主机名。

    上面结果显示,math.stackexchange.com有4条A记录,即这四个IP地址都可以访问到网站。并且还显示,最先返回结果的NS服务器是ns-463.awsdns-57.com,IP地址为205.251.193.207

    七、NS 记录的查询

    dig命令可以单独查看每一级域名的NS记录。

    
    $ dig ns com
    $ dig ns stackexchange.com
    

    +short参数可以显示简化的结果。

    
    $ dig +short ns com
    $ dig +short ns stackexchange.com
    

    八、DNS的记录类型

    域名与IP之间的对应关系,称为"记录"(record)。根据使用场景,"记录"可以分成不同的类型(type),前面已经看到了有A记录和NS记录。

    常见的DNS记录类型如下。

    (1) A:地址记录(Address),返回域名指向的IP地址。

    (2) NS:域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。

    (3)MX:邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。

    (4)CNAME:规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转,详见下文。

    (5)PTR:逆向查询记录(Pointer Record),只用于从IP地址查询域名,详见下文。

    一般来说,为了服务的安全可靠,至少应该有两条NS记录,而A记录和MX记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。

    CNAME记录主要用于域名的内部跳转,为服务器配置提供灵活性,用户感知不到。举例来说,facebook.github.io这个域名就是一个CNAME记录。

    
    $ dig facebook.github.io
    
    ...
    
    ;; ANSWER SECTION:
    facebook.github.io. 3370    IN  CNAME   github.map.fastly.net.
    github.map.fastly.net.  600 IN  A   103.245.222.133
    

    上面结果显示,facebook.github.io的CNAME记录指向github.map.fastly.net。也就是说,用户查询facebook.github.io的时候,实际上返回的是github.map.fastly.net的IP地址。这样的好处是,变更服务器IP地址的时候,只要修改github.map.fastly.net这个域名就可以了,用户的facebook.github.io域名不用修改。

    由于CNAME记录就是一个替换,所以域名一旦设置CNAME记录以后,就不能再设置其他记录了(比如A记录和MX记录),这是为了防止产生冲突。举例来说,foo.com指向bar.com,而两个域名各有自己的MX记录,如果两者不一致,就会产生问题。由于顶级域名通常要设置MX记录,所以一般不允许用户对顶级域名设置CNAME记录。

    PTR记录用于从IP地址反查域名。dig命令的-x参数用于查询PTR记录。

    
    $ dig -x 192.30.252.153
    
    ...
    
    ;; ANSWER SECTION:
    153.252.30.192.in-addr.arpa. 3600 IN    PTR pages.github.com.
    

    上面结果显示,192.30.252.153这台服务器的域名是pages.github.com

    逆向查询的一个应用,是可以防止垃圾邮件,即验证发送邮件的IP地址,是否真的有它所声称的域名。

    dig命令可以查看指定的记录类型。

    
    $ dig a github.com
    $ dig ns github.com
    $ dig mx github.com
    

    九、其他DNS工具

    除了dig,还有一些其他小工具也可以使用。

    (1)host 命令

    host命令可以看作dig命令的简化版本,返回当前请求域名的各种记录。

    
    $ host github.com
    
    github.com has address 192.30.252.121
    github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.
    github.com mail is handled by 1 ASPMX.L.GOOGLE.COM.
    
    $ host facebook.github.com
    
    facebook.github.com is an alias for github.map.fastly.net.
    github.map.fastly.net has address 103.245.222.133
    

    host命令也可以用于逆向查询,即从IP地址查询域名,等同于dig -x <ip>

    
    $ host 192.30.252.153
    
    153.252.30.192.in-addr.arpa domain name pointer pages.github.com.
    

    (2)nslookup 命令

    nslookup命令用于互动式地查询域名记录。

    
    $ nslookup
    
    > facebook.github.io
    Server:     192.168.1.253
    Address:    192.168.1.253#53
    
    Non-authoritative answer:
    facebook.github.io  canonical name = github.map.fastly.net.
    Name:   github.map.fastly.net
    Address: 103.245.222.133
    
    > 
    

    (3)whois 命令

    whois命令用来查看域名的注册情况。

    
    $ whois github.com
    展开全文
  • SIP中的DNS查询过程

    千次阅读 2015-11-25 16:04:26
    SIP消息涉及到的DNS过程主要包括两个方面:方面是如何发送请求消息,发送方需要通过DNS过程得到传输层协议类型,下跳的IP地址和端口等信息;另方面是如何返回响应消息,需要决定上跳的地址和端口,尤其是上...

    1.SIP中的DNS过程

    1.1.SIP消息涉及的DNS过程

    SIP消息涉及到的DNS过程主要包括两个方面:一方面是如何发送请求消息,发送方需要通过DNS过程得到传输层协议类型,下一跳的IP地址和端口等信息;另一方面是如何返回响应消息,需要决定上一跳的地址和端口,尤其是上一跳网元发生故障时,如何返回响应消息。

    1.2.如何发送SIP请求消息

    定义一个名为TARGET的变量,如果URI定义了maddr参数,TARGET取值于该参数,否则取值于URI的hostport部分。

    第一步是决定使用哪种传输层协议发送请求消息,包括下列步骤

    1、  如果URI定义了传输层协议,则使用该传输层协议,否则转步骤2;

    2、  如果TARGET包含IP地址,那么对于SIP URI使用UDP协议,SIPS URI使用TCP协议,否则转步骤3;

    3、  如果TARGET包含了端口,那么对于SIP URI使用UDP协议,SIPS URI使用TCP协议,否则转步骤4;

    4、  使用TARGET中的域名进行NAPTR查询,如果NAPTR返回的记录为空转步骤5,否则查看返回的记录,记录中的service域一般取值为”XXX+D2U”, X+D2T”, XX+D2S”, 其中XXX表示服务名称,可以是”SIP”或”SIPS”,D2U表示使用UDP协议,D2T表示使用TCP协议,D2S表示使用SCTP协议;

    5、  根据RFC3261的传输准则判断是否需要使用某种强制协议,如果需要使用强制协议,则使用该强制协议,否则对于SIP URI使用UDP协议,SIPS URI使用TCP协议;

    第二步是决定目标的IP地址和端口,包括下列步骤

    1、  如果TARGET包含了IP地址和端口,则使用该地址和端口,否则转步骤2;

    2、  如果TARGET包含了IP地址,则使用对应传输协议的默认端口,否则转步骤3;

    3、  如果TARGET不包含IP地址,但包含了端口,则使用A或AAAA查询,获得域名对应的IP地址,否则转步骤4;

    4、  如果在第一大步的第四小步没有进行NAPTR查询,转步骤5,则使用该查询返回的记录中的replacement域中域名进行SRV查询,然后转步骤6;

    5、  在TARGET包含的域名加上_XXX._YYY.前缀(其中XXX表示服务类型,可以取值sip或sips,YYY表示传输类型,可以取值udp, tcp或sctp等),然后使用加了前缀的域名进行SRV查询,并转步骤6;

    6、  如果SRV返回了记录,记录会包含端口和最新域名,然后对最新域名进行A或AAAA查询得到IP地址,如果SRV没有返回记录转步骤7;

    7、  直接对TARGET中的域名使用A或AAAA查询得到IP地址,端口则根据传输协议使用默认端口;

    一个发送请求消息例子,下一跳消息的SIP URI为:sip:example.com,如下是向该网元发送SIP请求消息的过程:

    首先对域名example.com进行NAPTR查询,查询的结果为:

    order  pref  flags  service      regexp     replacement

    IN NAPTR  50    50   "s"   "SIPS+D2T"   ""    _sips._tcp.example.com.

    IN NAPTR  90    50   "s"   "SIP+D2T"    ""    _sip._tcp.example.com

    IN NAPTR  100   50   "s"   "SIP+D2U"    ""    _sip._udp.example.com.

    NAPTR返回了多条记录,根据order和pref的取值选择了第一条记录,flag为s表示下一步进行SRV查询,service为SIPS+D2T表示使用TCP作为传输层协议,同时使用sips方式传输消息,replacement表示使用_sips._tcp.example.com进行获取目标网元的地址信息。

    然后对域名_sips._tcp.example.com进行SRV查询,查询的结果为:

    Priority   Weight  Port     Target

    IN  SRV   0        1     5060    server1.example.com

    IN  SRV   0        2     5060    server2.example.com

    SRV返回了两条记录,根据priority和weight选择其中一条,假设选择的是第一条,那么意味这目标端口为5060,Target包含了目标网元的域名server1.example.com。

    最后对域名server1.example.com进行A或AAAA查询,得到目标网元的IP地址:

    IN AAAA 5F05:2000:80AD:5800:0058:0800:2023:1D71

    1.3.如何发送响应消息

    一般情况下,对于可靠的传输层协议,响应消息在请求消息所在的连接上返回,对于非可靠的传输层协议,响应消息通过发送请求消息的源IP地址以及Via中的端口返回。但是如果UAC发送完请求消息后就发生了异常,UAS应当如何返回响应消息?具体包括如下过程:

    1、  如果Top Via包含了IP地址和端口,向该地址和端口返回响应消息;

    2、  如果Top Via包含了IP地址,没有包含端口,使用传输层协议的默认端口返回响应消息;

    3、  如果Top Via包含了域名和端口,使用A或AAAA查询,获得IP地址列表,然后试图向列表中的每一个IP地址发送响应消息,只到有一个发送成功为止;

    4、  如果Top Via包含了域名,没有包含端口,使用SRV查询,获得端口和新域名,对新域名的处理和步骤3类似;

    2.IMS中的DNS过程

    IMS中的DNS过程也可以分为两类:一类是IMS中的SIP实体基于SIP URI的DNS查询,例如主叫侧S-CSCF需要获得被叫网络中的I-CSCF,其过程采用SIP定义的DNS过程;另一类是基于TEL URI的DNS查询。

    2.1.基于SIP URI的DNS查询

    基于SIP URI的查询采用SIP定义的DNS过程(RFC3261, RFC3263),一般为NAPTR查询,SRV查询,最后是A或AAAA查询。整个过程涉及多次DNS查询,可能造成会话建立时间过长,为此有两种方法可以解决这个问题。第一种方法,DNS服务器猜测用户可能会进行的DNS查询,然后返回所有这些可能的查询,例如用户进行了NAPTR查询后,DNS服务器不仅返回NAPTR查询的结果,还会返回相关的SRV以及AAAA的记录。第二种方法是用户将查询结果缓存一段时间,在这段时间以内,如果再次查询该域名,可以直接使用相关记录。

    2.2.基于TEL URI的DNS查询

    IMS中的tel号码有两种情况:一种情况是tel号码对应于IMS网络中的一个用户;另外一种情况是tel号码对应于非IMS网络中的用户,如PSTN用户、GSM用户等。后一种情况比较简单,只需要将对应的SIP消息转发给BGCF来处理即可。而对于前一种情况则需要将TEL URI转换成SIP URI,因为只有SIP URI才可以在IMS网络中路由。

    RFC2916讲述了将TEL URI转换为SIP URI的方法,即通过NAPTR查询来获得这种转换,具体步骤为:

    1、  将TEL号码按照E.164格式表达成全号码(包括国家码);

    2、  去除首部”+”之外的所有其他非数字字符;

    3、  去除首部的”+”;

    4、  在数字字符之间加上”.”号;

    5、  将数字字符串顺序反转;

    6、  在字符串后面加上后缀”e164.arpa”;

    7、  将字符串作为域名,进行NAPTR查询;

    8、  根据查询返回的记录得到对应SIP URI;

    下面以一个例子来讲述整个过程,假设号码为+46-8-9761234,具体转换过程为:

    首先去除所有非数字字符,得到”4689761234”;

    其次加上”.”号,得到”4.6.8.9.7.6.1.2.3.4”;

    再次进行反转,得到”4.3.2.1.6.7.9.8.6.4”;

    再次加上后缀,得到” 4.3.2.1.6.7.9.8.6.4.e164.arpa”;

    最后对域名” 4.3.2.1.6.7.9.8.6.4.e164.arpa”进行NAPTR查询,得到如下记录:

    order  pref  flags  service           regexp             replacement

     IN NAPTR  100   10   "u"  "sip+E2U"     "!^.*$!sip:info@tele2.se!"     .

     IN NAPTR  102   10   "u"  "mailto+E2U"  "!^.*$!mailto:info@tele2.se!"   .

    NAPTR返回了两条记录,order和prefer表达记录的使用偏好,flags为”u”,表示regexp域给出了替代规则,根据该规则和原来的域名可以得出一个满足absoluteURI的URI(RFC2396)。Service给出记录对应的协议和服务,”sip”表示转换出的URI用于SIP协议,”mailto”表示转换出的URI用于mail协议,”E2U”表示e.164 to URI服务。

    本例是IMS中的TEL到SIP转换,所有使用第一条记录,得到最终的SIP URI,即sip:info@tele2.se。

    3.DNS的基本概念

    3.1.DNS的授权

    网络信息中心NIC负责分配顶极域和委派其他指定地区域的授权机构。一个独立管理的DNS子树称为一个区域,许多二极域将他们的子域划分为更小的区域。当一个系统加入到一个区域中时,该区域的DNS管理者为该新系统申请一个域名和一个IP地址,并将他们加入到名字服务器的数据库中。一个名字服务器负责一个或多个区域,一个区域的管理者必须为该区域提供一个主名字服务器和至少一个辅助名字服务器。每个主名字服务器都必须知道根名字服务器的IP地址,根服务器必须知道所有二极域中每个授权名字服务器的名字和IP地址。常见的顶级域:com用于商业组织,edu用于教育机构,org用于非赢利组织,net用于计算机网络组织,gov用于美国政府组织。

    下面以一个例子讲述DNS的查找过程,假设Web浏览器访问“msdn.microsoft.com”站点,它会通过以下步骤来解析该域名的 IP 地址:

    1、  浏览器调用 DNS 客户端(称为解析器),并使用上次查询缓存的信息在本地解析该查询;

    2、  如果在本地无法解析查询,客户端就会向已知的 DNS 服务器询问,如果该 DNS 服务器曾经在特定的时间段内处理过相同的域名(“msdn.microsoft.com“)请求,它就会在缓存中检索相应的 IP 地址,并将它返回给客户端;

    3、  如果该 DNS 服务器找不到相应的地址,客户端就会向某个全局根 DNS 服务器询问,后者返回顶级域权威 DNS 服务器的指针,在这种情况下,“com”域权威服务器的 IP 地址将返回给客户端;

    4、  客户端向“com”服务器询问“microsoft.com”服务器的地址;

    5、  客户端将原始查询传到“microsoft.com”服务器,因为“microsoft.com”服务器在本地维护“msdn.microsoft.com”域的权威记录,所以它将最终结果返回给客户端,并完成特定 IP 地址的查询;

    注意,可以将 DNS 资源记录缓存到网络上任意数量的 DNS 服务器中。第 2 步中提到的 DNS 服务器可能不包含“msdn.microsoft.com”缓存记录。但是,它可能有“microsoft.com”的记录,更可能有“com”域的记录。这可省去客户端获得最终结果所需的一次或几次查询,从而加快了整个搜索过程。

    3.2.DNS查询报文中的问题部分

    查询报文由多个问题部分组成,每个问题代表一个查询,其包括查询名、查询类型和查询类。查询名是指要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须为0-63,因为标识符的最大长度仅为63。该字段无需以整32为为边界,即无需填充字节,例如gemini.tuc.noao.edu的存储格式为6gemini3tuc4noao3edu0。查询类型描述查询哪个方面的问题,最常见的查询类型是A类型(值为1),表示期望获得查询名的IP地址,PTR查询(值为12)则请求获得一个IP地址对应的域名。查询类一般是1,指互联网地址。

    3.3.资源记录RR

    查询结果通过资源记录的方式返回,名字服务器返回的资源记录可以是回答RR、授权RR和附加信息RR。RR记录中的类型字段给出该记录所包含的信息:

    1、  A,一个A记录定义了一个IP地址;

    2、  PTR,指针记录用于指针查询,IP地址被看作是noao.edu域下的一个域名;

    3、  CNAME,表示规范名字,用来表示一个域名,而有规范名字的域名通常叫做别名,某些FTP服务器使用它向其他的系统提供一个易于记忆的别名;

    4、  HINFO,表示主机信息,包括说明主机CPU和操作系统的两个字符串;

    5、  MX,邮件交换记录,例如可以表达如果有邮件要发往use@foo.com,就将邮件发送到relay1.uu.net这样的信息。

    6、  NS,名字服务器记录,其说明一个域的授权名字服务器,它由域名表示。

    3.4.使用UDP还是TCP

    DNS同时支持UDP和TCP,端口号都是53。当查询请求的响应消息长度超过512个字节时,UDP仅返回前512个字节,这时名字解析器通常使用TCP重发原来的查询请求。既然DNS主要使用UDP,因此好的重传和超时机制就比较重要了。

    4.DNS NAPTR资源记录

    DNS NAPTR资源记录的功能是能够将原来的域名映射成一个新的域名或者URI(Uniform Resource Identifier),并通过flag域来指定这些新域名或URI在后继操作中的使用方法。下面通过一个例子来讲述NAPTR记录各字段的含义:

    order  pref  flags  service           regexp             replacement

     IN NAPTR  100   10   "u"  "sip+E2U"     "!^.*$!sip:info@tele2.se!"     .

    l         order, 给出处理的顺序,按照oder从小到大的顺序对记录搜索,搜索到匹配的记录后,就停止搜索order值更大的记录;

    l         preference, 给出在同一个order下各记录的偏好(或权重),值越小偏好越高,pref和order的不同之处在于,order具有唯一性,用户只可以处理某一个order值,而pref表达的是偏好,用户可以对多个不同pref进行综合考虑;

    l         flags, 为[A-Z0-9]中的一个字符,表达映射关系及记录本身的含义,目前有”U”,”S”,”A”和”P”四个标志,其中”U”,”S”和”A”是终结标志,即下一步不需要再进行NAPTR查询,”A”表示下一步进行A,AAAA或者A6查询,”U”表示下一步不需要DNS查询,本次输出的是满足RFC2396要求的absoluteURI,”S”表示下一步进行SRV查询,”P”表示由用户根据service定义自己的规则,所以既可以是终结标志,也可以是非终结标志,如果flags为空(即什么字符也没有),表示用户需要根据本次输出,再进行一次NAPTR查询;

    l         service, 给出新目标(即映射后的新域名或URI)上的服务,以及和该服务交互所使用的协议,其形式为[protocol]*(“+” service),如果flags中的标志为终结标志时,protocol就必须填写;

    l         regexp, 给出根据原域名生成新域名或URI的规则;

    l         replacement, 包含一个域名,根据flags给出进行下一次NAPTR、SRV、A或者AAAA查询所需要的域名,一般情况下,regexp和replacement两者用其一;

    5.DNS SRV 资源记录

    DNS SRV资源记录用于给出在某域中实现某种服务和协议的服务器地址列表。假设我们需要得到example.com域中支持TCP协议的SIP服务器,这时就可以对_sip._tcp.example.com域进行DNS SRV查询,假设DNS SRV返回如下记录:

    Priority   Weight  Port     Target

    IN  SRV   0        1     5060    icscf1.example.com

    IN  SRV   0        2     5060    icscf2.example.com

    这样就可以得到example.com域中支持TCP方式的两个SIP服务器。下面对SRV记录中的几个域解释一下:

    l         priority, 给出处理的顺序,按照priority从小到大的顺序对记录搜索,搜索到匹配的记录后,就停止搜索priority值更大的记录,对于拥有相同priority的记录将通过weight再次选择;

    l         weight, 对于拥有相同priority的多条记录,weight给出了选择某条记录的几率,值越大,被选中的概率就越大,合理的取值范围为0-65535;

    l         port, 目标机器提供对应服务的端口;

    l         target, 目标机器的域名;

    下面再用一个例子来介绍一下怎样通过weight来选择拥有相同priority的多条记录,假设有四条记录A,B,C,D,其weight分别为120,70,95,0,其过程如下:

    1.         将weight为0的记录排在最前面,其他记录顺序任意,那么现在的顺序可以是DABC;

    2.         每一个记录取一个加权值,该值等于前面所有记录(包括自己)的weight总和,那么D为0,A为120,B为190,C为285;

    3.         再计算出所有weight的总和,120+70+95+0=285,并随机出一个在0到285之间(包括0和285)的随机数;

    4.         将随机值按照DABC的顺序和各加权值比较,当出现随机值小于等于加权值时停止比较,该加权值所对应的记录就为本次选中的记录;

    通过上述方法可以选出一条可用的记录,如果还需要再选出一条,可以将选出的记录从列表中删去,然后再按步骤2到步骤4进行一次即可。

    6.相关RFC文档

    RFC3263, Session Initial Protocol: Locating SIP Servers, 讲述SIP传输层的相关细节;

    RFC2916, E.164 number and DNS, 讲述如何通过NAPTR将E.164转换为URI的方法;

    RFC1034, DOMAIN NAMES – Concepts and Facilities, 讲述DNS中的基本概念;

    RFC1035, DOMAIN NAMES – Implementation and Specification, 讲述DNS实现的相关问题;

    RFC2915, The Naming Authority Pointer (NAPTR) DNS Resource Record,讲述名称权威指针的原理、细节及使用方法;

    RFC2782, A DNS RR for specifying the location of services, 讲述SRV的原理、细节及使用方法;

    展开全文
  • 一次 HTTP 请求的完整过程——协议篇 一、大致流程 根据域名和 DNS 解析到服务器的IP地址 (DNS + CDN) 通过ARP协议获得IP地址对应的物理机器的MAC地址 浏览器对服务器发起 TCP 3 次握手 建立 TCP 连接后发起 HTTP ...

    一次 HTTP 请求的完整过程——协议篇

    一、大致流程

    1. 根据域名和 DNS 解析到服务器的IP地址 (DNS + CDN)
    2. 通过ARP协议获得IP地址对应的物理机器的MAC地址
    3. 浏览器对服务器发起 TCP 3 次握手
    4. 建立 TCP 连接后发起 HTTP 请求报文
    5. 服务器响应 HTTP 请求,将响应报文返回给浏览器
    6. 短连接情况下,请求结束则通过 TCP 四次挥手关闭连接,长连接在没有访问服务器的若干时间后,进行连接的关闭
    7. 浏览器得到响应信息中的 HTML 代码, 并请求 HTML 代码中的资源(如js、css、图片等)
    8. 浏览器对页面进行渲染并呈现给用户

    二、深入分析

    在网络协议方面,可以从三个方面深入分析

    1. DNS解析过程
    2. TCP连接过程(三次握手、四次挥手)
    3. HTTP请求响应过程

    2.1 DNS解析过程(UDP通信)

    在这里插入图片描述

    三种类型的 DNS 服务器,根 DNS 服务器,顶级域 DNS 服务器和权威 DNS 服务器

    1. 首先浏览器会检查浏览器自身的DNS缓存中,是否有域名对应的DNS缓存(chrome缓存1分钟,大概有1000条缓存),没有的话进入第二步,否则解析完成
    2. 接下来去查看系统的hosts文件(C:\Windows\System32\drivers\etc)是否有域名对应的IP地址,如果找到则停止解析,否则进入第三步
    3. 浏览器发起DNS系统调用,向本地配置的首选DNS服务器发起域名解析请求(通过UDP协议,向DNS的53端口发起请求)
    4. 首先请求会在运营商的**DNS服务器(本地服务器)**上进行请求,如果找到对应的条目,且没有过期,则解析成功,否则进入第五步
    5. 运营商的DNS服务器,根据解析请求,迭代查询,首先找到根域名服务器的IP地址(这个DNS服务器内置13台根域DNS的IP地址),然后找到根域的DNS地址,发送请求
    6. 根域服务器收到请求后,根据域名,返回对应的顶级域的服务器ip地址,并返回给运营商DNS服务器
    7. 运营商DNS服务器接收到根域名服务器传回来的顶级域名服务器IP地址后,向顶级域名服务器发送请求
    8. 顶级域名服务器接收到请求后,返回该域名对应的权威域名服务器的ip地址,并返回给运行商DNS服务器。
    9. 运营商DNS服务器获得权威域名服务器的响应信息后,返回给请求的主机,DNS解析完成。

    DNS主要是通过UDP通信,报文结构主要分为头部Header、查询部分Question、应答部分Answer/Authority/Addition。

    2.2 TCP 连接过程(3次握手 4次挥手)

    • 三次握手
      在这里插入图片描述
      第一步:客户端向服务端发送一份特殊的 TCP 报文,该报文并不包含应用层的数据,是一份特殊的报文,它的 TCP 首部中 SYN 字段值为 1 。除此之外,客户端还会随机生成一个初始序号,填在报文的「序号」字段,代表当前报文的序号是这个,并且我后续的分组会基于这个序号递增。然后该报文将会经网络层、链路层、物理层发送到服务端。
      第二步:如果分组丢失了,那么客户端会经过某个时间间隔再次尝试发送。而如果分组准确的到达服务端了,服务端拆开 TCP 首部会看到,这是一个特殊的 SYN 握手报文,于是为此次连接分配缓存等资源。
      接着服务端开始构建响应报文,SYN 是一个用于同步需要的字段,响应报文中依然会被置为 1,并且服务端也将随机生成一个初始序号放置的响应报文的序号字段中。
      最后,服务端还会为响应报文中的确认字段赋值,这个值就是客户端发过来的那个序号值加一。
      整体上的意思就是说,「我同意你的连接请求,我的初始序号为 xxx,你的初始序号我收到了,我等着你的下一个分组到来」
      第三步:客户端收到服务端的响应报文,于是分配客户端 TCP 连接所必须的缓存等资源,于是连接已经建立。
    • 四次挥手
      在这里插入图片描述
      第一步:客户端构建一份特殊的 TCP 报文,该报文首部字段 FIN 被置为 1,然后发送该报文。
      第二步:服务端收到该特殊的 FIN 报文,于是响应客户端一个 ACK 报文,告诉客户端,请求关闭的报文已经收到,我正在处理。
      第三步:服务端发送一个 FIN 报文,告诉客户端,我将要关闭连接了。
      第四步:客户端返回一个 ACK 响应报文,告诉服务端,我收到你刚才发的报文了,我已经确认,你可以关闭连接了。

    当服务端收到客户端发送的 ACK 响应报文时,将释放服务端用于该 TCP 连接的所有资源,与此同时,客户端也会定时等待一定时间后完全释放自己用于该连接的相关资源。

    点击查看更多有关TCP的介绍!!!


    2.3 HTTP协议

    点击查看更多有关HTTP的介绍!!!

    三 总结

    对于一次完整的HTTP请求过程,在协议的角度方面,可以从这三个方面进行深入分析和深入学习。

    展开全文
  • DNS完整过程及抓包分析

    千次阅读 2020-08-09 15:25:37
    用Wire shark抓包分析DNS 1、DNS概念:DNS 是域名系统 ...3、DNS过程查询包(query),个回复包(response) A、打开网络适配器:关掉IPV6连接 打开cmd:ping www.taobao.com -4/-6(PS:-4表示IPV4,-6表示IPV
  • DNS的四种查询过程

    千次阅读 2019-03-28 08:35:40
    可以从本机的hosts文件中得到主机名称所对应的IP地址,但如果hosts文件不能解析该主机名称时,只能通过向客户机所设定DNS服务器进行查询了。 可以以不同的方式对DNS查询进行解析。 第种是本地解析,就是客户端...
  • DNS解析和查询过程

    万次阅读 2018-10-21 13:50:52
    域名通过DNS转化成ip地址的过程。 为什么要 DNS 解析? 因为 http 是基于 tcp 连接的,而 tcp 则是通过 ip 地址去识别访问的。DNS 解析就是域名转化成 ip 地址的过程。 1. 查看浏览器内部缓存 检测域名是否存在...
  • DNS查询模式

    千次阅读 2018-04-10 10:43:59
    当客户机需要访问Internet上某主机时,DNS客户端首先向本地DNS服务器查询对方IP地址,如果在本地DNS服务器无法查询出,本地DNS服务器会继续向另外DNS服务器查询,知道得出结果,这一过程就称为“查询”。...
  • 目录 0.引言 1.域名系统概述 2.DNS基础 3.DNS报文 3.1 查询报文 3.1.1 Flags 3.1.2 Queries 3.2 应答报文 3.2.1 Flags 3.2.2 Answers ...4.域名的解析过程 4.1 递归查询 4.2 迭代...
  • NAPTR SRV配置格式 SIP中的DNS查询过程

    千次阅读 2016-10-12 14:03:05
    DNS NAPTR & SRV Records (optional) Configuring DNS NAPTR and SRV for TLS This isn't required as TLS will function without it, but it is recommended. If you're going to set up TLS you might take
  • 一次完整的HTTP请求过程

    万次阅读 多人点赞 2017-10-10 16:06:50
    、 HTTP请求和响应步骤 ... 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/...TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了系列构成互联网基础的网络协议,是Internet的...
  • 一次完整的http协议的过程

    千次阅读 2019-03-12 10:05:13
    一次完整的HTTP请求过程: 1.首先进行域名解析,域名解析具体过程讲一下: 浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表; 若没有,则搜索操作系统的DNS缓存; 若没有,则操作系统将域名发送至...
  • 详解一次完整的数据包传输过程 -- 层层递进

    万次阅读 多人点赞 2019-05-11 22:50:47
    文章目录例子 PC1 发送http请求到...题记:本文主要是摘自CCNA指南中讲的,再加上自己的理解,详细阐述一次完整的数据传输过程。之前在考CCIE的时候也看过,后来有些忘记,特总结记录。 重要: 封装报文是从上层...
  • 一次完整的渗透测试流程

    万次阅读 多人点赞 2018-12-01 19:13:56
    渗透测试就是利用我们所掌握的渗透知识,对网站进行一步一步的渗透,发现其中存在的漏洞和隐藏的风险,然后撰写篇测试报告,提供给我们的客户。客户根据我们撰写的测试报告,对网站进行漏洞修补,以防止黑客的入侵...
  • HTTP请求过程)——DNS解析过程

    千次阅读 2019-06-01 14:55:41
    我们在浏览器输入网址后,按回车键,要浏览的内容就会显示出来。那么在开发者眼中,这个过程是咋样的呢? 其实,从我们输入URL到页面显示,大致可以分为三步: 第步:进行域名解析,得到IP地址;...DNS解析过程 ...
  • 段时间,面试问到了这个问题,感觉自己回答的不是很好, 当时我的回答是 1.域名解析(这个说了一下域名解析的过程) ,解析出对应IP地址 2.解析成功之后,发起TCP三握手建立连接 3.建立连接后发起HTTPS请求 4....
  • DNS解析过程详解

    千次阅读 2017-05-13 16:52:03
    经常被问到一次完整的http请求的过程,这里先讲一下请求的第一步----DNS解析。(后续文章解读其他过程) 首先一次网络请求开始的时候,首先要定位好去哪里请求数据,也就是跟哪个服务器进行请求。DNS就是用来告诉...
  • 一次完整的浏览器请求过程

    千次阅读 2019-03-12 21:10:50
    从输入网址到页面收到请求这期间发生了什么过程 1.域名解析 2.发起TCP三握手 3.建立TCP连接后发起http请求 4.服务器响应http请求,浏览器得到html代码 5.浏览器解析HTML代码,并请求HTML代码中的资源(如js和...
  • 一次完整的http请求过程是怎样的?

    千次阅读 多人点赞 2021-06-08 23:02:51
    我们打开浏览器,在地址栏输入\www.wukong.com\,几秒后浏览器打开悟空问答的页面,那么这几秒钟内发生了哪些事情,我就带大家一起看看...DNS查询 浏览器会先检查域名信息是否在缓存中。 再检查域名是否在..
  • NetWork——描述一次完整的网络请求过程

    万次阅读 多人点赞 2017-01-10 18:53:05
    简单地回答这个问题,大概是经历了域名解析、TCP的三握手、建立TCP连接后发起HTTP请求、服务器响应HTTP请求、浏览器解析html代码,同时请求html代码中的资源(如js、css、图片等)、最后浏览器对页面进行渲染并...
  • DNS查找过程

    千次阅读 2018-06-27 00:24:47
     如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询...
  • 相信看完这张图后大家对一次请求也有了大致的了解了,当前其中还有很多细节小编没有画出来,然后我们来看看部分过程的细节 所以其流程大致如下: ①:DNS解析域名得到IP地址 ②:客户端与服务器建立连接(TCP三次...
  • 简述DNS解析过程

    千次阅读 2018-05-04 15:42:39
    假定域名为m.xyz.com的主机想知道另个主机(域名为y.abc.com)的IP地址,譬如我访问域名为y.abc.com的网站,就得查询要访问的主机的IP地址。下面是查询步骤:1、主机m.xyz.com先向本地域名服务器dns.xyz.com进行...
  • DNS递归查询与迭代查询

    千次阅读 2016-10-26 09:43:03
    DNS递归查询与迭代查询summary一直以来对于DNS查询的“递归”与“迭代”方式感到困惑。一般人就直接跟你说“DNS客户端向DNS服务器请求叫递归查询”,“DNS服务器之间的查询请求是迭代查询”,听了之后根本不知所谓。...
  • 前言 ...这个请求是怎么到达服务器及返回结果的呢? 概述 浏览器进行DNS域名解析,得到对应的IP地址 ... 根据这个IP,找到对应的... 建立TCP连接后发起HTTP请求(完整的http请求报文) 服务器响应HTTP请求,...
  • 【Java面试题】一次完整的Http请求过程(非常详细)
  • DNS的工作过程详解

    千次阅读 2019-10-27 20:50:17
    文章目录什么是DNSDNS的作用DNS过程 什么是DNS DNS的作用 DNS过程

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,666
精华内容 53,866
关键字:

一次完整的dns查询过程