内容: 最近实习做的跟计算机网络有关,在复习linux下的网络的命令,复习到traceroute这个命令,这个命令可以用来追踪路径。刚好想起了以前学习计算机网络课程的时候,书里有提到traceroute的原理,就记录一下。提到的书籍:计算机网络第七版
正题: 首先traceroute虽然是一个命令,但是其实是一个可执行文件,ping也类似。
该程序的功能:追踪本主机到目的主机的报文交换都经过了哪些路由器,实际工作流程如下:
1.构造一个UDP报文,TTL分别为1,当这个报文到达第一个路由器后,TTL减去1后为零,报文被丢弃,然后路由器发送ICMP报文(时间超过)给源主机。
2.构造UDP报文,TTL为2,同样的,第二个路由器会返回ICMP报文(时间超过)给源主机
(以此类推,注意发送过程中的UDP报文使用的端口都是非法端口,以使最后达到的时候无法交付,不然你就不知道什么时候应该停)…
3.直到TTL 到达某个值,而这个值可以使这个UDP报文刚好到达目的主机,由于报文的端口号不合法,目的主机返回ICMP(端口不可达)报文给源主机。
(上述过程中,路由器和目的主机返回的ICMP报文中均含有它们的地址,所以得到了路径。)
实际实现中,源主机每次发送三个相同TTL的UDP报文,因为现实中网络环境比较复杂,可能会有丢包情况发生。