什么是ip地址

176 阅读4分钟

ip地址

公有IP地址:

IP地址是一个32位(IPv4)或128位(IPv6)的数字,用于唯一标识计算机、服务器、路由器或其他网络设备。每台连接到互联网的设备都必须拥有一个IP地址,这个地址充当设备在网络中的位置坐标。

简单来说,公网IP地址是可以通过 Internet 直接访问的 IP 地址,所有公共 IP 地址对其主机或服务器都是唯一的,不能重复。

私有IP地址:

私有IP地址是在局域网(LAN)中使用的IP地址,用于内部通信,通常不直接从互联网上访问。许多个设备在一个局域网中共享一个公有IP地址。私网IP地址不在 Internet 上路由,也无法从 Internet 向它们发送流量

概况:每一台设备都需要一个IP地址来进行区分标识,而IP地址中又有分为公网ip和私网ip,公网IP地址用于在互联网上可访问的设备。私有IP地址主要用于内部网络。

对比

特征公网IP地址私网IP地址
范围全球性本地
是否免费收费免费
安全性不安全,容易受到攻击安全
是否需要NAT需要 NAT 才能与设备通信不需要 NAT

IPv4 vs. IPv6

  • IPv4:IPv4使用32位地址,它由四个八位组成,通常以点分十进制(例如,192.168.0.1)的形式表示。由于互联网的快速增长,IPv4地址资源已经枯竭,因此逐渐被IPv6取代。
  • IPv6:IPv6采用128位地址,使用冒号分隔的八组十六进制数表示(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6大大扩展了可用的地址空间,以支持未来的互联网需求。

IP地址的分类

三大私网地址范围

  1. 10.0.0.0 到 10.255.255.255

    • 这是一个较大的私有IP地址范围,可以支持约16,777,216个IP地址。
    • 通常用于大型企业或组织的内部网络。
  2. 172.16.0.0 到

    • 这个范围包括16个连续的私有IP地址块,每个块支持约65,536个IP地址。
    • 通常用于中型企业或组织的内部网络。
  3. 192.168.0.0 到 192.168.255.255

    • 这是最常见的私有IP地址范围,用于小型家庭网络和小型企业内部网络。
    • 通常用于家庭路由器和小型办公室网络设备。

区分私网地址范围的意义

  • 保证在不同规模和类型的网络中可以使用私有IP地址,而不会发生地址冲突。

私网ip的作用

这些私有IP地址范围允许内部网络中的设备进行本地通信,而不需要唯一的全球性标识。在连接到互联网时,路由器或防火墙会将内部私有IP地址转换为公有IP地址,以便与互联网通信。这有助于减少了IPv4地址枯竭问题,因为有限的公有IP地址可以用于多个内部设备。

那如果我们想要获取本地的IP地址,应该如何获取呢?

可以使用Python类获奖

使用Python获取本地IP地址

我们可以使用Python提供了socket库,来获取获取本地计算机的IP地址。


import socket

# 获取本地主机名
hostname = socket.gethostname()

# 获取本地IP地址
ip_address = socket.gethostbyname(hostname)

print(f"本地主机名:{hostname}")
print(f"本地IP地址:{ip_address}")

那如果我们想要获取客户端的IP地址,又该怎么获取呢?

使用JavaScript获取客户端IP地址

在Web网站中,我们可以使用第三方API(ipify)来获取IP地址:

// 使用fetch函数发送GET请求到https://api.ipify.org?format=json
fetch('https://api.ipify.org?format=json')
  .then(response => response.json()) // 解析响应为JSON格式
  .then(data => {
    // 当JSON解析完成后,data对象包含了响应数据,其中的ip字段包含了客户端IP地址
    const clientIP = data.ip;
    console.log(`客户端IP地址:${clientIP}`);
  })
  .catch(error => {
    // 捕捉任何可能的错误,如网络连接问题或JSON解析错误
    console.error('获取IP地址时出错:', error);
  });

代码讲解

  1. 使用fetch函数向指定的URL发送GET请求。在这里,URL是https://api.ipify.org?format=json,这是一个提供IP地址信息的API。

  2. 一旦请求完成,fetch会返回一个Response对象,然后我们使用.json()方法将响应解析为JSON格式。

  3. 第二个.then块会在JSON解析完成后执行。此时,data对象包含了响应数据,其中的ip字段包含了客户端的IP地址。

  4. 最后,我们将客户端IP地址打印到控制台。如果在请求过程中出现错误,catch块会捕获并打印错误信息。