渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项

 

最近在看hidden router的一篇论文,讲到用IP时间戳选项来解决这个问题。。发现自己对这方面了解太少,于是打开了这本著作,开始挑选相应章节学习一下。

 

一、自然要先从IP报文格式先了解起。

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第1张图片

背景知识:如图所示,报文格式。首部长度这一个字段仅有4个bit,因此整个IP头部的长度最大只能达到15*32bit=60B,其中固定头部长度为20B。选项数据最多占据40字节,是可变长的部分。

这些任选项可以用于以下定义:

1.   安全和处理限制。。。太高端了,暂时不管

2.   记录路径(RR,记录经过的路由器IP地址)

3.   时间戳(记录经过的路由IP和时间)

4.   宽松源站选路(Strict Source Route,为数据报文指定一系列必须经过的IP地址)

5.   严格路由选路(Loose Source Route,类似strict,只能经过要求经过的IP地址)

二、记录路由选项

对于记录路由来说,选项数据的格式如下:

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第2张图片

其中3B的RR选项,4*9B=36B的IP地址清单列表空间,最后剩余1B全为0,被解释为EOL。

各字段意义:

1.   code表示IP选项数据的类型,对于记录路由来说,CODE=7.

2.   Ptr指针字段,ptr指向了存放下一个IP地址的位置。最小值为4,表示第一个IP存放开始的位置,每次存入一个IP后,ptr+=4;直至ptr=40,表示IP清单已满。

3.   Len,一般写36或40。

这样,我们现在就可以感受一下记录选项了。

Ping–R xxx

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第3张图片

可以看到从本机到百度服务器的路由路径,可惜路径太长,记录不完全。

要注意,RR中的IP记录的是数据包到达路由器后被转发出去的口,第一个IP记录的就是自己主机的出口IP,当数据包到达目的地时,DEST回复的ICMP ECHO REPLY包会把之前的路由清单抄进去,然后发送出去,当reply包到达SRC主机时,也会把自己进入主机的IP端口地址加入到清单里面去。

不过我为了找一个比较近的目标进行ping,选择了附近网段的目标x.x.108.200,结果出现了点诡异。x.x.108.200数据同时记录了2次。。。

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第4张图片

继续测试,对自己本机进行测试,发现本机IP竟然出现4次:

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第5张图片

暂时不晓得为啥。。。改天再说吧。

其中书上其实也提到了一个异常的输出情况,如下: SRC-->X1(IP1)-->X2(IP2)-->DEST-->Gateway(IP3)-->X2(IP2’)-->X1(IP1’)-->SRC

可以看到,中间多了个gateway,作者分析是由于dest在回复ICMP ECHO REPLY时,SRC的地址不在本机的路由表里,这种情况下会把数据包发给网关,网关帮忙把包再发送给下一跳。

 

三、时间戳选项

与记录路由选项很相似。格式如下图

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第6张图片

Code=0x44。Len和ptr同RR。

OF和FL各占4bit。

FL表示标志字段,即指定了时间戳选项对应的操作:0只记时间戳,1记录IP和时间戳,3发送包之前对选项列表进行了初始化,总共存放了4对IP和值为0的时间戳,仅当当前路由器与列表中的下一个IP匹配时,才修改时间戳的值。

OF表示溢出,当列表已满但打开了记录时间戳选项时,路由器会将OF的值增加,最大值为15。

时间戳的取值:一般是自UTC午夜开始记的毫秒数,如果路由器不使用这个格式,就需要打开时间戳中的高位以表明这个是非标准值。数据部分最多放9个时间戳。

总的来说,最多只能记录24hop

 

下面是ping –T的选项。

-T [ping only]:          发送IP时间戳选项。

-T tsonly                只有时间戳

-T tsandaddr             时间戳和地址

-T tsprespec host1 [host2 [host3 [host 4]]] 预指定跳数的时间戳


下面来直接地感受一下吧~  ping –T tsandaddr  www.baidu.com结果如下:

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第7张图片

可以看到,在ping发出的多个ICMP包,收到的7个ICMPecho reply包中,显然每个只记录了4对地址和时间戳~。

并显示未记录的跳数为15。

然而令人不解的是每一跳所采用的时间戳的值是如何变化的。


第一跳记录的都是本机的时间戳,absolute的(不是很懂)。

几分钟后对其进行再次探测,结果如下图

渣硕笔记——偶读《TCP/IP详解:卷1 协议》 关于IP路由选项和时间戳选项_第8张图片

对比发现,

本机的时间戳值有明显的增加;

第二跳时间戳基本无变化。。。

第三跳、第四跳时间戳同上

这说明?他们不是标准的时间戳设置方法?

而且根据规定,“需要打开时间戳中的高位以表明这个是非标准值”,但根据本次探测的结果感觉貌似没有做到。。。。104276高位为0? 一会为 -1 一会为0的 何解?求指点



你可能感兴趣的:(网络拓扑)