一、IP数据包的首部格式
一个 IP 数据报由首部和数据两部分组成
- 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的
- 版本——占 4 位,指 IP 协议的版本。目前的 IP 协议版本号为 4 (即 IPv4)
- 首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节),因此 IP 的首部长度的最大值是 60 字节
- 总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
- 标志(flag) ——占 3 位,目前只有前两位有意义。标志字段的最低位是 MF (More Fragment)。MF 1 表示后面“还有分片”。MF 0 表示最后一个分片。标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF 0 时才允许分片。
- 片偏移—— 占13 位,指出:较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
- 生存时间——占8 位,记为 TTL (Time To Live),指示数据报在网络中可通过的路由器数的最大值。
- 协议——占8 位,指出此数据报携带的数据使用何种协议,以便目的主机的 IP 层将数据部分上交给那个处理过程
- 首部检验和——占16 位,只检验数据报的首部,不检验数据部分。这里不采用 CRC 检验码而采用简单的计算方法。
- 源地址和目的地址都各占 4 字节
IP 数据报首部的可变部分,从 1 个字节到 40 个字节不等,取决于所选择的项目。有了可变部分可以增加 IP 数据报的功能,但是往往不常用
IP数据包是可支持多种协议的:IP 数据报可以封装多种协议 PDU。
1.1IP数据报分组转发流程
- IP 数据报的首部中没有地方可以用来指明“下一跳路由器的 IP 地址”。
- 当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件。
- 网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器
在路由表中,对每一条路由,最主要的是(目的网络地址,下一跳地址)
- IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)。
- 只有到达最后一个路由器时,才试图向目的主机进行直接交付。
虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由。
采用特定主机路由可使网络管理人员能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由。
默认路由:
路由器分组转发算法:
(1) 从数据报的首部提取目的主机的 IP 地址 D, 得出目的网络地址为 N。
(2) 若网络 N 与此路由器直接相连,则把数据报直接交付目的主机 D;否则是间接交付,执行(3)。
(3) 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器;否则,执行(4)。
(4) 若路由表中有到达网络 N 的路由,则把数据报传送给路由表指明的下一跳路由器;否则,执行(5)。
(5) 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;否则,执行(6)。
(6) 报告转发分组出错。
二、IP数据报片
过程:
- 一数据报的总长度为 3820 字节,其数据部分的长度为 3800 字节(使用固定首部),需要分片为长度不超过 1420 字节的数据报片。
- 因固定首部长度为 20 字节,因此每个数据报片的数据部分长度不能超过 1400 字节。
- 于是分为 3 个数据报片,其数据部分的长度分别为 1400、1400 和 1000 字节。
- 原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。(片偏移字段)
片偏移是以8个字节为单位来进行偏移的,因此要除以8
三、子网掩码与子网划分
3.1子网划分
子网划分:从两级IP变成三级IP
从 1985 年起在 IP 地址中又增加了一个“子网号字段”,**使两级的 IP 地址变成为三级的 IP 地址。这种做法叫作划分子网 (subnetting) **。划分子网已成为互联网的正式标准协议。
划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络(是对内的,外界并不知道)
从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。
- 当没有划分子网时,IP 地址是两级结构。
- 划分子网后 IP 地址就变成了三级结构。
- 划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。
那么自从使用了子网划分以后,我们的分组转发就会变得简单一些:通过目的子网号能过滤出不少的主机
- 凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
- 然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
- 最后就将 IP 数据报直接交付目的主机。
下面根据两张图来进行对比:
未划分子网:
已划分子网:
但是要清楚的是一点:划分为子网后对外仍是一个网络(外界对我们划分子网是不知道的)
子网划分的优点
- 减少了 IP 地址的浪费
- 使网络的组织更加灵活
- 更便于维护和管理
缺点:
- 减少了能够在网络上连接的主机数
本来B类地址的最多可连接数为65534台,但是在子网划分了以后,我们可以明显看到并没有那么多台了。
3.2子网掩码
子网掩码其实就是子网划分之后才有的,从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
那么要分辨该IP是否进行了子网划分,就可以通过子网掩码来进行分辨了。
规则:
- 子网掩码长度=32位
- 某位=1:IP地址中的对应位为网络号和子网号
- 某位=0:IP地址中的对应位为主机号
(IP 地址) AND (子网掩码) =网络地址