【Linux】ICMP协议——网络层

ICMP协议

ICMP(Internet Control Message Protoco)Internet控制报文协议,用于在IP主机、路由器之间传递控制信息,是一个TCP/IP协议。该协议是用来检测网络传输的问题,相当于维修人员的工具。

ICMP协议的定位

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。

其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际网络层还有两种协议叫做ICMP和IGMP。

ICMP、IGMP和IP协议虽然都属于网络层的协议,但ICMP协议和IGMP协议属于IP的上层协议。

  • 也就是说,IP的上层协议不一定就直接是传输层的协议,IP的上层协议有可能也属于网络层的协议,但就是位于IP的上层。
  • 与之类似的,数据链路层当中的ARP协议和RARP协议,这两个协议虽然与MAC帧协议都属于数据链路层,但这两个协议属于MAC帧的上层协议。

ICMP功能

ICMP的主要功能包括:

  • 确认IP包是否成功到达目标地址。
  • 通知在发送过程中IP包丢弃的原因。
  • ICMP只能搭配IPv4使用,如果是IPv6的情况下,需要使用ICMPv6。

举个例子

比如当主机A在向主机B发送数据的过程中,主机B因为某些原因已经离线了。

当发送的数据包到达主机B所在局域网的入口路由器时,入口路由器为了获得主机B的MAC地址,于是会向主机B发送ARP请求包,但由于主机B已经离线了,因此路由器在多次发送ARP请求包而得不到响应后,就会返回一个ICMP Destination Unreachable的包给主机A,此时主机A就知道自己发送的数据无法到达主机B。
 

ICMP协议格式

ICMP协议格式如下:

ICMP大概分为两类报文。

  • 一类是通知出错原因的。
  • 一类是用于诊断查询的。

ICMP包常见类型如下:

ping命令

ping命令是基于ICMP协议实现的,通常用于测试本地主机与另一台主机之间的通信信道是否正常。

例如,使用ping www.baidu.com命令,测试本地主机与百度服务器之间的通信信道是否正常。

 

  • 注意,此处ping的是百度的域名,该域名会由DNS解析成IP地址。
  • ping命令不仅能验证网络的连通性,同时也会统计响应时间和TTL(IP包中的Time To Live,生存时间)。
  • ping命令会先发送一个ICMP Echo Request给对端。
  • 对端接收到之后,会返回一个ICMP Echo Reply。

一个值得注意的坑

telnet对应的端口号是23,ssh对应的端口号是22,那ping对应的端口号是多少? 

这是问问题的人设的一个圈套,ping命令是基于网络层的ICMP协议,而端口号是属于传输层的内容,因此ICMP协议根本就不关心端口号这样的信息。

因此,ping命令实际是绕过了传输层的,在Linux当中实际也有绕过传输层的一套网络编程接口,叫做原生套接字。

traceroute命令

traceroute命令也是基于ICMP协议实现的,traceroute命令可以遍历数据包传送到目标主机所经过的所有路由器。 

 例如,使用traceroute www.baidu.com命令,遍历数据包传送到百度服务器所经过的所有路由器。

 

原理简述:

  • traceroute命令底层实际是通过增加存活时间(TTL)值来实现的。
  • 因为每当数据包经过一个路由器,其TTL值就会减1,当TTL值减为0时对应路由设备就会将该数据包丢弃,并传送一个ICMP TTL数据包给发送主机。
  • 因此traceroute命令底层可以发出多个数据包,并给这些数据包设置不同的TTL值,最后该主机就能够得到一连串的数据包路径。

参考文献:

http://t.csdn.cn/1HUnz 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杰深入学习计算机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值