大家都知道,一般ip head 的大小是20。但是事情总有例外。 比如用到了 ip head 中的可变长的一个数据结构,叫做: RR选项RR选项可以做很多事,不是吗? 包括路由地址记录,时间戳记录等等。可是,当我们要求一个 ping 请求时,并且要求记录路由地址,有一个问题我很疑惑。ping 请求是一个icmp 报,紧跟在ip head 后面的。 现在多了一个RR选项在ip head  后面,不是很别拗吗?为了分辨 RR 是不是就用了  ip head 的第一个字节,那个 ver_len 字节?  默认len 是 5 ,表示ip head 有20个字节, 现在就要加上RR选项了,那么有可能是 5-15 之间的数据。请问我说的是否正确?谢谢

解决方案 »

  1.   

    基本上是正确的
    ip头部中一共有两个标识长度的字段,一个是整个数据报的长度(头部+数据),还有一个就仅是头部长度也就是你说的ver_len了。而且,之所以要用ver_len,也就是因为ip选项的存在使得ip头部长度不固定,只有知道了头部长度才能准确定位数据的开始。
    另外,ip头部的第一个字节ver_len其实分为两部分,前4bit标识版本号,后4bit才是头部长度