【Java EE】IP协议
IP协议详解
- IP协议基础
- IP数据报格式
- IP数据报分片机制
- 地址管理
- IP地址的表示与分类
- 子网划分与子网掩码
- 特殊IP地址
- 私有IP地址与NAT
- IPV6
- 路由选择
- 路由表与转发
- 域名系统
- DNS层次结构与解析过程
- DNS记录类型
IP协议基础
IP协议工作在OSI模型的网络层(或TCP/IP模型的网际层),其主要特点是无连接、不可靠和尽力而为的数据传输服务。
- 无连接:通信前无需建立连接,每个数据包(IP数据报)独立路由。
- 不可靠:不保证数据包一定能送达目的地,也不保证按序到达,不提供确认和重传机制。可靠性由上层协议(如TCP)保障。
- 尽力而为:尽最大努力交付数据包。
下面是 TCP/IP 协议栈的层次结构示意图,IP 协议位于网际层:
IP数据报格式
一个IP数据报由首部和数据两部分组成。首部包含了路由和交付所需的所有控制信息。
关键字段说明:
| 字段 | 位数 | 说明 |
|---|---|---|
| 版本 | 4位 | 标识IP协议版本(对于IPv4数据包,该字段的值固定为 4;对于IPv6数据包,其版本字段的值则为 6) |
| 首部长度 | 4位 | 以4字节为单位,指示首部长度(可能包含可变长的选项字段(如时间戳、源路由等),因此首部长度是可变的) |
| 服务类型 | 8位 | 用于指示数据报的优先级、延迟、吞吐量等要求 |
| 总长度 | 16位 | 定义整个IP数据报(首部+数据)的长度,最大65535字节 |
| 标识、标志、片偏移 | — | 用于IP数据报分片与重组 |
| 生存时间 | 8位 | 数据报在网络中可经过的最大路由器跳数,每经过一个路由器减1,为0时被丢弃,防止数据报无限循环 |
| 协议 | 8位 | 指示上层协议(如下面的常见上层协议的标识号补充列表所示) |
| 首部检验和 | 16位 | 用于校验首部在传输过程中是否出错 |
| 源IP地址和目的IP地址 | 各32位 | 数据报的发送方和接收方的逻辑地址 |
常见上层协议的标识号补充列表:
| 协议号 | 协议名称 | 说明 |
|---|---|---|
| 1 | ICMP | 互联网控制消息协议 |
| 2 | IGMP | 互联网组管理协议 |
| 6 | TCP | 传输控制协议 |
| 17 | UDP | 用户数据报协议 |
| 47 | GRE | 通用路由封装协议 |
| 50 | ESP | 封装安全载荷协议 |
| 51 | AH | 认证头协议 |
| 88 | EIGRP | 增强型内部网关路由协议 |
| 89 | OSPF | 开放最短路径优先协议 |
| 115 | L2TP | 第二层隧道协议 |
这些标识号在IP报文头部的「协议」字段中使用,用于指示IP数据包承载的上层协议类型。
IP数据报分片机制
由于不同物理网络的最大传输单元(MTU)各不相同(如以太网MTU为1500字节,而某些广域网链路MTU可能更小),当IP数据报的总长度超过下一跳链路的MTU时,IP协议会自动将数据报拆分成多个较小的数据报,这个过程称为分片。分片后的每个数据报都拥有与原数据报相同的标识字段,以便接收端识别它们属于同一个原始数据报。
分片相关的三个关键字段:
- 标识:源主机为每个原始数据报分配的唯一编号,所有分片共享该标识,用于重组时归并。
- 标志:3位标志位,其中:
- DF(Don’t Fragment):置1表示不允许分片,若数据报超过MTU则直接丢弃并返回ICMP错误。
- MF(More Fragments):置1表示后面还有更多分片,置0表示这是最后一个分片。
- 片偏移:以8字节为单位,指示当前分片在原始数据报中的偏移位置,用于重组时按顺序拼接。
分片只在路由器上进行,重组则在目的主机完成。IP协议本身不提供重传机制,如果某个分片丢失,整个数据报都会被丢弃,可靠性由上层协议(如TCP)保障。
地址管理
IP地址是IP协议中用于唯一标识网络中设备的逻辑地址。
IP地址的表示与分类
IPv4地址是一个32位的二进制数,通常用点分十进制表示(如192.168.1.1)。
图:传统的IP地址分类(A、B、C、D、E类)
| 类别 | 前缀二进制位 | 网络号位数 | 主机号位数 | 用途 |
|---|---|---|---|---|
| A类 | 0 | 8位 | 24位 | 用于大型网络 |
| B类 | 10 | 16位 | 16位 | 用于中型网络 |
| C类 | 110 | 24位 | 8位 | 用于小型网络 |
| D类 | 1110 | - | - | 用于多播 |
| E类 | 1111 | - | - | 保留 |
子网划分与子网掩码
分类地址浪费严重,子网划分允许将一个大的网络号(A、B、C类)划分成多个更小的子网。
子网掩码是一个32位的数字,它由一串连续的1后跟一串连续的0组成。1对应网络号和子网号部分,0对应主机号部分。通过与IP地址进行“按位与”操作,可以提取出网络地址。
图:子网掩码用于区分IP地址中的网络部分和主机部分
例如,一个C类地址192.168.1.0/24,使用子网掩码255.255.255.224(或/27)可以将其划分为多个子网。
图:将一个C类网络划分为多个子网的计算过程
特殊IP地址
| 类型 | 示例或格式 | 用途 |
|---|---|---|
| 网络地址 | 192.168.1.0(主机位全0) | 标识网络本身,不分配给具体主机。 |
| 直接广播地址 | 192.168.1.255(主机位全1) | 向该网络内所有主机发送数据包。 |
| 受限广播地址 | 255.255.255.255 | 仅在本地网络内广播,路由器不转发。 |
| 本机环回地址 | 127.0.0.1 | 测试本机网络协议栈,数据不离开主机。 |
| 链路本地地址 | 169.254.0.0/16 | DHCP失败时自动分配,用于本地通信(如Windows的APIPA地址)。 |
补充说明
- 网络地址和直接广播地址的主机位规则适用于所有IPv4地址(如A/B/C类网络)。
- 链路本地地址范围是169.254.0.1至169.254.255.254(RFC 3927)。
私有IP地址与NAT
为了缓解IPv4地址枯竭问题,RFC 1918规定了三类私有IP地址范围,这些地址不能在公网上路由,主要用于内部网络。
网络地址转换是使私有网络能够访问公网的关键技术。NAT路由器将内部私有IP地址和端口号,映射为公网IP地址和端口号。
NAT地址转换可视化网站
图:NAT(网络地址转换)工作流程示意图
IPV6
为了解决地址枯竭问题~
IPv6
路由选择
IP协议的核心功能之一是通过路由选择将数据包从源主机传递到目的主机。
路由表与转发
每个路由器或主机都维护一张路由表,表项通常包含:目的网络地址、子网掩码、下一跳地址、出接口等。
图:一个典型的路由表结构,包含网络地址、掩码、网关和接口
补充:转发过程+路由协议
域名系统
域名系统将人类可读的域名(如www.example.com)转换为机器可读的IP地址。
DNS层次结构与解析过程
DNS是一个分布式的、层次化的数据库系统。
递归/迭代查询过程:
- 主机向本地DNS服务器发起递归查询。
- 本地DNS服务器代表主机向根域名服务器、顶级域名服务器、权威域名服务器进行迭代查询,最终获得IP地址。
- 本地DNS服务器将结果返回给主机,并可能缓存起来。
DNS记录类型
| 记录类型 | 说明 | 例子 |
|---|---|---|
| A记录 | 将域名映射到 IPv4 地址 | example.com→93.184.216.34 |
| AAAA记录 | 将域名映射到 IPv6 地址 | example.com→2606:2800:220:1:248:1893:25c8:1946 |
| CNAME记录 | 域名别名,将一个域名指向另一个域名 | www.example.com→example.com |
| MX记录 | 邮件交换记录,指定负责接收邮件的服务器,并带有优先级 | example.com→mail.example.com(优先级 10) |
| NS记录 | 指定该域名的权威域名服务器 | example.com→ns1.example.com |
| TXT记录 | 存放任意文本信息,常用于 SPF、DKIM、DMARC 及域名验证 | example.com→"v=spf1 include:_spf.google.com ~all" |
| SOA记录 | 授权起始记录,包含管理信息(主DNS、管理员邮箱、序列号等) | example.com→ns1.example.com admin@example.com 2024052401 3600 … |
| PTR记录 | 指针记录,用于反向解析:IP 地址 → 域名 | 34.216.184.93.in-addr.arpa→example.com |
| SRV记录 | 服务定位记录,指定特定服务的主机名和端口 | _sip._tcp.example.com→sip.example.com:5060 |
| CAA记录 | 证书颁发机构授权,限制谁能签发证书 | example.com→0 issue "letsencrypt.org" |
