初识IP地址

在浏览器生成HTTP消息后,接下来就是根据域名查询IP地址。下面简单介绍一下IP地址。

互联网是基于TCP/IP的思路设计的,TCP/IP的结构如下图

服务器如何连dockerhub_IP


TCP/IP由一些小的子网,通过路由器连接起来组成一个大的网络。子网用集线器连接起来的几台计算机,这里可以把子网看成一个单位,将子网通过路由器连接起来,形成一个网络。在网络中,所有设备会被分配一个地址,这个地址的整体称之为IP地址。通过IP地址我们可以判断出访问对象服务器的位置,从而将消息发送到服务器。发送者发出的消息先经过子网中的集线器,转发到距离发送者最近的路由器上。路由器会判断根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,前面的过程不断重复,最终消息到达目的地。

  • 实际IP地址
    -实际的 IP地址是一串32比特的数字,8比特为一组分成4组,分别使用十进制表示,然后在用圆点隔开 ,但仅凭这一串数字无法分出哪部分是网络号,哪部分是主机号。IP地址的规则是网络号和主机号连接起来总共是32比特,但是这两部分的具体结构是不固定的,在组建网络时,还需要另外的附加信息来表示IP地址内部结构,这一附加信息称之为 子网掩码

IP地址表示方法

服务器如何连dockerhub_DNS_02


子网掩码的格式,是一串与IP地址长度相同的32比特数字,其左边一半都是1,右边一半都是0,子网掩码为1的部分表示网络号,子网掩码为0的部分表示主机号 ,将子网掩码按照和IP地址一样的方式一每8比特为单位用圆点分组后写在IP地址的右边,如上图(b)的方法,也可以把1的部分的比特数用十进制表示写在IP地址的右侧,就像上图中的(c),这两种写法的含义是完全一样的。IP地址结构

服务器如何连dockerhub_子网_03


主机号部分的比特全部为0或者全部为1时代表特殊含义,主机号部分全部为0代表整个子网而不是子网中的某台设备。主机号部分全部为1表示向子网上所有设备发送包,即广播

Socket库提供查询IP地址的功能

查询IP只要询问最近的DNS服务器的IP地址是什么就可以了,DNS会告诉一个服务器的IP地址。向DNS服务器发出查询,也就是向DNS服务器发送 查询消息,并接收服务器返回的响应消息。每一台计算机上都有一个DNS客户端,而这个DNS客户端就是解析器,通过DNS查询IP地址的操作称为域名解析,负责执行解析的称之为解析器。解析器是一端程序,包含在操作系统的**Socket** 中,解析器的用法很简单。只需从Socket库中调用即可,调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,将其写入浏览器指定的内存地址中。接下来,浏览器在向Web服务器发送消息时,只要从该内存地址中取出IP地址,并将它与HTTP请求消息一起交给操作系统即可。