IP 协议
- IP 协议是Internet 体系结构的核心协议,已成为连接异构网络的工业标准。
- IP 提供无连接的数据报服务,每个IP 分组长度≤64K 字节,不能保证分组可靠的、按序到达,这些留给高层协议解决。
- IP 协议需要路由协议ICMP ,ARP ,RARP 等协议支持
IP 分组结构
版本:4 位
- 表示 IP 协议版本,通常为 0100 ( v4 ),若为 0110 则表示为 v6 版
首部长度:4 位
- 表示 IP 包首部长度,最短 20 字节,最长 60 字节
区分服务:8位
- 以前称为服务类型,从未使用过。 1998 年改称区分服务。
- 用于指明要求网络提供的服务,目前主要包括D 、T 、R 等三种,分别代表延迟、吞吐量和可靠性要求。即使如此,依然没有真正使用。
总长度: 16 位
- 包括了首部长度和数据长度,最长为 65535 个字节。
标识:16 位
- 数据报计数器,用于区分数据报的唯一标识符。
- 在数据报传向目的地址时,如果将数据报被分为多个片段,那么每个片段都有相同的标识符。
标志: 3 位
- 最高位保留;
- 中间位是不分片( Don‘t Fragment , DF )标志,DF=1 则不允许分片。
- 最低位是有更多分片( More Fragment , MF )标志,除最后一个分片 MF=0 以外其余都是 MF=1
片偏移:12 位
- 表示分片后,该片在原分组中的相对位置。
- 片偏移以 8个字节为偏移单位。
生存时间: 8 位
- 一般记为 TTL (Time To Live) 。
- 表示数据报在网络中可通过的路由器数的最大值。若超出最大值,则丢弃数据包,并返回 “ 目标不可达 ” 。
协议: 8 位
- 指出此数据报使用何种协议,以便目的主机的 IP 层将数据部分上交给哪个处理过程。
- 如 TCP 、 UDP 、 ICMP 、 IGMP 、 OSPF 等。
首部校验和:16位
- 只检验数据报首部,不检验数据部分
- IP 报头校验和的计算:
- ① 校验和字段置0 ;
- ② 对 IP 头部按照每 16bit 分割成不同单元;
- ③ 将所有单元相加,并将结果分为进位单元和本体单元;
- ④ 如果进位单元非零,则将进位单元与本体单元相加,并将结果再次分为进位单元与本体单元。如此循环,直至进位单元为零;
- ⑤ 将本体单元的值取反,并存入校验和字段。IP 报头校验和的检验:当接收 IP 包时,需要对报头进行确认,检查 IP 头是否有误,算法同上。若最终本体单元的结果取反后为零,则认为收到的 IP 头正确,否则有错。
可选字段:
- 在整个包头长度不超过 60 个字节的情况下,可选字段的长度可变,主要用来进行一些测试工作。
- 主要包括:
- 安全:告诉路由器如何对信息保密,例如不能经过某些不友好国家的路由器。
- 严格的源路径:以IP 地址序列形式给出完整的源/ 目的路径,分组必须严格地按照此路径传输。
- 宽松的源路径:要求分组按次序通过给定的路由器,但也允许通过其他的路由器。
- 路由记录:告诉沿途经过的路由器将他们的IP 地址加入到该选项中,接收端能够知道该分组经过哪些路由到达。
- 时间标记:类似“ 路由记录” ,但除记录IP 地址外,还要记录时间标记。
填充:长度不定
- 根据可选字段的长度,填充若干个0,使得包头长度为32 的整倍数。
IP 分片
最大传输单元(MTU)
- 网络链路存在MTU (最大传输单元)—链路层数据帧可封装数据的上限
- 不同网络其链路的MTU不同(以太网规定一个数据帧最大长度 1512 字节,其中链路层增加的帧首部 12 字节,所以 IP 分组的长度不可以超过 1500 字节)
- 分片过程发生在源主机和路由器的网络层,重组发生在目的主机的网络层(IP 首部的校验和只校验首部的完整性,不校验数据,所以如果出现分片丢失,那么校验工作得通过传输层协议)
IP 分片与重组
- 大IP分组向较小MTU链路转发时,可以被“分片” (fragmented)
- 1个IP分组分为多片IP分组
- IP分片到达目的主机后进行“重组”(reassembled)
- IP首部的相关字段用于标识分片以及确定分片的相对顺序
- 总长度、标识、标志位和片偏移
IP 分组格式
- 标志位字段(占3位)
- DF (Don’t Fragment):DF =1(禁止分片)、DF =0(允许分片)
- MF (More Fragment):MF =1(非最后一片);MF =0(最后一片 或 未分片)
- 片偏移字段(13位)
- 一个IP分组分片封装原IP分组数据的相对偏移量
- 片偏移字段以8字节为单位
IP 分片过程
- 假设原IP分组总长度为L,待转发链路的MTU为M
- 若L>M,且DF=0,则可以/需要分片
- 分片时每个分片的标识复制原IP分组的标识
- 通常分片时,除最后一个分片,其他分片均分为MTU允许的最大分片
- 一个最大分片可封装的数据应该是8的倍数,因此,一个最大分片可封装的数据为:
- 需要的总片数为:
- 每片的片偏移字段取值为:
- 每片的总长度字段为:
- 每片的MF标志位为:
IP 分片示例
IP 地址
IP 地址及管理
- TCP/IP 网络模型将整个 Internet 视为一个单一的、抽象的网络, IP地址就是给每个连接在这个网络上的主机、路由器或其他设备分配的一个在全世界范围唯一的 32 位标识符。
- 分类 IP 地址:基本的编址方法,由 1981 年的标准协议所确定。
- 子网划分 IP 地址:基于分类 IP 地址编址方法的改进,其标准 [RFC950] 在 1985 年成为国际标准。
- 超网 IP 地址:目前应用最广泛的方法,对于缓解 IPv4 地址耗尽和路由表过于臃肿庞大有一定的作用。 1993 年提出后很快就得到推广应用
IPv4 地址的点分十进制记法:
- 机器中存放的 IP 地址是 32 位 二进制代码
- 每 8 位插入一个空格能够提高可读性
- 将每 8 位的二进制数转换为十进制数
- 用点将上述4 个数字分割,称为点分十进制记法
分类 IP 地址
- IP 地址被分为五类,分别称为 A 类、B 类、C 类、D 类和 E 类
- A 、B 和 C 类地址分别有两个固定长度的字段组成:其中一个字段是网络号( net-id ),表示联网主机(或网络设备)所在的网络,另一个字段是主机号( host-id ),表示联网主机(或网络设备)本身。
- 两级的 IP 地址可以记为:IP 地址 ::= {<网络号>,<主机号>}
- D 类和E 类地址不区分网络和主机
- 对比
- 保留地址
- 也称为私有地址,各独立网络可以重复使用的 IP 地址,即网络边界路由器(通常就是网关)不会向目标地址为这些保留地址的主机转发 IP 分组。也就是说,保留地址不会穿越内部网络。
- A 类: 10.0.0.0 (1个网络)
- B 类: 172.16.0.0—172.31.0.0 ( 16 个网络)
- C 类: 192.168.0.0—192.168.255.0 ( 256 个网络)
划分子网 IP 地址
- 划分子网法是在 1985 年提出一种 IP 地址表示方式
- 将一个 IP 类网划分成几个较小的子网( subnet )
- 多个物理网共享同一个 IP 类网前缀
- IP 地址成为三级结构:
- IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}
- 对外,网络号仍然表示整个网络;对内,则由子网号表示多个不同的子网。
- IP 地址具体所属的子网以及子网规模,则由子网掩码( subnet mask )加以表示。
- 子网的规模与借用主机字段的位数有关。借用位数越多,子网规模越小
- 子网划分后,如何识别不同的子网?
- 解决:采用子网掩码来分离网络号和主机号。
- 子网掩码格式:32 比特,网络号( 包括子网号) 部分全为“1” ,主机号部分全为“0”
超网 IP 地址
- 超网也称为无分类域间路由( Classless Inter-Domain Routing ,CIDR )编址方法,是在变长子网掩码 ( Variable Length SubnetMask , VLSM )基础上发展出来的一种 IP 地址编址方法
- CIDR 中,不再有传统的 A 类、B 类和 C 类等地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。CIDR 使用各种长度的 “ 网络前缀 ” (network-prefix) 来代替分类地址中的网络号和子网号。
- IP 地址从三级编址(使用子网掩码)又回到了两级编址:IP 地址 ::= {< 网络前缀 >, < 主机号 >}
- CIDR 说明
- CIDR 常使用 “ 斜线记法 ” (Slash notation) ,即在 IP 地址后面加上一个斜线 “ /” 和一个代表网络前缀所占位数的数字,如 /20 。
- 将网络前缀都相同的连续的 IP 地址称为 “ CIDR 地址块 ”
- 一个 CIDR 地址块可以表示很多地址,因此这种地址的聚合被称为路由聚合 (route aggregation) 。利用路由聚合可以在路由表中用一个项目代表很多个传统分类地址的路由项目,从而大大缓解了路由表的臃肿现象。
- CIDR 虽然不使用子网,但仍然使用 “ 掩码 ” 这一名词(但不叫子网掩码)。
- 因为路由聚合相当于把原来的多个子网聚合成为一个网络,所以也称为超网 (Supernetting) 。
- CIDR 地址块中的 IP 地址数量一定是2 的整数次幂。
- CIDR 记法的其他形式:
- 10.0.0.0/10 可简写为 10/10 ,也就是把点分十进制中低位连续的 0 省略。
- 10.0.0.0/10 隐含地指出 IP 地址 10.0.0.0 的掩码是 255.192.0.0。此掩码可表示为
特殊的 IP 地址
- host-id 全为 “ 1” 的地址:本子网内的广播地址
- host-id 为零的 IP 地址表示该网络本身, , 如 210.45.240.0 表示的不是某个主机,而是分配我校的一个C 类地址
- 回送地址: 127.0.0.0-127.255.255.254 为回送地址,通常用于测试,相当于 “ 我自己 ” 。以上述地址为目标地址的 IP 分组均会被直接回送给发出这个分组的主机。
- 0.0.0.0 :代表的是本主机地址,任何一台主机都可以其表示自己, , 仅在系统启动时会使用,启动完成后不再使用。如系统启动,需要 DHCP 时
- 255.255.255.255 :受限广播地址,广播范围为主机所在的网络。所有网关都不会向外广播。
举例
子网划分
- 例如:C 类网络192.10.1.0 ,主机号部分的前三位用于标识子网号,即:
子网号为全“0” 全“1” 不能使用,于是划分出
子网掩码计算
- 前面的例子中:网络号24 位,子网号3 位,总共27 位。所以子网掩码为:
缺省子网掩码为
子网地址计算
- 子网掩码 ∧ IP 地址,结果就是该 IP 地址的网络号
- 例如:IP 地址202.117.1.207 ,子网掩码255.255.255.224
- 子网地址为: 202.117.1.192
- 主机号为: 15
- 主机之间要能够通信,它们必须在同一子网内,否则需要使用路由器(或网关)实现互联。
子网规划
- 网络分配了一个 C 类地址: 201.222.5.0 。假设需要 20 个子网,每个子网有 5 台主机。试确定各子网地址和子网掩码。
- 1 )对 C 类地址,要从最后8 位中分出几位作为子网地址:
∵ < 20 <
∴ 选择 5 位作为子网地址,共可提供30 个子网地址。 - 2 )检查剩余的位数能否满足每个子网中主机台数的要求:
∵ 子网地址为 5 位,故还剩 3 位可以用作主机地址。
而 - 3 )子网掩码为 255.255.255.248 。( 11111000B = 248 )
- 4 )子网地址可在 8 、 16 、 24 、 32 、 …… 、 240 共 30 个地址中任意选择 20 个。
超网IP地址计算
- 若已知一个 CIDR 地址块为: 192.168.16.0/21 ,给出其地址范围 ?
192.168.16.0 的二进制表示为:11000000 10101000 00010000 00000000
/21 表示其前 21 位是 net-id ,即:
地址范围为: 192.168.16.0~192.168.23.255
IP寻址
- 每个路由器中都保存一张路由表(无论是静态还是动态)。
- 路由表的主要项目有两个:网络号、下一跳地址(最佳输出链路)。
对于划分子网的 IP 地址
- 当一个 IP 分组到达时,路由器通过子网掩码获取其网络号。如果是本网,则启动寻找主机过程;如果是其他网络,则根据路由表中对应网络号的最佳输出链路将分组转发到下一跳路由器。
- 如果路由表中找不到目的网络,则将分组转发到一个缺省路由器中,缺省路由器具有更广泛的路由信息。
对于CIDR 时
- 对于CIDR 在查找路由表时可能会得到不止一个匹配的目标网络前缀。
- 应当从匹配结果中选择具有最长网络前缀的路由:最长前缀匹配 (longest-prefix matching) 。
- 网络前缀越长,其地址块就越小,因而路由就越具体(more specific) 。
- 最长前缀匹配又称为最长匹配或最佳匹配
- 注意:匹配指的是网络号要完全相同,然后选择网络号长的那个
CIDR 地址块划分举例
- 说明
- 这个 ISP 共有 64 个 C 类网络。如果不采用 CIDR 技术,则在与该ISP的路由器交换路由信息的每一个路由器的路由表中,就需要有 64 个项目。但采用地址聚合后,只需用路由聚合后的 1 个项目 206.0.64.0/18 就能找到该 ISP。
- 因为五类地址 IP 或者 划分子网 IP 的表示方法一次都只能表示一个网络