- ICMP协议
网络层设备在转发分组过程中,可能会有一些错误,有时候需要将这些信息反馈给其他设备,发送这些信息遵循ICMP协议(互联网控制协议),ICMP协议在一定程度上可以看作是IP协议的伴随协议。
2.IP数据报的格式
- 版本号:4 bit,如4表示ipv4,6表示ipv6
- 首部长度:4 bit,单位是4B(一行),也就是首部最多15行,60B
- 服务类型:指示期望获得哪种类型的服务,比如期望该IP数据报优先转发、延后转发等。1998年,这个字段改名叫“区分服务”,只有当网络提供区分服务时才有用,目前ipv4下的大多数网络并不提供此服务。
- 总长度:整个IP数据报的长度,最大值是65535,单位是B。除去典型的头部长度20B,因此一个IP数据报的数据部分最大是65515B
- 标识、标志位、片偏移是用来分片的,后面介绍
- 生存时间:IP分组在网络中可以通过的路由器数(跳步数)。一个IP分组在创建的时候就设置了一个TTL。路由器在转发IP分组时,需要修改该值,将它-1。当路由器将该值-1后等于0,路由器就把这个分组扔掉。同时向源主机发送一个
ICMP
报文。 - 协议:IP分组封装的是哪个协议的数据,如TCP/UDP/SMP
- 首部校验和:只对首部进行校验,和UDP的校验和是同一种方法生成的。检验时这个校验和参与运算,重新生成校验和,如果得到的值全是1,表示未发生错误。因为TTL每次转发都会被修改,所以校验和每次转发也应该修改。
3.IP数据包分片
链路层封装的数据帧大小是有上限的,允许的最大传输单元称MTU。不同链路的MTU不同。当IP数据包大小超限时,就需要一分为多,这就是分片。
从链路1到链路2,假如MTU降低的话,很可能就要分片,分片后中间结点就不再组装,以免后面又要再次分。最终由目的主机完成组装。
- 标识:16 bit,标识一个分组。分片继承原分组的标识号
- 标志位:3 bit
- 片偏移:13 bit,一个ip分组分片,来描述相对原分组的偏移量。也就是当前分片的第一个首字节是在原分组中的位置,但是因为只有13 bit,因此单位是8字节。
分片过程: