第八章 域名及网络地址
来源:互联网 发布:人类进化 知乎 编辑:程序博客网 时间:2024/06/05 17:00
《TCP/IP网络编程》 尹圣雨 P118~P136
DNS,Domain Name System,域名系统。
DNS是对IP地址和域名进行相互转换的系统,其核心是DNS服务器。
域名
提供网络服务的服务器端也是通过IP地址区分的,将容易记、易表述的域名分配并取代IP地址、
域名是赋予服务器端的虚拟地址,而非实际地址。因此,需要将虚拟地址转化为实际地址。将域名变为IP地址,DNS服务器担此重任,可以向DNS服务器请求转换地址。
所有计算机中都记录着默认DNS服务器地址,通过这个默认DNS服务器得到相应域名的IP地址信息。在浏览器地址栏中输入域名后,浏览器通过默认DNS服务器获取该域名对应的IP地址信息,之后才真正接入该网站。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
求解某个域名对应的IP地址信息,在控制台窗口下输入
ping www.naver.com
这样可以知道某一域名对应的IP地址。ping命令用来验证IP数据报是否到达目的地,但执行过程中会同时经过“域名到IP地址”的转换过程。
求解自己计算机注册的默认DNS服务器地址,可以输入
nslookup
在Linux系统中输入上述命令,会提示进一步输入信息,此时可以输入server得到默认的DNS服务器地址。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内置的默认的DNS服务器并不知道网络上所有域名的IP地址信息。若该DNS服务器无法解析,则会询问其他DNS服务器,并提供给用户。
DNS就是一种层次化管理的分布式数据库系统、
IP地址和域名的转换
系统运行时,保持IP地址并不容易。特别是依赖ISP服务提供者维护IP地址时,系统相关的各种原因会随时导致IP地址变更。虽然ISP会保证维持原有IP,但程序不能完全依赖于这一点。
程序中有必要使用域名?
IP地址比域名发生变更你的概率要高,所以利用IP地址编写程序并非上策。因为域名一旦注册永久不变,因此利用域名编写程序会好一些。这样每次运行程序时会根据域名获取IP地址,再接入服务器,这样程序就不会依赖于服务器IP地址了。
利用域名获取IP地址
通过传递字符串个数的域名获取IP地址:只要传递域名字符串,就好返回域名对应的IP地址。只是返回时,地址信息装入hostent结构体。关注h_addr_list即可。
#include<nedb.h>struct hostent * gethostbyname(const char * hostname);
成功时返回hostent结构体地址,失败时返回NULL指针
struct hostent{char * h_name;//official name官方域名char **h_aliases;//alias list,可以通过多个域名访问同一主页。同一个IP可以绑定多个域名。int h_addrtype;//host adress type,gethostbyname支持IPv4和IPv6,可以通过此变量获取保存在h_addr_list中的IP地址的地址族信息。int h_length;//address length,若是IPv4地址,因为是4自己,则保存4;若是IPv6,则保存16.char ** h_addr_list;//address list,通过此变量以整数形式保存域名对应的IP地址。用户较多的网站有可能分配多个IP给同一个域名,利用多个服务器 //进行负载均衡};
P132~P134 重点演示了gethostbyname函数的应用,并说明hostent结构体变量的特性。
h_addr_list指向字符串指针数组(由多个字符串地址构成的数组)。但字符串指针数组中的元素实际指向的是(实际保存的是)in_addr结构体变量地址值而非字符串。
为什么是char *而不是in_addr * ?
hostent结构体成员h_addr_list指向的数组类型并不是in_addr结构体的指针数组,而是采用了char指针。hostent结构体并非只为IPv4准备。h_addr_list指向的数组中也可以保存IPv6地址信息。考虑到通用性,声明为char指针类型的数组。
利用IP地址获取域名
#include<nedb.h>struct hostent * gethostbyaddr(const char * addr,socklen_t len,int family);成功时返回hostent结构体变量地址值,是白色返回NULL指针
addr 含有IP地址信息的in_addr结构体指针。为了同时传递IPv4地址之外的其他信息,该变量的类型声明为char指针、
len 向第一个参数传递的地址信息的字节数,IPv4为4,IPv6为6
family 传递地址值信息,IPv4为AF_INET,IPv6为AF_INET6.
P135~P136 重点演示了gethostbyaddr函数的应用
- 第八章 域名及网络地址
- 8.1 域名及网络地址
- 域名及网络地址(Linux----C)
- 网络地址格式及域名地址转化
- 域名和网络地址
- 直接用域名取网络地址操作
- 域名和网络地址结构体---struct hostent
- 网络地址的分配及获取
- android设置网络地址及dncp
- 网络地址的分配及获取
- 域名及域名投资
- 第十一章 网络地址转换
- 网络地址
- 网络地址
- 网络地址
- 网络地址
- 网络地址兼容域名和点分十进制IP地址
- 网络地址转换NAT原理及应用
- TabLayout简单入门
- 一直滚动的TextView
- excel返回季度的公式
- Java监听器Listener使用详解
- HDU3549-Flow Problem
- 第八章 域名及网络地址
- Ubuntu下deb包的安装方法
- rabbitmq 启动错误 .erlang.cookie must be accessible by owner only
- 关于Markdown编辑器使用
- 关于Ngnix配置HTTPS后,静态资源还是请求http
- Android Junit单元测试-声明套件类
- JQ 点击表单信息后编辑数据库信息
- 自定义View之线性进度展示
- Android异常 NullPointerException: Attempt to invoke virtual method int java.lang.Integer.intValue()