IP协议原理上
网络地址转换NAT
IP数据报
版本
占据 4bit空间。这个字段规定了数据报的 IP 协议版本,对于 IPv4,该值为 4;对于 IPv6,该值为 6。通过查看版本号,路由器能够确定如何解释 IP 数据报的其他部分,不同的 IP 版本使用不同的数据报格式。
首部长度
占据 4bit空间,用于记录 IP 首部的数据的长度,4bit的部首长度单位是字,最大记录 60个字节的数据(15*4=60)
服务类型(TOS)
占据 8bit空间,服务类型(TOS)包含在 IPv4首部中,以便使不同类型的 IP 数据报(例如,一些特别要求低时延、高吞吐量或可靠性的数据报)能相互区别开来。提供特定等级的服务是一个由路由器管理员决定的策略问题,简单来说就路由器根据是这个字段的值来为数据报提供(选择)最合理的路径
数据报长度
占据 16bit空间。这是 IP 数据报的总长度(首部加上数据区域),以字节为单位。因为该字段长为 16bit,所以整个 IP 数据报的理论最大长度为 65535字节,然而,数据报很少有超过 1500字节的,这是因为底层链路硬件不允许那么大的数据报出现在链路上,以太网数据帧的最大长度为 1500 个字节,当有一个很大的 IP 数据报出现的时候,就需要进行分片处理;而如果 IP 数据报的数据很少的时候,比如少于 46个字节,那么在以太网进行发送数据的时候会填充一定的字节以满足以太网帧最小长度,那么在接收方就要根据这个字段的内容进行提取有效数据
标识
用于表示 IP 层发送出去的每一份 IP 数据报,在发送每一份报文,该值加 1,在分片的时候,该字段会被复制到每个分片数据报中,在目标接收主机中,使用该字段判断这些数据是否属于同一个 IP 数据报
标志
第一位保留未用;第二位是不分片标志位,如果该位为 1,则表示 IP 数据报在发送的过程中不允许进行分片,如果这个 IP 数据报的大小超过链路层能承载的大小,这个 IP 数据报将被丢弃,如果该位为 0则表示 IP 层在必要的时候可以对其进行分片处理;第三位为更多分片位,如果为 1则表示该分片数据报不是整个 IP 数据报的最后一个分片,如果为 0 则表示是整个 IP 数据报的最后一个分片
分片偏移量
占据 13bit空间,表示当前分片所携带的数据在整个 IP 数据报中的相对偏移位置(以 8 字节为单位),目标主机必须受到以 0 偏移量开始到最高偏移量的所有分片,才能将分片进行重装为一个完整的 IP 数据报,并且重装 IP 数据报的依据就是分片的偏移量
生存时间(Time-To-Live,TTL)
该字段用来确保数据报不会永远在网络中循环(例如由于长时间的路由选择环路)。每当 IP 数据报由一台路由器处理时,该字段的值减 1,若 TTL字段减为 0,则该数据报必须丢弃,同时会返回一个 ICMP 差错报文给源主机,这样子数据就不会永远在网络中漂流而占据资源
上层协议
该字段仅在一个 IP 数据报到达其最终目的地才会有用。该字段的值指示了 IP 数据报的数据部分应交给哪个特定的传输层协议。例如,值为 6表明数据部分要交给 TCP,而值为 17表明数据要交给 UDP。在 IP 数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。
首部检验和
占据 16bit空间。首部检验和用于帮助路由器检测收到的 IP 数据报首部是否发生错误,而对应 IP 数据报中的数据区域校验那是上层协议处理的事情。首部检验和是这样计算的:将首部中的每 2个字节当作一个数,用反码运算对这些数求和,该和的反码(被称为因特网检验和)存放在检验和字段中。路由器要对每个收到的 IP 数据报计算其首部检验和,如果数据报首部中携带的检验和与计算得到的检验和不一致,则表示出现错误,路由器一般会丢弃检测出错误的 IP 数据报。注意了:IP 数据报在到达每个路由器上都必须重新计算检验和并再次存放到原处,因为 TTL字段以及可能的选项字段会改变。
源 IP 地址与目标 IP 地址
选项字段
占据 0~40 个字节。它允许 IP 首部被扩展,首部选项在日常生活中还是比较少使用的,因此在每个 IP 数据报首部中必须存在的字段是不包括选项字段的,这样能够节约开销,如果与选项字段就添加,而如果没有就无需理会。
数据区域
这是 IP 数据报的最后的一个字段,也是最重要的内容,因为有数据区域才会有数据报首部的存在,在大多数情况下,IP 数据报中的数据字段包含要交付给目标 IP 地址的运输层(TCP 协议或 UDP 协议),当然,数据区域也可承载其他类型的报文,如 ICMP 报文
IP协议抓包分析
ping xxx.xxx.xxx.xxx -l 4096
抓个包会发现分片,两个IPV4,一个ICMP