• 网络编程三要素


    概述

    • IP地址端口号共同确定了网络通信的目的地,即数据应该发送到哪个设备上的哪个服务。
    • 协议则规定了数据的传输方式,确保数据能够正确、高效地在网络中流动。

    在Java网络编程中,这些要素通常通过套接字(Socket)来实现。套接字是网络通信的端点,它将IP地址和端口号结合起来,并根据所使用的协议(TCP或UDP)提供不同的编程接口。通过套接字,Java程序可以与网络中的其他程序进行通信,实现数据的发送和接收。

    IP地址(Internet Protocol Address)

    • IP地址是分配给网络中每个设备的唯一标识符,它允许设备在互联网上进行通信。
    • Java中可以使用InetAddress类来获取和处理IP地址。例如,通过InetAddress.getByName("hostname")可以获取主机的IP地址。
    • 有两种主要类型的IP地址:IPv4和IPv6。IPv4使用32位地址,而IPv6使用128位地址,提供更多的地址空间。
    1. IP地址的作用

      • IP地址使得网络设备能够相互通信。它类似于现实生活中的地址,用于确保信息能够被发送到正确的目的地。
    2. IP地址的表示

      • 传统的IPv4地址由32位二进制数构成,通常分为4个8位的段,每段以点分十进制表示(例如:192.168.1.1)。
      • IPv6地址是128位的,用8组4个十六进制数表示(例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334)。
    3. IP地址的分类

      • IP地址分为A、B、C、D和E五类。A、B、C类用于单播,D类用于组播,E类用于实验。
      • A类地址范围从0.0.0.0到127.255.255.255,通常用于大型网络。
      • B类地址范围从128.0.0.0到191.255.255.255,适用于中型网络。
      • C类地址范围从192.0.0.0到223.255.255.255,适用于小型网络。
    4. 子网掩码

      • 子网掩码用于定义IP地址中的网络部分和主机部分。它与IP地址结合使用,通过逻辑“与”操作确定网络地址。
    5. 特殊IP地址

      • 0.0.0.0 通常用作默认路由或表示“任何网络”。
      • 127.0.0.1 是环回地址,用于指向本地计算机。
      • 169.254.x.x 通常用于当DHCP服务器不可用时自动配置的链接本地地址。
    6. 私有IP地址

      • 私有IP地址是为内部网络保留的,不会在互联网上路由。它们用于组织内部的网络,而不消耗公共IP地址资源。
    7. 公网IP地址

      • 公网IP地址是全球唯一的,可以在互联网上路由,由IANA(互联网号码分配局)统一分配。
    8. CIDR(无类别域间路由)

      • CIDR使用一个斜线表示法来指定子网掩码的长度,例如192.168.1.0/24表示前24位是网络地址,剩下的8位是主机地址。
    9. IP地址的分配

      • IP地址的分配通常由ISP(互联网服务提供商)或内部网络管理员进行。
    10. IPv4与IPv6

      • IPv4地址由于数量有限,已经逐渐被新的IPv6地址取代。IPv6地址提供了更大的地址空间,以满足日益增长的设备数量需求。

    IPv4和IPv6是互联网协议的两个版本,它们分别定义了不同的地址格式和网络操作方式。以下是对IPv4和IPv6的计算方法和理解的详细解释:

    IPv4地址

    1. 地址格式
      IPv4地址由32位二进制数构成,通常被分割成4个8位的段,每个段转换为十进制表示,段之间用点(.)分隔。例如:192.168.1.1。

    2. 计算方法

      • 二进制到十进制:每个8位的段可以表示的最大数值是255(二进制11111111)。
      • 子网掩码:与IPv4地址一起使用的子网掩码定义了网络地址和主机地址。通过将IP地址与子网掩码进行按位与操作,可以得到网络地址。
    3. 地址分类

      • A类:起始位为0,网络号占8位,范围从0.0.0.0到127.255.255.255。
      • B类:起始位为10,网络号占16位,范围从128.0.0.0到191.255.255.255。
      • C类:起始位为110,网络号占24位,范围从192.0.0.0到223.255.255.255。
    4. CIDR表示法
      CIDR使用一个斜线后面跟一个数字来表示子网掩码的长度。例如,192.168.1.0/24表示网络部分是前24位。

    IPv6地址

    1. 地址格式
      IPv6地址由128位二进制数构成,通常被分成8组,每组4个十六进制数,组之间用冒号(:)分隔。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

    2. 计算方法

      • 十六进制到二进制:每个十六进制数代表4位二进制,IPv6地址因此可以更紧凑地表示。
      • 子网划分:IPv6同样使用子网掩码,但因为地址空间极大,通常不需要像IPv4那样进行严格的子网划分。
        冒分十六进制表示法
    import java.math.BigInteger;
     
    public class HexConversion {
        public static void main(String[] args) {
            // 十六进制字符串转换为BigInteger
            String hexString = "1A3F";
            BigInteger bigInteger = new BigInteger(hexString, 16);
            System.out.println("BigInteger: " + bigInteger);
     
            // BigInteger转换为十六进制字符串
            String hexStringResult = bigInteger.toString(16);
            System.out.println("Hex String: " + hexStringResult);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 地址类型

      • 全球单播地址:类似于IPv4的公网地址,用于在互联网上唯一标识一个设备。
      • 链路本地地址:用于单个链路上的通信,不打算跨越路由器。
      • 唯一本地地址:类似于私有IPv4地址,不会在互联网上路由。
    2. 地址压缩
      IPv6允许地址中的连续零被压缩成“::”,但每个地址中只能使用一次以避免歧义。

    3. IPv4到IPv6的转换

      • 随着IPv4地址的耗尽,IPv6正在逐渐被采用。一些技术如隧道技术允许IPv6数据包在IPv4网络中传输。

    理解IPv4和IPv6

    • 地址空间:IPv6提供了比IPv4更大的地址空间,理论上可以为地球上每个设备分配唯一的IPv6地址。
    • 安全性:IPv6在设计时考虑了安全性,内置了一些安全特性,如IPsec。
    • 配置简便性:IPv6支持无状态地址自动配置(SLAAC),简化了网络配置过程。
    • 兼容性:IPv4和IPv6可以共存,通过双栈(同时支持两种协议)或转换技术实现互通。

    理解IPv4和IPv6的关键在于认识到它们都是网络层用于实现设备间通信的逻辑地址。随着技术的发展,IPv6正在逐步取代IPv4,以满足未来网络的需求。

    端口号(Port Number)

    • 端口号用于区分同一IP地址上运行的不同网络服务或进程。端口号是一个16位的数字,其取值范围从0到65535。
    • 知名的服务和应用程序通常使用众所周知的端口号(如HTTP服务通常使用80端口,HTTPS使用443端口)。
    • 在Java中,端口号通常在创建服务器套接字(ServerSocket)或客户端套接字(Socket)时指定。

    协议(Protocol)

    • 协议定义了数据在网络中的传输方式,包括数据的格式化、传输控制和错误处理机制。
    • 最常见的网络协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP提供可靠的、面向连接的通信,而UDP提供不可靠的、无连接的通信。
    • 在Java中,可以通过套接字编程来选择使用TCP或UDP协议。ServerSocketSocket类通常用于TCP通信,而DatagramSocketDatagramPacket类用于UDP通信。
  • 相关阅读:
    Ubuntu安装docker及docker-compose
    layui table表格跨页多选
    判断一个时间段是否经过了另一个时间段
    PHP志愿者协会报名系统的设计与实现 毕业设计-附源码201524
    一文拿捏线程和线程池的创建方式
    C++ 基础知识 ∈ C++ 编程笔记
    如何修复显示器或笔记本电脑屏幕的黄色色调?这里提供几种方法
    Zookeeper安装
    Linux - Ubuntu里安装指定版本的package
    centos 6.10 安装 python3.10.5 和 openssl1.1.1
  • 原文地址:https://blog.csdn.net/Founder_Xiao_Xin/article/details/138176225