azl397985856 / fe-interview

宇宙最强的前端面试指南 (https://lucifer.ren/fe-interview)
Apache License 2.0
2.84k stars 260 forks source link

【每日一题】- 2019-12-05 - traceroute的原理是什么? #78

Closed azl397985856 closed 4 years ago

azl397985856 commented 4 years ago

traceroute 可以用追踪路由,比如:

$ traceroute 192.168.2.1

traceroute to 192.168.2.1 (192.168.2.1), 64 hops max, 52 byte packets
 1  192.168.7.254 (192.168.7.254)  7.553 ms  5.346 ms  6.341 ms
 2  192.168.2.1 (192.168.2.1)  1.900 ms  3.409 ms  3.521 ms

请问它是怎么做到的?

feikerwu commented 4 years ago

网络层ip报文首部有个TTL(time-to-live)字段,每次到达新的ip地址,都会减1,如果TTL === 0且没有到达目标地址,当前ip会向源地址通过ICMP发送一个报错消息。

traceroute 通过设置不同的TTL来确定路由情况,traceroute发送UDP包,第一个包TTL设为1,第二包设为2。。最大设置64(64hops), 源地址通过路由返回的出错信息,记录到达中间路由的ip以及耗时。 traceroute会将udp目标地址的端口设的很多,确保到达目标后也会有错误信息返回,记录到达目标的ip以及耗时