目录
1.2 向 DNS 服务器查询 Web 服务器的 IP 地址
1.2 向 DNS 服务器查询 Web 服务器的 IP 地址
1.2.1 IP地址基础知识
浏览器能解析网址并生成 HTTP 消息,但将消息发送到网络当中则需要委托操作系统实现。但无法将域名直接丢给操作系统,需要先根据域名查询ip地址。
互联网和公司内部的局域网基于 TCP/IP 的思路设计。
TCP:Transmission Control Protocol,传输控制协议。
IP:Internet Protocol,网际互连协议
在网络中,所有的设备都会被分配一个地址。这个地址就相当于现实中某条路上的“×× 号 ×× 室”。其中“号”(网络号)对应的号码是分配给整个子网的,而“室”(主机号)对应的号码是分配给子网中的计算机的,这就是网络中的地址。
IP地址=网络号+主机号,32bit,共4组,8bit(1字节)为一组,形式为10进制。至于网络号和主机号各多少位不固定,因此还需要子网掩码表示IP地址内部结构。
这种写法太长,可以直接写成: 10.1.2.3/24 (24表示前24位是网络号)
主机号部分全0代表整个子网(0000 0000),主机号部分全1,即255(1111 1111)代表对整个子网进行广播。
1.2.2 域名和 IP 地址并用的理由
TCP/IP 网络通过 IP 地址确定通信对象。用 IP地址代替服务器名称也能正常工作,只是因为难记,所以用名称。
为什么有服务器名称还需要IP地址?
因为只用名称确定通信对象效率低。域名从几十字节到一两百字节(书中说最长为255字节,这里存在疑问)不等,ip地址只需要4字节,另外域名长度不固定也会造成处理效率低。因此名称给人使用,ip给路由器使用。而这两者之间互相查询则需要DNS。
DNS:Domain Name System,域名系统。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。(来源:百度百科)
1.2.3 Socket 库提供查询 IP 地址的功能
查询ip地址只需要询问最近的DNS服务器,例如:
向 DNS 服务器发出查询,也就是向 DNS 服务器发送查询消息,并接收服务器返回的响应消息。
通过 DNS 查询 IP 地址的操作称为域名解析,负责执行解析(resolution)操作的叫解析器(resolver)。解析器是一段程序,包含在操作系统的Socket 库里。
1.2.4 通过解析器向 DNS 服务器发出查询
解析器的函数名为 gethostbyname,调用很简单,如下所示:
gethostbyname("www.blog.csdn.net");
DNS服务器返回相应消息后,解析器取出ip地址,写入浏览器指定的内存地址中。当浏览器向web服务器发消息时从内存地址中取出ip地址。
1.2.5 解析器的内部原理
解析器生成要发送给 DNS 服务器的查询消息,然后委托操作系统内部的协议栈(“协议驱动”“TCP/IP 驱动”)发送消息,通过网卡将消息发出。
如果 Web 服务器已经在 DNS 服务器上注册,DNS查询后就会把IP 地址写入响应消息并返回给客户端,再次经协议栈返回解析器,解析器读取消息取出ip地址写入应用程序(浏览器)的内存地址中。
另外,DNS服务器的ip地址事先设置好,不需要查询,我们平时电脑上就已经设置了,像360安全中心之类的软件也有DNS优选功能。
本节完。