【计算机网络】——IP详解

一、IP服务的特点

IP协议是TCP/IP协议族的动力,他为上层协议提供无状态、无连接、不可靠的服务。

**无状态:**是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立,没有上下文关系的。它无法处理乱序和重复的IP数据报。但是这样也有优点:因为我们无须为保持通信的状态而分配一些内核资源也无须每次传输数据时都携带状态信息,所以是简单、高效的。比如UDP协议和HTTP协议都是无状态的协议。

无连接: IP通信双方都不长久地维持对方的任何信息,所以上层协议每次发送数据的时候都必须明确指定对方的IP地址

不可靠: IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。也就是说发送端的IP模块一旦检测到IP数据报发送失败,就通知上层协议发送失败,而不会试图重传。因此,使用IP服务的上层协议需要自己实现数据确认、超时重传等机制达到可靠传输的目的。

二、IPV4头部结构

IPV4的头部结构如下图所示,其固定长度为20字节。【计算机网络】——IP详解

  1. 4位版本号:指定IP协议的版本。对于IRV4来说,其值就是4.
  2. 4位头部长度:标识该IP头部有多少个32bit字。因为4位最大能表示15,所以IP头部最长是60字节
  3. 8位服务类型:包括3位的优先权字段(现在已经被忽略),4位的TOS字段和1位的保留字段(必须置0)。4位的TOS字段分别表示:最小时延,最大吞吐量,最高可靠性和最小费用。其中最多有一个能置为1。
  4. 16位总长度:整个IP数据报的长度,以字节为单位。因此IP数据报的最大长度是65535(216-1)字节。但是由于MTU(帧的最大传输单元,即帧最多能携带多少上层协议数据)的限制,长度超过MTU的数据都将被分片传输
  5. 16位标识:唯一的标识主机发送的每一个数据报。其初始值由系统随机生成,每发一个数据报,其值就加一。该值在数据报分片的时候被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标示值
  6. 3位标志字段:第一位保留,第二位表示“禁止分片” 第三位表示“更多分片”,除了数据报的最后一个分片外,其他分片都要把它置1.
  7. 13位分片偏移:分片相对于原始IP数据报开始处(仅指数据部分)的偏移。除最后一个分片外,每个IP分片的数据部分的长度必须是8的整数倍。
  8. 8位生存时间:是数据报到达目的地之前允许经过的路由器跳数,TTL值被发送端设置(常见的值是64)。数据报在转发的过程中每经过一个路由,该值就被路由器减一。当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文
  9. 8位协议:用来区分上层协议。其中ICMP是1,TCP是6,UDP是17
  10. 16位头部校验和:由发送端填充,接收端对其使用CRC算法以检验IP数据报头部在传输过程中是否损坏。
  11. 32位远端IP地址和目的端IP地址用来表示数据报的发送端和接收端。

三、IP分片

IP头部中的数据报标识、标志和片偏移给IP分片和重组提供了足够的信息。一个IP数据报的每个分片都具有自己的IP头部,他们具有相同的标识值,但具有不同的片偏移。并且除了最后一个分片外,其他分片都将设置MF标志。
具体的分片过程我们用如下的例子来加以描述:长度为1501字节的IP数据报被拆分成两个IP分片,第一个IP分片长度为1500字节,第二个IP分片的长度是21字节。每个IP分片都包含自己的IP头部(20字节),原始IP数据报中的ICMP头部内容被完整地赋值到了第一个IP分片中。第二个分片中不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候只需要一份ICMP头部信息,重复传送这个信息没有任何益处。【计算机网络】——IP详解