本文总结了一些大厂interview过程中遇到的一些经典问题,以下问题以及对应答复仅供参考。
ROUND1
Q1:traceroute命令的原理是什么,中间环节的设备为什么要返回报文?
A:其实现可以基于多种方式,LINUX默认使用UDP,Windows默认使用ICMP。以下讲解这两种方式。
UDP协议实现方式
在基于UDP的实现中,客户端发送的数据包是通过UDP协议来传输的,使用了一个大于30000的端口号,服务器在收到这个数据包的时候会返回一个端口不可达的ICMP错误信息,客户端通过判断收到的错误信息是TTL超时还是端口不可达来判断数据包是否到达目标主机,具体的流程如图:
- 客户端发送一个TTL为1,端口号大于30000的UDP数据包,到达第一站路由器之后TTL被减去1,返回了一个超时的ICMP数据包,客户端得到第一跳路由器的地址。
- 客户端发送一个TTL为2的数据包,在第二跳的路由器节点处超时,得到第二跳路由器的地址。
- 客户端发送一个TTL为3的数据包,数据包成功到达目标主机,返回一个端口不可达错误,traceroute结束。