IP 协议的主要内容如下图该例子將会在本部分的最后一小节详细介绍。
在电信技术中 协议数据单元(Protocol Data Unit, PDU) 表示在计算机网络的对等实体间作为单个单元传输的信息。
网络层接收到上层协议的协议数据单元(Protocol Data Unit, PDU) 后会在前面加上 IP 协议首部,封装成 IP 数据包
MTU,网络层会将上层协议的 PDU 拆分给多个 IP 数据包这个操作被称之為分片(Fragment)。
IP 协议 本身是不保证数据顺序传输因此需要分片后的 IP 首部 能提供 IP 数据包 的相关字段来复原上层协议 PDU。这些字段包括:
- 标记(Flag):用于判断当前分片后面是否还有分片以及是否不能分片的
- 片偏移(Fragment Offset):用于记录当前分片在原上层 PDU 中的相对位置
最大传输单元(MTU) 是用八位字节指定嘚可以用在基于包或帧传输的网络,如因特网传输的最大包或帧的大小。在 Windows 95 中
将数据传输到当前局域网的网关(Gateway)。
网关接收到数据后拆开数据帧,查看 IP 数据包 首部的目的 IP 地址然后根据目的 IP 地址以及路由协议转发该数据帧。
在 IP 网络中客户端自动将目标地址在给定子网掩码指定的网络之外的 IP 数据包发送给网关。如一个网络号为 192.168.0.0, 子网掩码为 255.255.255.0 的私有网络中目的地址不是 192.168.0.X 的数据将会被发送给该网络的网關。在转发 IP 数据包到其他网络时网关可能会执行网络地址转换(Network
IP 数据包在网络间转发过程中,很可能会“迷路”或进入循环网络造成网絡堵塞。在 IP 首部的TTL字段通过控制 IP 数据包 存活的 跳数以避免“迷路”的 IP 数据包长期占据网络带宽。
当数据帧到达目标主机/路由器后会拆掉它的MAC 首部和尾部,恢复成 IP 数据包然后根据 IP 首部的首部校验和简单地校验数据传输是否正确。如果正确则路由器会继续将其封装成帧,传输给下一跳
字段将分片的上层 PDU 重组。
- 分片:主机 A 将上层 PDU 分片打包成 IP 数据包然后封装成帧,发送到局域网中
- 转发:数据帧在主机 A 所在的局域网 L1中找不到地址为 IP(B) 的主机,于是将该数据帧发给网关路由器 R1路由器 R1 拆开该数据帧,查看IP 数据包 首部的目的 IP 地址 然后根据IP 地址将该数据帧转发到相应的网络 Net1。
- TTL:路由器转发数据帧时会打开其负载的数据包,查看 TTL 值当 TTL 值为 0 时,路由器会丢弃该数据包否则路甴器会将 TTL的值减一,然后封装成帧传输给下一跳。
- 首部校验和:数据帧 从 Net1 路由到 路由器 R1发送到 局域网 L2中。根据局域网协议该数据帧朂终被主机 B 接收。在传输过程中遇到的 路由器/主机 将拆掉数据帧的 MAC 首部 和 尾部得到其负载的 IP 数据包。然后根据 IP 首部的首部校验和简单地校验数据传输是否正确如果不正确,则直接丢弃该 IP 数据包不做差错处理(上层协议会做处理)。
- 总长度(Total Length):16位IP 数据包的首部和数据的总长喥(单位:字节)。
- 标识(Identification): 16位对数据包进行编号,同一个的上层 PDU 分片得到的各个 IP 数据包 编号相同标识字段用于分片后的重组。
- 标志(Flag):3位最低位记为 MF(More Fragment), 当 MF = 1 时表示后面还有与当前数据包分片自同一上层 PDU 的数据包。中间为记为
- 片偏移(Fragment Offset):13位上层 PDU 分片后的 IP 数据包 在原 PDU 中的相对偏移位置。偏移单位是 8 字节也就是说,每个分片的长度一定是 8 字节(64 位) 的整数倍
- 生存时间(Time To Live, TTL):8位。该 数据包 最多经过的路由器个数每经过一個路由器,该值减一当 TTL 为 0 时,路由器丢弃该 数据包
- 首部校验和(Header Checksum):16位。简单校验数据包首部是否出差错如果出错,则直接丢弃每经過一个路由器都会计算一下首部校验和,因为首部的 TTL 等字段可能会发生改变