一、概述

IPTCP/IP 协议族中的核心协议,所有TCP UDP ICMP 以及IGMP 数据都要通过IP 协议来传输。

IP 是一种无连接协议,不负责维护网络连接中的任何连接状态,提供尽力而为 的服务,即不保证数据能成功到达,位于网络层。

二、IPv4数据报

2.1 IP数据报格式

2.2 头部解析

  • 版本字段:占四位,声明当前协议是IPv4 还是IPv6,也会有其他的协议,只有这两个是常用。
  • IHL字段:头部长度(Internet head length),说明当前数据报文头部的数据长度,单位是4字节,包括选项字段的长度。由于头部长度只有4位,所以IPv4报文头部最多为(2^4-1)*4=60个 字节。
  • 服务类型字段,现在大多TCP/IP的实现都不支持TOS:

    • 优先级子字段:3位,用户控制网络优先权,现在已经被忽略。
    • D子字段:更低的延时服务。
    • T子字段:更高的吞吐率服务。
    • R子字段:更高的可靠性服务。
    • C子字段:选择代价更低的路由服务服务类型字段。
  • 总长度:整个IP数据报的长度,包含首部和数据部分。长度共16位,因此总长度最长为2^16=65535个字节,实际中一般不会超过1500字节,大多被限制在576字节。
  • 标识:当前数据包的标识,由于长度的限制,数据包通常会被分为多个不同的数据片分别发送,标识位用于标识当前片所属的数据报。
  • 标志:三位,目前只有最后两位有意义。最低位记为MF,次地位记为DF,其中DF表示是否分片了,MF表示是否为最后一片。
  • 片偏移:本片在数据报中的偏移,以8字节为单位,标志每个数据片的序号。
  • 生存时间TTL:最早表示数据包在网络传输的最大时长,后期被修改为经过的路由跳数,每经过一个路由,跳数减一,一旦TTL为零则丢弃该数据包。
  • 协议:指明上层协议,TCP为6,UDP为17。
  • 校验和:使用二进制反码加法对首部进行求和
  • 源IP和目的IP:表名源目主机地址
  • 选项:用于网络测试、排错等
  • 数据字段:上层协议数据

2.3 数据长度和数据分片

IP数据传输的关键问题是对数据包的分片和重装,分片是为了适应物理网络的最大传输单元MTU,MTU由物理硬件决定。分片后的总长度指的是分片后的首部和数据的长度之和。

假设一个数据包为4820个字节,其中固定首部为20字节,数据部分为4800字节,网络最大传输长度为1420字节,数据分片为:

2.4 首部校验和

最后修改:2024 年 03 月 10 日
如果觉得我的文章对你有用,请随意赞赏