0
IP 协议是 TCP/IP 协议的核心,所有的 TCP,UDP,IMCP,IGCP 的数据都以 IP 数据格式传输。
1 IP HDR
IPv4和IPv6区别
1.1 IPv4 Detials
-
正常的IPv4的头部为20字节(除非存在选项,一般不会出现),IPv6头部为40字节。
-
IHL(internet header length) 。表示IP HDR的长度。16个DWORD。
-
TOS字段为服务类型字段,包括DS(DiffServe)和ECN(拥塞标志符)用于表示不同的转发优先级,CP侧根据这里判断VO/VIBE/BK的类别。
使用iperf 发qos包, -S
https://stackoverflow.com/questions/2189884/how-to-send-dscp-marked-packets-using-iperf
iperf -c 10.19.4.10 -i 1 -u -b 5000K -r -S 0xB8
-
总长度,表示IP数据报的长度。65535字节。
-
identification(ID),用来标识数据报,占 16 位。IP 协议在存储器中维持一个计数器。每产生一个数据报,计数器就加 1,并将此值赋给标识字段。当数据报的长度超过网络的 MTU,而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。具有相同的标识字段值的分片报文会被重组成原来的数据报。
-
标志(flag):占3位,但目前只有两位有意义。
-- 标志字段中的最低位为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的 最后一个。 -- 标志字段中间的一位记为DF(Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
-
片偏移 :占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片
从何处开始。片偏移以8个字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。
片偏移(offsetfrag)占 13 位。当报文被分片后,该字段标记该分片在原报文中的相对位置。片偏移以 8 个字节为偏移单位。所以,除了最后一个分片,其他分片的偏移值都是 8 字节(64 位)的整数倍。
- 生存时间(TTL)
表示数据报在网络中的寿命,占 8 位。该字段由发出数据报的源主机设置。其目的是防止无法交付的数据报无限制地在网络中传输,从而消耗网络资源。路由器在转发数据报之前,先把 TTL 值减 1。若 TTL 值减少到 0,则丢弃这个数据报,不再转发。因此,TTL 指明数据报在网络中最多可经过多少个路由器。TTL 的最大数值为 255。若把 TTL 的初始值设为 1,则表示这个数据报只能在本局域网中传送。 - 协议
表示该数据报文所携带的数据所使用的协议类型,占 8 位。该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。
https://zh.wikipedia.org/wiki/IP%E5%8D%8F%E8%AE%AE%E5%8F%B7%E5%88%97%E8%A1%A8
例如,TCP 的协议号为 6,UDP 的协议号为 (0X11)17,ICMP 的协议号为 1,IGMP 0X02,IGP 0X09。 - 首部检验和(checksum)
用于校验数据报的首部,占 16 位。数据报每经过一个路由器,首部的字段都可能发生变化(如TTL),所以需要重新校验。而数据部分不发生变化,所以不用重新生成校验值。 - 源地址
表示数据报的源 IP 地址,占 32 位。 - 目的地址
表示数据报的目的 IP 地址,占 32 位。该字段用于校验发送是否正确。 - 可选字段
该字段用于一些可选的报头设置,主要用于测试、调试和安全的目的。这些选项包括严格源路由(数据报必须经过指定的路由)、网际时间戳(经过每个路由器时的时间戳记录)和安全限制。 - 填充
由于可选字段中的长度不是固定的,使用若干个 0 填充该字段,可以保证整个报头的长度是 32 位的整数倍。 - 数据部分
表示传输层的数据,如保存 TCP、UDP、ICMP 或 IGMP 的数据。数据部分的长度不固定。