IP数据报中,有一个字段为ttl(time to live),即生存时间,表示的是数据报在网络中可通过的路由器的最大值。该字段占8bit,最大值为255。

路由器处理数据包时,会将ttl减一,然后再判断是否转发。

而我考虑的是路由器如何处理ttl为1或0 的包。

一种说法是先减一然后再判断,而另一种说法是先判断,然后再减一,而这两种是有区别的。

《TCP/IP详解卷I》中讲traceroute时,说路由器会丢弃ttl为0或1的数据包,然后向源地址发送icmp报文。

网上的说法是,先减一,然后再判断。ttl = 1是,ttl--;然后判断后丢弃,发送icmp报文。这样就可能有个问题,如果收到的包的ttl为0,减一后,ttl为255了,这样就有问题。而路由器是不会转发ttl为0 的数据包的,所以这个情况是由主机发送的,但是在windows上ping 时使用-i命令时,不能为0,而我考虑使用winpcap自己造一个包是否能发送呢,而我暂时不会,所以没做这个情况。

说了这么多,总结一下:路由器丢弃ttl为0或1的分组,并发送icmp报文,虽然ttl为0的报文不会出现。其余的报文是正常处理。

如有错误,欢迎指正。