基础概念——理解IP地址和域名

从程序员角度,可以把因特网看做是世界范围内的主机集合:

1)主机集合被映射为一组32位的IP地址

2)这个IP地址被映射为一组称为因特网域名标识符

3)因特网主机上的进程能够通过连接和任何其他因特网主机上的进程通信。

 

IP地址

  IP地址是一个32位无符号整数

  存放在一个结构中;

struct in_addr {

  unsigned int s_addr;

} ;

为什么要用结构来存放标量IP地址?

  把一个标量存放在一个结构中,是套接字接口早期实现的不幸产物。为IP地址定义一个标量类型应该更有意义。但现在更改已经太迟了,因为有大量的应用是基于此的了。

因为因特网主机可以有不同的主机字节顺序,TCP/IP为任意整数数据项定义了统一的网络字节顺序,即大端字节顺序。

即使主机字节顺序是小端法。Unix提供了一些函数在网络和主机字节顺序之间实现转换。

 

32位也就是4个字节

IP地址通常是用点分十进制方式表示的;这种表示方式更方便人们阅读

每个字节由它的十进制数表示,并且用句点和其他字节分开。

例如:128.2.194.242就是地址0x8002c2f2的点分十进制表示。

在Linux上,能够使用HOSTNAME命令来确定你的主机的点分十进制地址。

 

因特网程序使用inet_aton和inet_ntoa 函数来实现IP地址的点分十进制串之间的转换。

因特网域名

因特网客户端和服务器相互通信使用的是IP地址。但是对于人们而言,这个大整数实在是难以记住。

于是因特网定义了一组更加人性化的域名(domain name),以及一种将域名映射到IP地址的机制。

域名是一串用句点分隔的单词(字母、数字和破折号),例如:

kittyhawk.cmcl.cs.cmu.edu

域名集合形成了一个层次结构,每个域名编码了它在这个层次中的位置。

一级域名:com、edu、gov、org、net;这是由非盈利组织ICANN定义的。

下一层的二级域名:是有ICANN的各个授权代理按照先到先服务的基础分配的。一旦一个组织得到一个二级域名,那么它就可以在这个子域中创建任何新的域名了。

 

因特网还定义了域名集合与IP地址集合之间的映射。

直到1988年这个映射都是通过一个叫HOSTS.TXT的文本文件来手工维护的。

从那以后,这个映射是由通过分布世界范围内的数据库(DNS 域名系统)来维护的。

DNS数据库由上百万条如下图的条目,称为主机条目结构组成的,其中每条定义了一组域名和一组IP地址之间的映射。

从数学意义上来说,你可以认为每条主机条目就是一个域名和IP地址的等价类。

原文地址:https://www.cnblogs.com/grooovvve/p/10710320.html