icmp协议
icmp属于一个网络层的协议,一般被封装到IP报文中,主要功能是如果IP报文出现目的地不可达,时间超过等情况出现时,就会将返回一个差错检测报文,里面包括了IP报文丢失的原因
常见的报错信息有
- 目的地不可达
- 时间超过
- 参数问题
- 重定向消息
总结:icmp协议用于在IP主机、路由器之间传递控制消息。这些控制消息用于提供有关网络通信的反馈,比如目的地不可达、时间超过、参数问题等。ICMP报文通常封装在IP数据包中,用于通知发送方网络中发生的问题,以便发送方可以采取适当的行动。
ping指令的实现
背景
当我们想要判断一个服务器是否可以与自己的服务器联通或者了解某个网络的框架时,我们通常会使用ping指令去ping对应的IP地址
当时我们在使用时也应该想一想ping是如何知道自己服务器和对应服务器之间有多少个交换机,是如何知道对应的服务器是否可以联通。
实现
首先我们会发送一个udp报文,并且把IP头部的TTL字段设置为1(就是IP报文的生存时间,经过一个网关服务器减一,当TTL 为0时被丢弃),被丢弃以后,对应网关服务器就会向源IP地址的主机发送一个ICMP报文,我们自然就知道第一个网关服务器是到达了,然后再发送一个udp报文,并且将IP报头的TTL字段设置为2 这样就可以到第二个网关服务器,同样的,被第二个网关服务器丢弃以后就会向对应的主机发送一个ICMP报文,对应的,一次又一次的发送直到达到对应的服务器,但是这样发送到对应的主机以后是不是不会发送ICMP报文了呢?这也有对应的解决办法,他在发送时会将端口号填充成一个非常大的,使得对应的服务器不存在这个端口,自然也属于不可达,也返回一个ICMP报文,并且报文类型和刚刚网关服务器的icmp报文类型不一样。这样就实现了判断网络是否联通