《TCP IP网络编程》第八章 域名及网络地址

    技术2022-09-01  123

    第八章 域名及网络地址

    8.1 域名系统

    DNS(Domain Name System,域名系统)。

    DNS是对IP地址和域名相互转换的系统,核心是DNS服务器。

    域名,是用来代表指定的IP地址的,因为IP地址非常难记,提供网络服务的服务器端虽然是通过IP地址区分的,但是IP地址太难记了,必须得找个别的容易记的形式来交换服务器端的地址信息。

    域名,是赋予服务器端的虚拟地址,而非实际地址。需要将虚拟地址转换成实际地址。DNS服务器就是干这个转换工作的。

    所有计算机中都记录着默认DNS服务器地址 ,通过这个默认DNS服务器,得到域名的相应IP地址信息,通过IP地址真正接入该网站。

    查看域名对应的IP地址,ping一下这个域名就行了:

    [root@VM_0_10_centos ~] ping www.baidu.com PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data. 64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=1 ttl=48 time=8.59 ms 64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=2 ttl=48 time=8.60 ms ^C --- www.a.shifen.com ping statistics --- 7 packets transmitted, 7 received, 0% packet loss, time 6010ms rtt min/avg/max/mdev = 8.596/8.616/8.634/0.111 ms

    想查看自己计算机中注册的默认DNS服务器地址:

    [root@VM_0_10_centos ~] nslookup > server Default server: 183.60.83.19 Address: 183.60.83.19#53 Default server: 183.60.82.98 Address: 183.60.82.98#53

    一台DNS服务器并不知道网络上所有域名的IP地址信息,如果它无法解析某个域名,它会去询问其他DNS服务器,并提供给用户。

    DNS是层次化管理的一种分布式数据库系统: 当默认的DNS服务器无法解析主机询问的域名对应哪个IP地址时,会向上级DNS服务器询问。通过逐级向上传递信息,到达顶级DNS服务器(跟DNS服务器),它知道该向哪个服务器询问,向下级DNS传递解析请求,得到IP地址后原路返回,最后将解析的IP地址传回到发起请求的主机。

    8.2 IP地址和域名之间的转换

    介绍通过程序向DNS服务器发出解析请求的方法。

    所有学习都要在开始之前认识到其必要性。

    IP地址变动频率比域名高,所以利用IP地址编写程序并非上策。一旦注册域名可能永久不变,所以,利用域名编写程序会更稳妥。这样,每次运行程序时根据域名获取IP地址,再接入服务器,这样程序就不会依赖于服务器IP地址了。所以,程序里需要IP地址与域名之间的转换函数。

    利用域名获取IP地址

    #include<netdb.h> struct hostent * gethostbyname(const char* hostname); 成功时返回hostent结构体地址,失败时返回NULL指针

    返回的结构体类型:

    struct hostent{ char * h_name; 官方名称 char ** h_aliases; 别名列表(可以通过多个域名访问同一个主页) int h_addrtype; 主机地址类型(IPv4对应AF_INET,IPv6对应AF_INET6) int h_length; 地址长度(IPv4对应4字节,保存4;IPv6对应16个字节,保存16char ** h_addr_list; 地址列表(域名转IP时,只需关注这个变量就好) }

    最重要的是最后一个h_addr_list。用户较多的网站可能会分配多个IP给同一个域名,利用多个服务器进行负载均衡。

    Processed: 0.012, SQL: 9