获取我们的连接信息
学习如何获取我们的连接信息。
每台连接到互联网或TCP/IP网络的计算机都有一个IP地址。我们可以通过多种命令行方法来确定自己的IP地址。
ifconfig 命令
ifconfig 是一个传统的命令,用于显示网络设备的信息。尽管现在已有更新的工具可用,但我们仍从这个命令开始学习,因为它在Mac和Linux系统上普遍可用。在Ubuntu 18.04上,我们需要安装 net-tools 包才能使用它:
1sudo apt install net-tools
安装完成后,运行 ifconfig:
1ifconfig
屏幕上会显示大量输出,开头部分如下所示:
网络信息
ifconfig 命令会显示计算机上每个网络适配器的信息及其连接详情。每个适配器都有一个名称,例如 en0、eth0,或者本例中的 enp0s3。
该命令还会显示每个适配器的IPv4地址(由 inet 字段表示)、子网掩码(netmask)以及广播地址。同时也会显示与每个适配器关联的IPv6地址(由 inet6 字段表示)。
ether 字段显示的是网络硬件的MAC地址。这串十六进制字符唯一标识了一个网络设备。
不同计算机上的适配器名称和数量可能不同,但总会有一个本地回环设备的条目,其IPv4地址为 127.0.0.1:
这是一个虚拟网络设备,用于机器与自身通信。当Wi-Fi断开、网线拔掉或身处飞机上时,这个设备让本地服务之间仍能相互通信。当我们运行开发服务器并访问 localhost 时,实际上就是使用了这个回环设备。
如果我们配置了其他网络适配器,比如之前在配置网络中设置的VirtualBox主机仅适配器,也会看到类似的内容:
ifconfig 命令会列出系统中所有适配器。我们也可以通过提供适配器名称作为参数,来只查看特定适配器的信息。例如,要查看 enp0s8 适配器,只需运行命令 ifconfig enp0s8。
学会阅读 ifconfig 的输出非常重要,因为虽然其他工具能提供更清晰的信息,但它们可能并未安装或不适用于我们的平台。
IP地址
再次查看 ifconfig 命令输出的前几行:
在此例中,enp0s3 适配器对应的IPv4地址是 10.0.2.15。这不是一个可公开访问的IP地址。仅从IP地址本身就能判断出这台计算机位于某个路由器之后。如何判断?IP地址被划分为不同的范围,其中一些范围专门保留用于特定用途。
- 地址范围
127.0.0.0到127.255.255.255专用于本地回环设备。 - 地址范围
10.0.0.0到10.255.255.255、172.16.0.0到172.31.255.255,以及192.168.0.0到192.168.255.255均保留用于私有网络内部通信。 - 地址范围
169.254.0.0到169.254.255.255用于在无法自动分配IP地址时,主机之间的通信。这表明计算机未能从网络获取有效的IP地址。
大多数路由器会为计算机分配以 192.168 或 10 开头的IPv4地址。路由器使用网络地址转换(NAT)技术,将一个外部IPv4地址共享给多台计算机。由于IPv4地址资源有限,通过NAT让多台设备共用一个公网IP,是满足需求的一种方式。
但这使得我们在尝试让外部网络用户连接到自己时,难以找到真实的公网IP地址。要获取公网IP地址,需要借助外部服务。
正如我们在使用别名和函数创建快捷方式中所见,可以使用以下命令从命令行获取公网IPv4地址:
1curl icanhazip.com
该命令使用 curl 向 http://icanhazip.com 发起请求,返回当前的IP地址。我们将在后续课程中深入学习 curl 命令。
ifconfig 命令在技术上已被弃用,多年未更新。许多Linux系统提供了功能更强、输出格式不同的 ip 命令:
1ip addr show
该命令显示的信息与 ifconfig 类似,但格式略有不同。例如,它使用CIDR表示法显示IPv4地址。CIDR(无类别域间路由)是一种分配IPv4地址的方法,能减少浪费。在CIDR出现之前,IP地址按类别分配,决定了每个网络可容纳的主机数量。组织必须购买整个类别的地址块,这种分类方式导致大量已分配却从未使用的IP地址。CIDR解决了这一问题。
在此例中,ip 命令显示的IPv4地址为 10.0.2.15/24。其中 10.0.2.15 是IP地址本身,/24 表示子网掩码由24位组成,即 255.255.255.0,这与我们之前使用 ifconfig 查看的结果一致。由此可知,所有以 10.0.2. 开头的IP地址都属于同一网络。
虽然 ifconfig 命令通用,但已被弃用,且不支持CIDR格式。然而,由于 ip 命令并非在所有系统上都可用,因此熟练掌握 ip 和 ifconfig 两种工具是非常有用的。