网站安全的必要性,设计说明万能模板500字,网络营销策划推广公司招聘,婚庆公司经营范围一、概述 记录时间 [2024-12-18] 前置文章#xff1a;网络编程 01#xff1a;计算机网络概述#xff0c;网络的作用#xff0c;网络通信的要素#xff0c;以及网络通信协议与分层模型
本文讲述网络编程相关知识——IP 地址#xff0c;包括 IP 地址的作用、分类#xff…一、概述 记录时间 [2024-12-18] 前置文章网络编程 01计算机网络概述网络的作用网络通信的要素以及网络通信协议与分层模型
本文讲述网络编程相关知识——IP 地址包括 IP 地址的作用、分类以及特殊的 IP 等。
IP 地址的作用在于唯一定位一台网络上的计算机。文章中通过 Java 编程实现了 IP 地址的信息获取。
通过获取 IP 和端口同时基于相关的网络协议我们能实现不同计算机之前的通信。 二、IP 地址的分类
1. IPv4 / IPv6
IPv4 和 IPv6 是互联网协议IP的两个版本用于定义数据在网络中的传输格式和寻址方式。
IPv6 作为 IPv4 的继任者被开发出来以解决地址空间不足的问题并引入了其他改进。 IPv4
IPv4Internet Protocol version 4
地址格式 IPv4 使用 32 位二进制数表示地址例如 192.168.1.1。以点分十进制记法书写每 8 位用 . 隔开共 4 组每组二进制都转换成十进制。这种格式大约提供 43 亿个唯一的 IP 地址。其中30 亿都在北美亚洲 4 亿基本用尽了。 子网掩码 使用子网掩码来区分网络部分和主机部分。子网掩码同样由 32 位组成例如255.255.255.0 表示前 24 位是网络部分。在 192.168.1.0/24 子网中前 24 位是网络部分。 广播地址 每个子网都有一个广播地址用于向该子网内的所有设备发送消息。例如在 192.168.1.0/24 子网中广播地址是 192.168.1.255。 私有地址 为了缓解公有 IP 地址的短缺定义了私有地址范围这些地址可以在内部网络中重复使用。 NAT网络地址转换 由于 IPv4 地址资源有限很多网络使用 NAT 技术允许多个内部设备通过一个或少数几个公有 IP 地址访问互联网。 IPv6
IPv6Internet Protocol version 6
地址格式 IPv6 使用 128 位二进制数表示地址。以冒号十六进制记法书写每 16 位用 : 隔开共 8 组每组二进制都转换成十六进制。例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334简化后的表示可以省略前导零和连续的零段如 2001:db8:85a3::8a2e:370:7334。 地址空间 IPv6 设计时就考虑到了足够的地址空间因此原则上不再需要 NAT。IPv6 提供了几乎无限的地址空间每个设备都可以拥有一个全球唯一的 IP 地址。 相比于 IPv4 的优点 多播支持IPv6 对多播的支持更加高效取消了广播概念所有通信都基于单播或多播。自动配置IPv6 支持无状态地址自动配置SLAAC允许设备在没有 DHCP 服务器的情况下自动获取 IP 地址和其他网络设置。移动性IPv6 内置了对移动节点的支持使得移动设备能够在不同网络之间无缝切换。更好的头部格式IPv6 头部比 IPv4 更简洁去除了不必要的字段并将选项移动到扩展头部这有助于提高路由器处理效率。安全性增强IPv6 强制要求支持 IPsecIP 安全协议提高了通信的安全性。 2. 公网 / 私网
公网互联网
公网是指连接到全球互联网的网络其 IP 地址在全球范围内唯一可以直接通过互联网进行通信。
私网局域网
私网是指不直接连接到互联网的内部网络私网使用的是特定保留的 IP 地址段可以在多个不同的私有网络中重复使用。私网内的设备可以相互通信如 192.168.x.x给组织内部使用要考虑安全性。通过 NAT 技术私网中的多台设备可以通过同一个公网 IP 地址访问外部资源。 三、域名 域名是为了方便人类记忆而设计的是人类可读的、层次化的名称用于标识互联网上的资源或服务。例如www.example.com。 IP 地址是计算机网络用来标识和定位设备的实际地址。 域名系统Domain Name System, DNS是一个分布式数据库负责将域名转换为对应的 IP 地址。 域名解析使用域名系统将域名转换为对应的 IP 地址的过程。 四、ABCDE 类地址
IPv4 地址被划分为 A、B、C、D、E 五个类别其中 A、B、C 类主要用于单播传输D 类用于组播传输E 类保留为将来使用。
下面是这五个类别的详细划分。 1. A ~ C 类
A ~ C 类主要用于单播传输。
观察这个 IP 地址192.168.1.1/24一共 4 个字节包含网络部分和主机部分。
网络部分24 表示前 3 个字节表示网络主机部分剩下的 1 个字节表示主机。
根据网络部分和主机部分的不同表示划分了 A、B、C 三类地址。 A 类
A 类网络 1 主机 3从左往右下同
例如 192.168.1.1/8适用于大型网络能够支持大量的主机。默认子网掩码255.0.0.0 B 类
B 类网络 2 主机 2
例如 192.168.1.1/16适用于中型网络。默认子网掩码255.255.0.0 C 类
C 类网络 3 主机 1
例如 192.168.1.1/24适用于小型网络。默认子网掩码255.255.255.0 2. D ~ E 类
D 类用于组播传输E 类保留为将来使用。
D 类 主要用于组播多播即从一个源发送数据到多个接收者。不使用传统的子网掩码不遵循传统的网络部分和主机部分的划分方式。 E 类 目前主要保留用于实验和研究目的。不使用传统的子网掩码不遵循传统的网络部分和主机部分的划分方式。 3. A ~ E 类地址的范围
xxx 表示主机范围。
地址二进制表示十进制表示A 类00000001.xxxxxxxx.xxxxxxxx.xxxxxxxx ~ 01111111.xxxxxxxx.xxxxxxxx.xxxxxxxx1.0.0.0 ~ 127.255.255.255B 类10000000.00000000.xxxxxxxx.xxxxxxxx ~ 10111111.11111111.xxxxxxxx.xxxxxxxx128.0.0.0 ~ 191.255.255.255C 类11000000.00000000.00000000.xxxxxxxx ~ 11011111.11111111.11111111.xxxxxxxx192.0.0.0 ~ 223.255.255.255D 类11100000.00000000.00000000.00000000 ~11101111.11111111.11111111.11111111224.0.0.0 ~ 239.255.255.255E 类11110000.00000000.00000000.00000000 ~ 11111111.11111111.11111111.11111111240.0.0.0 ~ 255.255.255.255 4. 第 1 个字节上的区别
十进制划分
从左数第 1 个字节上范围 0 ~ 255十进制A ~ E 类地址的划分如下。 二进制划分
从左数第 1 个字节上范围 00000001 ~ 11111111二进制A ~ E 类地址的划分如下。
A 类0xxxxxxxB 类10xxxxxxC 类110xxxxxD 类1110xxxxE 类1111xxxx
xxx 才是它们的范围。例如A 类 7 个 x范围 00000001 ~ 01111111。 五、特殊 IP 地址
特殊 IP 地址是指在互联网协议Internet Protocol, IP中具有特定用途或保留用于特殊目的的地址。
这些地址通常不能直接用于公共互联网上的常规通信。
以下是几种常见的特殊 IP 地址及其用途
127.0.0.1回环地址又名 localhost用于标识本地主机允许计算机上的程序与同一台计算机上的其他程序进行通信不必通过网络接口卡。0.0.0.0表示 “本网络”常用于默认网关配置。255.255.255.255有限广播地址用于向本地网络中的所有设备发送数据。 六、代码实现
1. 检测网络
一些检测网络的方法
# 联网检查ping 网络ip地址
ping baidu.com# 查看网络配置
ipconfig# 本机回环地址
ping 127.0.0.12. InetAddress 类
Java 提供的 InetAddress 类用于实现网络应用程序。例如可以获取 IP 地址。
InetAddress 类没有构造器因此不能使用 new 关键字构造实例对象。 3. 测试 IP 地址
查询本机 IP 地址
查询本机 IP 地址的 3 种方式
getByName(127.0.0.1)回环地址。getByName(localhost)回环地址。getLocalHost()主机名和主机的 IP 地址。
// InetAddress 是一个没有构造方法的类所以直接用类名获取方法
// inetAddress1 就是获取到的一个 InetAddress 对象// 查询本机地址
InetAddress inetAddress1 InetAddress.getByName(127.0.0.1);
System.out.println(inetAddress1);InetAddress inetAddress3 InetAddress.getByName(localhost);
System.out.println(inetAddress3);InetAddress inetAddress4 InetAddress.getLocalHost();
System.out.println(inetAddress4);查询网站 IP 地址
查询网站 IP 地址的方式
IP域名
// 查询网站 IP 地址
InetAddress inetAddress2 InetAddress.getByName(www.baidu.com);
System.out.println(inetAddress2);分析 IP 地址中的信息
注意实际输出将依赖于 DNS 配置和当前的网络环境。
getAddress()返回一个字节数组表示该 InetAddress 对象的原始 IP 地址。getCanonicalHostName()返回该地址的规范主机名即完全限定域名它包含了主机名和域名可以唯一地标识网络上的一个设备或服务。getHostAddress()返回该 InetAddress 对应的文本表示形式的 IP 地址例如192.0.2.1点分十进制。getHostName()返回该 InetAddress 对应的主机名。如果该对象是由 IP 地址创建的可能会进行反向 DNS 查找以确定主机名域名。
InetAddress inetAddress2 InetAddress.getByName(www.baidu.com);// 一组地址
System.out.println(inetAddress2.getAddress());
// 规范的名字 IP
System.out.println(inetAddress2.getCanonicalHostName());
// IP
System.out.println(inetAddress2.getHostAddress());
// 域名、主机名
System.out.println(inetAddress2.getHostName());4. 完整代码
// 测试 IP
public class TestInetAddress {public static void main(String[] args) {// InetAddress 是一个没有构造方法的类所以直接用类名获取方法try {// 查询本机地址// inetAddress1 就是获取到的一个 ip 对象InetAddress inetAddress1 InetAddress.getByName(127.0.0.1);System.out.println(inetAddress1);InetAddress inetAddress3 InetAddress.getByName(localhost);System.out.println(inetAddress3);InetAddress inetAddress4 InetAddress.getLocalHost();System.out.println(inetAddress4);// 查询网站 IP 地址InetAddress inetAddress2 InetAddress.getByName(www.baidu.com);System.out.println(inetAddress2);// 一组地址System.out.println(inetAddress2.getAddress());// 规范的名字 IPSystem.out.println(inetAddress2.getCanonicalHostName());// IPSystem.out.println(inetAddress2.getHostAddress());// 域名、主机名System.out.println(inetAddress2.getHostName());} catch (UnknownHostException e) {e.printStackTrace();}}
}参考资料
狂神说 - 网络编程https://www.bilibili.com/video/BV1LJ411z7vY
Java 8 帮助文档https://docs.oracle.com/javase/8/docs/api/