(1) IPv6地址表示形式
1> 首选形式
x:x:x:x:x:x:x:x , 每个 x 都占 16 位地址段, x 是一个 16 进制的值, 如 8080:0:9:0:200:A12:100C:12 ;
2> 包含0位
零位产生 : 自动生成的 IPv6 地址, 经常包含 0 位的字符串;
0位压缩 : 使用 "::" 压缩 0 位, 如果连续出现多个 0 位, 可以使用 "::" 代替 8个字段中的 一个或者 多个 字段;
示例 : 8080:0:0:0:0:0:100C:12 , 可以压缩为 8080:100C:12 , 中间的 5 位被压缩了;
3> IPv4 和 IPv6 混合环境
混合环境替换形式 : x:x:x:x:x:x:d.d.d.d , 6 个 x 和 4 个 d, 一个 x 占 16位, 一个 d 占 8位;
映射 IPv4 的 IPv6 地址 : "::FFFF:192.168.1.1" 形式;
IPv4 兼容 IPv6 的地址 : "::192.168.1.1" 形式;
无效情况 : IPv4 必须是 d.d.d.d 格式的, 三位 或者 两位 d 的格式无效;
有效情况 : 一位 d 格式 "::FFFF:d" 有效;
4> 特殊 IPv6 地址
映射IPv4地址 : 格式 "::FFFF:d.d.d.d" , 这种类型的 IPv6 地址用于表示 IPv4 地址;
IPv4 与 IPv6 节点通信 : 本机需要 使用 相同地址数据结构, 和 相同套接字;
地址内部机制 : Java 中只有一种 IPv4 地址, 任何输入的 IPv6 形式 或者 IPv4 地址映射的地址 都会被转为 IPv4 地址形式;
5> IPv6 范围地址的文本表示形式
问题出现 : 链接本地 和 站点本地地址都是非全球的, 不同的主机 可能具有 相同的目标地址, 可能通过相同的始发系统上的不同接口到达;
解决方案 : 将始发系统连接到同一范围的多个时区, 将 时区标识符(scope_id) 添加到 IPv6 地址上;
指定scope_id格式 : IPv6-address%scope_id , IPv6 地址就是 x:x:x:x:x:x:x:x , scope_id 指的是本地接口, 如 eth0等;
scope_id 指定方式 :
-- 数字标识符 : 必须是系统可以识别的特定接口 和 范围的整数, 这些整数通过系统上的管理工具确定这些数字值;
-- 字符串标识 : 必须是 NetworkInterface.getName() 返回的确切字符串;
4. InetSocketAddress
类的全名称 :
public class InetSocketAddress extends SocketAddress
-- 作用 : IP套接字地址, 包括 IP地址 和 端口号, 用于让套接字进行 绑定 连接 或者当作返回值;
用法二 : 主机名 + 端口号, 尝试解析主机名, 如果解析失败, 该地址被标记为 未解析地址;
5. InterfaceAddress
类的全名称 :
public class InterfaceAddress extends Object
-- 作用 : 表示网络接口地址;
-- 对于 IPv4 地址 : IP地址, 子网掩码, 广播地址;
-- 对于 IPv6 地址 : IP地址, 网络前缀长度;
6. SocketAddress
类的全名称 :
public abstract class SocketAddress extends Object implements Serializable
-- 作用 : 这是一个不带任何协议附件的 SocketAddress, 注意这是一个抽象类, 其子类应该是协议相关的;
7. NetworkInterface
类的全名称 :
public final class NetworkInterface extends Object
-- 作用 : 由名称 和 分配给此接口的IP地址列表组成的网络接口, 用于标识加入多播组的本地接口; 接口名称 "eth0", "wlan0" 等;
可以进行的操作 : 根据 IP地址 名称 硬件地址 获取网络接口, 判断网络接口类型, 判断网络接口状态, 对网络接口进行一系列的操作;
三. 套接字相关类
1. Socket
类的全名称 :
public class Socket extends Object
-- 作用 : 客户端的套接字;
套接字工作原理 : 套接字的实际工作由 SocketImpl 类实例执行, 可以更改 SocketImplFactory 进行配置, 创建适合本地防火墙的套接字;
可进行的操作 : 绑定本地地址, 链接服务器, 获取输入输出流, 设置选项, 获取套接字的状态;
2. SocketImpl
类的全名称 :
public abstract class SocketImpl extends Object implements SocketOptions
-- 作用 : 该抽象类是实现套接字的所有类的通用超类, 创建客户端 和 服务器套接字都可以使用该超类;
3. ServerSocket
类的全名称 :
public class ServerSocket extends Object -- 作用 : 服务器套接字;
工作流程 : 该服务器套接字 等待 客户端请求传入, 根据客户端的各种请求做某些操作;
原理 : 服务器套接字的实际操作由 SocketImpl 对象执行;
创建适合本地防火墙的套接字 : 在应用程序中, 更改 创建 SocketImpl 的 SocketImplFactory 来配置 套接字;
4. MulticastSocket
类的全名称 :
public class MulticastSocket extends DatagramSocket
-- 作用 : 用于 发送 和 接收 IP 多播包;
特点 : MulticastSocket 是一种 DatagramSocket, 比一般的 DatagramSocket 多出一个功能, 具有加入Internet 上其它多播主机组的功能;
多播组指定 : 多播组通过 D 类 IP地址, 和 标准 UDP 端口号指定;