1.IP地址基础知识
(1)尽管浏览器能解析网址并生成HTTP消息,但它本身是不能发送网络消息的,这必须委托给操作系统来实现。在此之前,我们要查询网址中的服务器域名找到对应的IP地址。所以任务又可以细分为:
生成HTTP消息->根据域名查询IP地址->委托操作系统发送消息
(2)互联网和公司内部的局域网都是基于TCP/IP的思路设计的(见图1.8)。TCP/IP结构:即一些小的子网,通过路由器组成了一个大的网络。其中,子网可以理解为:用集线器连接起来的几台计算机(这一群为子网)。
网络中所有的设备会分配一个地址,比如“×× 号 ×× 室”。其中“号”对应的号码是分配给整个子网的,而“室”对应的号码是分配给子网中的计算机的,这就是网络中的地址。“号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为 IP 地址。
【补充】
①数据是以包的形式传送的。
②路由器:一种对包进行转发的设备
集线器:功能同路由器,分为发送者的消息先经过子网中的集线器,转发到距离发送者最近的路由器上。当计算机数量较少时,可以用一台集线器连接起来;当计算机数量较多时,一台集线器可能无法连接这么多计算机,可以增加集线器数量并将集线器相互连接起来,这时,凡是通过集线器连接起来的所有设备都属于同一个子网。
(3)IP地址内部结构(图1.10)
IP地址其实是一串32位的数组,(8位为一字节)分成4组,分别用十进制表示并用圆点隔开(图1.9)。其意义表示网络号+主机号两部分(两部分结构不固定)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6DuvOhks-1581480813233)(https://static.leiphone.com/uploads/new/sns/article/202002/5e4379e5c85a3.png)]
在图1.10中,子网掩码的格式为一串与IP地址相同的32位数字,其左边一半都是1,右边一半都是0.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SYArjLJM-1581480813234)(https://static.leiphone.com/uploads/new/sns/article/202002/5e437a0512b6a.png)]
2.域名和IP地址并用的缘由
如果全部用IP地址代替服务器名称也是可以工作的(如果Web服务器使用虚拟主机功能,有可能无法通过IP地址访问)。从运行效率上来看,只使用服务器名称来查找并不好。IP 地址的长度为 32 比特,也就是 4 字节,相对地,域名最短也要几十个字节,最长甚至可以达到 255 字节。
现在的方案是:让人来使用名称,让路由器来使用 IP 地址。那样人就可以稍微轻松地记住域名(虽然IP地址字节少,但数字难以记住,域名相对适合人类的语言)。然后,让路由器使用IP地址,就达到了”好记,快速“的作用。
3.Socket库提供查询IP地址的功能
向DNS查询,可以解析域名得到IP地址,并接受服务器返回的响应消息。即:对于DNS服务器,我们的计算机上有相应的DNS客户端,而这一部分称为DNS解析器或解析器(操作的名称)。
解析器实际上是一段程序,包含在操作系统的Socket库中。
【补充】
①DNS:Domain Name System,域名服务系统。将服务器名称和 IP 地址进行关联是 DNS 最常见的用法,但 DNS 的功能并不仅限于此,它还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。
②Socket库是用于调用网络功能的程序组件集合。它是在加州大学伯克利分校开发的 UNIX 系操作系统 BSD 中开发的 C语言库,互联网中所使用的大多数功能都是基于 Socket 库来开发的。因此,BSD 之外的其他操作系统以及 C 语言之外的其他编程语言也参照 Socket 库开发了相应的网络库。可以说,Socket 库是网络开发中的一种标准库。
4.通过解析器向DNS服务器发出查询
解析器的调用:具体来说,在编写浏览器等应用程序时(见图1.11),只要写上解析器的程序名称"gethostname"以及Web服务器的域名“www.lab.glasscom.com”就可以了。
在调用解析器后,解析器向DNS服务器发送查询消息,然后DNS服务器会响应消息。响应消息包含插叙道德IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存中。接下来,浏览器在向Web服务器发送消息时,只要从该内存中取出IP地址,并将它与HTTP请求消息一起交给操作系统就可以了(目前还没有发送出去)。
【补充】
先解析域名获取IP地址,再找到相应的服务器端,发送HTTP消息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6OpVN3Nu-1581480813235)(https://static.leiphone.com/uploads/new/sns/article/202002/5e437b187bbd3.png)]
5 .解析器的内部原理
③网络应用程序(浏览器)调用解析器时,程序的控制流程就会转移到解析器的内部。然后,解析器会生成要发送给DNS服务器的查询消息。类似于浏览器生成要发送给Web服务器的HTTP请求的过程类似,解析器会根据DNS种类,生成一条请告诉我 www.lab.glasscom.com 的 IP 地址”的数据,并将它发送给 DNS 服务器。
图中④解析器发送消息给DNS服务器其实要交给操作系统内部的协议栈完成。同浏览器,本身不具备使用网络收发数据的功能。解析器调用协议栈后,控制流程载词转移,协议栈开始发送消息。
图中⑤,然后通过网卡将消息发送给NDS服务器。
图中⑥,如果Web服务器已经在DNS服务器上注册过,那么IP地址记录被找到并写入效应消息返回。
图中⑦⑧,接下来,消息经过网络达到客户端,再经过协议栈被传递给解析器。
图中⑨,然后解析器读取出消息取出IP地址,并将IP地址传送给应用程序。实际上,是写到了(图1.11)<内存地址>处。
【补充】
(1)控制流程转移:由于程序是"自上而下"顺序执行,当到达需要调用解析器的部分时,对应的那一行程序就会被执行,应用程序本身的工作就会暂停(图1.12①)。然后,Socket库中的解析器开始运行(图1.12 ②),完成应用程序委托的操作。像这样,由于调用了其他程序,原本运行的程序进入暂停状态,而被调用的程序开始运行。
(2)在下图中,我们假设 gethostbyname 这个程序实现了解析器的全部功能(底层更加复杂不易理解)。
(3)HTTP消息是文本编写的,而DNS消息是使用二进制数据编写的。
(4)客户端(用户端): 是指与服务器相对应,为客户提供本地服务的程序。
(5)协议栈:操作系统内部的网络控制软件,也叫“协议驱动”“TCP/IP驱动”等
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VrjAUwon-1581480813235)(https://static.leiphone.com/uploads/new/sns/article/202002/5e437b2813c83.png)]
到此解析器的工作完成,计算机内部结构就这样一层层的。另外,向DNS服务器发送消息时,我们当然也需要直到DNS服务器的IP地址。不过这个 IP 地址是作为 TCP/IP 的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中 TCP/IP 的设置方法也有差异,见(图1.13)