美文网首页
DNS相关知识

DNS相关知识

作者: 杨闯 | 来源:发表于2020-03-21 20:54 被阅读0次

因为工作的原因,需要在iOS端获取到相关域名所对应的ip,我们选择了 https://www.jianshu.com/p/31e826539de9 中的第三套方案。

苹果原生的DNS解析

Boolean CFHostStartInfoResolution (CFHostRef theHost, CFHostInfoType info, CFStreamError *error);
使用方法:

Boolean result,bResolved;
CFHostRef hostRef;
CFArrayRef addresses = NULL;
NSMutableArray * ipsArr = [[NSMutableArray alloc] init];

CFStringRef hostNameRef = CFStringCreateWithCString(kCFAllocatorDefault, "www.meitu.com", kCFStringEncodingASCII);
    
hostRef = CFHostCreateWithName(kCFAllocatorDefault, hostNameRef);
    CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
    result = CFHostStartInfoResolution(hostRef, kCFHostAddresses, NULL);
    if (result == TRUE) {
        addresses = CFHostGetAddressing(hostRef, &result);
    }
    bResolved = result == TRUE ? true : false;
    
    if(bResolved)
    {
        struct sockaddr_in* remoteAddr;
        for(int i = 0; i < CFArrayGetCount(addresses); i++)
        {
            CFDataRef saData = (CFDataRef)CFArrayGetValueAtIndex(addresses, i);
            remoteAddr = (struct sockaddr_in*)CFDataGetBytePtr(saData);
            
            if(remoteAddr != NULL)
            {
                //获取IP地址
                char ip[16];
                strcpy(ip, inet_ntoa(remoteAddr->sin_addr));
                NSString * ipStr = [NSString stringWithCString:ip encoding:NSUTF8StringEncoding];
                [ipsArr addObject:ipStr];
            }
        }
    }
    CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
    NSLog(@"33333 === ip === %@ === time cost: %0.3fs", ipsArr,end - start);
    CFRelease(hostNameRef);
    CFRelease(hostRef);

但是在其中发现一个问题,那就是域名解析出来的ip不只是一个ip,那是怎么回事呢。
通过度娘得知那是因为如果有服务集群的话就有多个ip,经过和运维沟通,也得知有多个A记录。
这里就说明了我一个域名获取到了多个ip是没问题的,那因此带来了多个问题,一个域名获取到了多个ip,那究竟使用的是哪个,这个的选择规则是什么呢,以及A代表的是什么意思呢,还有什么其它记录吗。

通过查询到网址 https://itbilu.com/other/relate/EyxzdVl3.html 中有进行描述,为了防止文章失效,将相关内容复制在下边:

域名注册完成后首先需要做域名解析,域名解析就是把域名指向网站所在服务器的IP,让人们通过注册的域名可以访问到网站。IP地址是网络上标识服务器的数字地址,为了方便记忆,使用域名来代替IP地址。域名解析就是域名到IP地址的转换过程,域名的解析工作由DNS服务器完成。DNS服务器会把域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。域名解析时会添加解析记录,这些记录有:A记录AAAA记录CNAME记录MX记录NS记录TXT记录SRV记录URL转发

  1. DNS域名解析中添加的各项解析记录
  2. DNS解析中一些问题

1. DNS域名解析中添加的各项解析记录

A记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录

CNAME记录: 如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务商提供的一个域名

MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录

NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录

TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录

AAAA记录: 将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录

SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)。

SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器

PTR记录: PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名

显性URL转发记录: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址为:www.itbilu.com

隐性UR转发记录L: 将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,隐性转发会隐藏真实的目标地址。例如:将www.liuht.cn显性转发到www.itbilu.com后,访问www.liuht.cn时,地址栏显示的地址仍然是:www.liuht.cn

2. DNS解析中一些问题

2.1 A记录CNAME记录

A记录是把一个域名解析到一个IP地址,而CNAME记录是把域名解析到另外一个域名,而这个域名最终会指向一个A记录,在功能实现在上A记录CNAME记录没有区别。

CNAME记录在做IP地址变更时要比A记录方便。CNAME记录允许将多个名字映射到同一台计算机,当有多个域名需要指向同一服务器IP,此时可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即:CNAME)到A记录的域名上。当服务器IP地址变更时,只需要更改A记录的那个域名到新IP上,其它做别名的域名会自动更改到新的IP地址上,而不必对每个域名做更改。

2.2 A记录AAAA记录

二者都是指向一个IP地址,但对应的IP版本不同。A记录指向IPv4地址,AAAA记录指向IPv6地址。AAAA记录A记录的升级版本。

2.3 IPv4IPv6

IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用的版本,是构成现今互联网技术的基础协议。IPv4 的下一个版本就是IPv6,在将来将取代目前被广泛使用的IPv4

IPv4中规定IP地址长度为32位(按TCP/IP参考模型划分) ,即有2^32-1个地址。IPv6的提出最早是为了解决,随着互联网的迅速发展IPv4地址空间将被耗尽的问题。为了扩大地址空间,IPv6将IP地址的长度由32位增加到了128位。在IPv6的设计过程中除了一劳永逸地解决了地址短缺问题以外,还解决了IPv4中的其它问题,如:端到端IP连接、服务质量(QoS)、安全性、多播、移动性、即插即用等。

2.4 TTL

TTL-生存时间(Time To Live),表示解析记录在DNS服务器中的缓存时间,TTL的时间长度单位是秒,一般为3600秒。比如:在访问www.itbilu.com时,如果在DNS服务器的缓存中没有该记录,就会向某个NS服务器发出请求,获得该记录后,该记录会在DNS服务器上保存TTL的时间长度,在TTL有效期内访问www.itbilu.com,DNS服务器会直接缓存中返回刚才的记录。

相关文章

  • DNS 相关知识

    问题代入? 什么是域名?域名的层次结构是什么? 什么是 DNS 服务器,DNS 服务器是用来做什么的? 既然有DN...

  • DNS相关知识

    因为工作的原因,需要在iOS端获取到相关域名所对应的ip,我们选择了 https://www.jianshu.co...

  • DNS相关知识

    1.什么是DNS: DNS全称:域名系统(Domain Name System),是能够将域名和IP进行相互映射的...

  • DNS相关知识

    一、引言 关于DNS(Domain Name System)应该都不陌生,大多人说出来就是将一个网站的域名转化成I...

  • 网络知识相关概念

    网络知识相关概念 何为DNS? local DNS 一般指的是哪些? 为什么会出现DNS解析异常? 什么是SNI?...

  • 2018-05-16

    09葵花宝典Openssl和DNS 本节主要介绍网络上相关数据加密和DNS知识,以及在linux上的实现。 # 一...

  • linux下的dns(一)

    相关知识 dns运行在udp协议下,端口号为53 查询方式:简单查询、迭代查询、递归查询 安装后dns配置文件:/...

  • DNS解析

    写在前面 今天我们来看一下计网中关于DNS解析相关部分的知识。 1. 简介 DNS(Domain Name Sys...

  • DNS相关

    如果一些视频、音频、网页等加载不出来可以手动设置DNS来尝试。(不推荐手动设置DNS)114.114.114.11...

  • 内网DNS系统搭建记录

    因为最近处理公司内网DNS系统,借此机会记录一下DNS的相关知识以防后面遗忘。 在日常使用中,我们访问网站常用的是...

网友评论

      本文标题:DNS相关知识

      本文链接:https://www.haomeiwen.com/subject/uxkuyhtx.html