计算机网络 (8) 网络层-IP数据报

415 阅读5分钟

本文引用图片均来自 高军: 计算机网络

首部格式

IP数据报首部格式如下,每个报文都必须包含的固定部分为20字节,用于增强数据报功能的可变部分(可选)最长可达40字节。可变部分可以放置用于排错、测量和安全等的内容,但是这会使得IP数据报首部长度不一增加路由器负担,所以实际上很少使用。可变部分的末尾是全为0的填充部分,填充部分用于确保首部长度是4字节的整数倍

image.png

图中每一行长度为32比特,行中每个小格子称为字段,用于表达IP协议的相关功能

版本: 该字段占4比特,用于标识IP协议的版本,通信双方必须使用同一个版本,目前最广泛使用的IPv4版本号即为4

首部长度: 该字段占4比特,表示报文首都长度,单位为4字节。最小取值为十进制的5,表示报文首部只包含固定部分(4x5=20字节),最大取值为十进制的15,表示报文首部包含固定部分和40字节的可变部分(4x15=60字节)

区分服务: 该字段占8比特,在使用区分服务时才起作用,根据数值不同可以获得不同质量的服务(如优先权、时延和可靠性等)。该字段在旧标准中叫服务类型,但一直未被使用,后改称区分服务

总长度: 该字段占16比特,表示报文的总长度(首部长度+数据载荷长度),单位为字节,最大取值为十进制的65535

标识、标志、片偏移: 三个字段共同用于IP数据报的分片,位于网络层的IP数据报在链路层会被封装成帧,每一个链路层协议都有规定的最大传输单元-MTU,如果报文过大就需要分片封装

标识:16比特,属于同一个报文的分片数据报具有相同的标识

标志:3比特,各比特含义如下

  1. DF位:1表示不允许分片,0表示允许分片
  2. MF位:1表示后续还有分片,0表示此分片为最后一个
  3. 保留位:必须为0

片偏移:13比特,表示分片数据报的数据载荷部分偏移其在原数据报的位置有多远,以8字节为单位

在下例中,报文数据载荷部分长度为3800字节,假设链路层规定MTU为1500字节,此时数据载荷被切分为3个部分各自分装。片偏移是以分片载荷在原始报文载荷中的起始位置除以8计算得出

image.png

假设分片2经过的某段链路规定MTU为1000字节,此时分片2需要再次分片

image.png

生存时间: 该字段占8比特,表示报文是否应该丢弃。该字段最初以秒为单位,最大生存周期为255秒,路由器将其值减去处理它消耗的时间得出新的值,如果新值不为0则转发,否则丢弃

现在该字段以跳数为单位,路由器每转发一次其值减一,新值不为0则转发,否则丢弃

该字段是为了避免报文在网络中永久兜圈

协议: 该字段占8比特,表示IPv4数据报的数据部分是何种协议数据单元

image.png

首部校验和: 该字段占16比特,用来检测首部在传输过程中是否出现差错。报文每经过一个路由器都需要重新计算该字段,因为首部中的生存时间、片偏移等字段可能发生变化

IPv6中路由器不再计算该字段

源IP地址、目的地址: 各占32比特,表示发生报文的主机IP地址和接收报文的主机IP地址

发生和转发

IP数据报的传播主要分为

  1. 主机发送数据报
  2. 路由器转发数据报

假设有如下网络,主机A、B、C通过交换机S1形成局域网,主机D、E、F通过交换机S2形成局域网,两个局域网通过路由器联通

image.png

同一个网络中的主机通信属于直接交付,主机将报文发送给交换机,交换机查表后直接转发给目的主机。不同网络中的主机通信属于间接交付,需要通过路由器转发

主机如何知道目的主机是否在同一个网络中呢?主机将自身IP地址目的IP地址分别与本网络的地址掩码进行与运算即可得到自身所处网络地址和目的IP地址所处的网络地址,如果二者相同则处于同一个网络,否则不处于同一个网络

当目的主机处于不同网络时源主机如何知道该将数据报交给哪个路由器转发呢?其实每个主机都会设置一个默认网关指向某个路由器,当目的主机不在同一个网络时主机直接将数据报交给默认网关就行,路由器会查表将数据报转发

路由器转发数据报的流程分为以下步骤:

  1. 检查IP数据报首部,若出错则丢弃报文并通告源主机
  2. 根据IP数据报目的地址查表找下一跳,若找不到则丢弃报文并通告源主机,找到则转发下一跳

路由器查表是将报文中的目的地址和表中的地址掩码相与得出目的网络,当目的网络和表中的记录相同则将其转发到相应的下一跳

image.png

值得注意的是,路由器不转发广播数据报,这可以避免网络中的广播风暴浪费资源

参考文献