一、IP地址的基本知识
1、浏览器解析网址并生成HTTP消息后,委托操作系统将消息发送到网络中的功能,则需要查询网址中服务器域名对应的IP地址。
2、凡是用一台集线器相互连接起来的计算机都属于同一个子网,子网与子网之间用路由器相互连接,形成大的网络,网络中的每一台设备(包括路由器,计算机)都有其IP地址。
过程:子网1中的一台计算机A发送消息给子网5的一台计算机B,首先通过子网的集线器转发给距离A最近的路由器,然后消息在经过子网6内的集线器转发到下一个路由器,然后再由路由器通过子网5的集线器发送给计算机B。
3、IP地址:一串32比特的十进制数字,中间用圆点隔开。
(1)IP地址中:网络号和主机号连起来共32比特(4个字节)。但这两部分的具体结构,用户可自行决定,所以我们需要另外的附加信息(即子网掩码)来表示IP地址的内部结构。
(2)子网掩码的作用是表示网络号和主机号的边界,子网掩码为1的部分表示网络号,为0的部分表示主机号。
十进制表示 将左侧十进制转换成比特后
IP地址 10. 1. 2. 3 00001010.00000001.00000010.00000011
子网掩码 255.255.255.0 11111111.11111111.11111111.00000000
网络号 10. 1. 2. 00001010.00000001.00000010.
主机号 3 00000011
注:IP地址的主机号全为0:表示整个子网
IP地址的主机号全为1:表示向子网上所有设备发送包,即”广播“。
二、为何要IP地址和域名并用
1、简单来讲,域名是给人看的。而IP地址是给路由器看的。
2、之所以不让路由器使用域名,是因为域名数据量大,至少要几十个字节,且数据长度不固定,造成性能的消耗和时间的浪费,而IP地址,固定4个字节,方便传输。但给人记忆32个数字相比记名称要难。所以,在人和机器都不做出牺牲的前提下,域名和IP地址并用完美的解决了这一问题。
3、但为了填补人和机器之间的信息差,我们需要一个机制能通过域名名称来查找到IP地址,这个机制就是DNS机制(Domain Name System 域名服务系统)----将服务器名称和IP地址进行关联是DNS最常见的用法,但DNS的功能不仅限于此。
三、Socket库提供查询IP地址的功能
1、Socket库是用于调用网络功能的程序组件集合,由加州大学伯克利分校开发的UNIX系操作系统BSD中开发的C语言库,其中包含了很多用于发送和接收数据的程序组件,其中有一种程序组件叫做解析器。
该解析器可以通过DNS查询IP地址进行域名解析。
2、IP地址的查询过程
解析器的调用(在浏览器中编写一行代码进行调用)——>解析器向DNS服务器(委托操作系统)发送查询消息——>DNS服务器返回响应消息(消息中包含查询到的IP地址)——>解析器取出地址,并将其写入浏览器指定的内存地址中。
接下来浏览器在向Web服务器发送消息时,只要从该内存地址中取出IP地址,将其与HTTP请求消息一起交给操作系统即可。
3、解析器要做的事情
(1)应用程序(浏览器)调用解析器的代码:<内存地址>=gethostbyname(“www.lab.glasscom.com”);
(2)Socket中的解析器
- 生成发送给DNS服务器的查询消息
- 解析器委托操作系统向DNS服务器发送查询消息,操作系统内部的协议栈发送UDP消息,通过网卡将消息发送给DNS服务器
- 待操作系统接受到DNS服务器通过网卡返回的响应消息,返回给解析器
- 解析器从返回的响应消息中取出IP地址,存放到指定的<内存地址>中
- 返回给应用程序(浏览器)