PING和traceroute
ping
ping实际作用是用来查询两个主机之间是否可达,具体过程如下:
- ping是基于ICMP协议的,首先构建ICMP请求报文(类型为0),IP层协议再以ICMP为数据部分构造IP数据包,
- 如果两台主机在局域网内,则需要查询目的主机的mac地址(通过ARP协议查询),如果是在互联网中,则需要查询相应路由器的mac地址(通过ARP协议)查询到了相应mac地址后,构造数据链路层帧,并将帧发送给目的主机(路由器),
- 当目的主机收到请求后,会向源主机发送ICMP响应,当源主机收到响应则表示网络可达,如果超时则显示超时(网络不可达),同时ping还可以计算网络响应延迟
traceroute
即路由追踪,可以追踪到达目的主机上的所有路由器的情况,可以显示所经过的路由器的ip等信息,具体实现方式有两种
- 基于UDP的实现方式
- 源主机每次构造一个UDP包(端口号大于30000),开始TTL为1,第一个路由器收到后,返回超时ICMP报文
- 源主机再次构造一个UDP包,TTL为2,第二个路由器收到后,返回超时ICMP报文
- 如此直到到达目的主机,目的主机返回端口不可达ICMP报文
- 基于ICMP报文
- 源主机每次构造一个ICMP回显请求报文,开始TTL为1,第一个路由器收到后,返回超时
- 下一次构造TTL为2,第二个路由器收到后返回超时
- 直到到达目的主机后,目的主机发送ICMP回显应答报文