IP协议

特点

  • 无状态(stateless): 通信双方不同步传输数据的状态信息,IP数据报之间没有上下文关系
  • 无连接(connectionless): 不维护关于后续数据报的状态,每个数据报的处理是相互独立的
  • 不可靠(unreliable): 不保证数据报到达接收端,只承诺尽最大努力(best effort),如果出现错误,发送ICMP消息报给源端,可靠性由上层来保证

IPv4 头部结构

IPv4 header

  • 4位版本号(version)
  • 4位头部长度(header length): 32bit字(4字节)的数目,4位最大表示15,IP头部最长60字节
  • 8位服务类型(Type Of Service TOS): 3bit的优先权字段(已忽略),4bit的TOS字段,1bit的保留字段。4bit的TOS分别表示最小时延、最大吞吐、最高可靠性、最小费用
  • 16位总长度(total length): 整个IP数据报的长度,以字节为单位,IP数据报最大长度为65535,长度超过MTU将被分片传输
  • 16位标识(identification): 唯一标识主机发送的每一个数据报,每发送一个数据报值加一,一个数据报的多个分片有相同的标识值
  • 3位标志: 第一位保留,第二位(Dont Fragment DF)表示禁止分片,第三位(More Fragment MF)表示更多分片,除最后一个分片外,其他分片要置为1
  • 13位分片偏移(fragmentation offset): 分片相对原始IP数据报开始处的偏移。实际偏移值由该值左移3位(乘以8)后得到,分片长度必须是8的整数倍
  • 8位生存时间(Time To Live TTL): 数据报到达目的地之前允许经过的路由器跳数。通常为64,每经过一个路由器,该值减1,为0时丢弃,并向源端发送ICMP差错报文,避免陷入路由循环
  • 8位协议(protocol): 用于区分上层协议。协议定义在/etc/protocols
  • 16位头部校验和(header checksum): 接收端使用CRC算法检验IP数据报头部是否损坏
  • 32位源端IP和目的端IP: 标识数据报的发送端和接收端
  • 选项字段(option): 可变长的可选信息
    • 安全和处理限制
    • 记录路径(record route): 路由器的IP地址
    • 时间戳(timestamp): 路由器的IP地址和时间戳
    • 宽松的源站选路(loose source route): 为数据报指定一系列必须经过的IP地址
    • 严格的源站选路(strict source route): 只能经过这些地址,不能经过其他地址