网站建设项目维护与评价书,无为网站设计,广州番禺营销型网站,wordpress中文版 乱码1. DNS服务器
DNS#xff08;Domain Name System#xff09;#xff1a;是对IP地址和域名#xff08;如:www.baidu.com等#xff09;进行相互转换的系统#xff0c;其核心是DNS服务器。 我们输入的www.baidu.com是域名#xff0c;是一种虚拟地址#xff0c;而非实际地…1. DNS服务器
DNSDomain Name System是对IP地址和域名如:www.baidu.com等进行相互转换的系统其核心是DNS服务器。 我们输入的www.baidu.com是域名是一种虚拟地址而非实际地址DNS服务器会将这个虚拟地址转换为实际地址即IP地址。若我们直接输入IP地址则不会发生上面的转换。 如果想获取某个域名对应的IP地址则可以cmd输入ping www.baidu.com 如果想获取本机注册的默认的DNS服务器地址则可以cmd输入nslookupwindows、nslookup serverlinux 所有计算机都记录着默认DNS服务器地址通过这个DNS服务器就能得到相应域名的IP地址信息如果本机的默认DNS服务器解析不了这个域名那么就会逐级往上询问直到根DNS服务器它直到应该向哪个DNS服务器询问再向下级DNS专递解析请求得到IP地址后返回给发起请求的主机。所以DNS就是一种层次化管理的分布式数据库系统。 2. IP地址和域名之间的转换
IP地址和域名之间的关系一个IP地址可以对应多个域名一个域名也可以对应多个IP地址。
通常来说域名是不会变化的但是IP地址是可以随时变化的因为服务器会变化尤其是像那种有多个服务器进行负载均衡的就有多个IP地址所以我们在编写程序时要通过用户输入的域名来解析获取IP地址。
2.1 gethostbyname函数利用域名获取IP地址
#include netdb.h
struct hostnet* gethostbyname(const char* hostname);
成功返回hostnet结构体失败返回Null指针
struct hostent
{char* h_name;char** h_aliases;int h_addrtype;int h_length;char** h_addr_list;
}
参数含义h_name存有官方域名。官方域名代表某一主页不是所有公司都有h_aliases其它可以访问这个域名所指向主页的域名。同一个IP可以绑定多个域名。h_addrtype地址族信息若是IPv4则是AF_INETIPv6则是AF_INET6h_length保存IP地址字节长度。IPV4则是4IPV6则是16h_addr_list 以整数形式保存域名对应的IP地址每个数组实际上是以in_addr结构体存储的。 struct in_addr
{in_addr_t s_addr; //32位IPv4地址
} 所以在使用时要进行强制转换为in_addr* 类型
hostent参数结构 h_addr_list数组实际上是以in_addr结构体存储的为什么不直接以in_addr数组存储而是以字符数组存储 答是因为为了兼容IPv6地址信息考虑到通用性所以用字符数组存储。 那为什么不用void*存储 答是因为当时还没有对void指针标准化当时无法明确指出指针类型时采用的就是char指针。 2.2 gethostbyaddr函数利用IP地址获取域名
#includenetdb.h
struct hostent* gethostbyaddr(
const char* addr, //含有IP地址信息的in_addr结构体指针同时为了传递IPv4地址之外的其他信息所以声明为char指针
socklen_t len, //向第一个参数传递的地址信息字节数IPv4为4IPv6为16
int family //地址族信息
);