当前位置: 首页 > Linux

ping和traceroute的原理

时间:2023-04-06 23:48:36 Linux

pingping的原理主要用来检测主机之间是否可以进行通信。如果无法ping通主机,则表示无法与该主机建立连接。Ping使用ICMP协议,向目的主机发送ICMP回显请求报文。ICMP协议规定,目的主机必须向源主机返回ICMP回显应答报文,如果源主机在一定时间内收到应答,则表明该主机可达。ICMP协议通过IP协议发送,是一种无连接、不可靠的数据报协议。Ping是一个用来检查网络是否通畅或网络连接速度是否在同一网段的命令:在主机A上运行“Ping192.168.0.5”后会发生什么?首先Ping命令会构建一个固定格式的ICMP请求数据包,然后ICMP协议将这个数据包连同地址“192.168.0.5”发送给IP层协议,IP层协议将使用地址“192.168.0.5”192.168.0.5”作为目标地址。本机IP地址作为源地址,加上一些其他的控制信息构建一个IP数据包,想办法得到192.168.0.5的MAC地址,交给数据链路层构建一个数据框。这里的关键是IP层协议通过B机的IP地址和自己的子网掩码发现自己和自己属于同一个网络,然后直接在这个网络中查找本机的MAC。如果两台机器之前通信过,A机的ARP缓存表中应该有B机的IP和它的MAC的映射关系,如果没有,发送一个ARP请求广播,得到B机的MAC,交给到数据链路层。后者构造一个数据帧,目的地址是IP层传输过来的物理地址,源地址是本机的MAC地址,加上一些控制信息,按照以太网的介质访问规则传输。主机B收到这个数据帧后,首先检查其目的地址,并与本机的MAC地址进行比较,如果匹配,则接受;否则,它将丢弃它。收到数据帧后检查,从帧中提取IP数据包,交给本地IP层协议处理。同样,IP层检查后,提取有用的信息,交给ICMP协议处理。后者处理后,立即构造一个ICMP响应报文发送给主机A,这个过程与主机A向主机B发送ICMP请求报文的过程完全相同。不同网段:运行“Ping192.168后。由路由器处理,即获取路由的MAC。至于如何获取路由的MAC,同上,先查找在ARP缓存表中,如果找不到就广播,路由器拿到数据帧后,会再次联系主机D,如果找不到,就会返回超时消息给主机A。理解Ping命令和ICMPwithExamplesTraceroute原理Traceroute是用来检测源主机到目的主机路由的重要工具,也是最简洁的工具。虽然可以检测ping,但是ping受限于IP头。(IPheader字段最多只能容纳9个IP地址),ping不能完整记录它经过的路由器,所以引入了TracerouteTraceroute原理:其实Traceroute的原理很简单,在收到目的主机的IP后,它首先向目的主机发送一个TTL=1(TTL是指生存时间)的udp数据包,第一个经过的路由器接收到这个数据包。之后TTL自动减1,TTL变为0后,路由器丢弃该数据包,同时生成主机不可达的ICMP超时数据报。主机收到这个ICMP数据报后,会向目的主机发送一个TTL=2的数据报,然后刺激第二个路由器向该主机发送一个ICMP数据报,以此类推,直到到达目的主机。这样Traceroute就可以获取所有路由器的IP地址,从而避开IP头,只记录有限路由的IP地址。那么我们怎么知道UDP是否到达了目的主机呢?这就涉及到一个技巧问题。TCP和UDP协议都有端口号定义,而普通的网络程序只监听几个端口号比较小的端口,比如80,比如23等等。而traceroute发送的是端口>30000(真变态)的UDP报告,所以当到达目的主机时,目的主机只能向本主机发送一个端口不可达的ICMP数据报。主机收到这个报告后,就知道目的主机已经到达。————————————————理解traceroute用例子探索ICMP协议用例子理解Ping命令和ICMP什么是ICMP类型?icmp端口