ICMP协议



ICMP协议

   ICMP经常被认为是IP层的一个组成部分,它是网络层的一个协议,它传递差错报文以及其他需要注意的信息,ICMP报文通常被IP层或更高层(TCPUDP等)使用,它是在IP数据报内传输的。

   ICMP报文大致分为两类:查询报文和差错报文。

   先来看差错报文。当传送IP数据报发生错误时(比如主机不可达、网络不可达等),ICMP协议将会发送一个ICMP差错报文给源主机,好让主机做出相应的处理,也因此IP层以上的一些协议有可能做到可靠传输。书中给出了ICMP差错报文中的一些组合(类型和代码的组合)描述:如网络不可达、网络不可达、协议不可达、端口不可达等。这里说下端口不可达的意思:UDP的规则之一是,如果收到一份UDP数据报而目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文,将报文中的类型和代码的组合设定为端口不可达。Traceroute程序就是利用端口不可达来产生ICMP差错报文的。

   另外,在大多数情况下,传送IP数据报发生错误,会产生一个ICMP错误报文,但下面各种情况都不会导致产生ICMP差错报文:

  • ICMP差错报文不会产生差错报文(ICMP查询报文可能会产生ICMP差错报文);
  • 目的地址是广播地址和多播地址的IP数据报;
  • 作为链路层广播的数据报;
  • 不是IP分片的第一片
  • 源地址不是单个主机的数据报。

   这些规则是为了防止过去允许ICMP差错报文对广播分组影响所带来的广播风暴。

   再来看ICMP查询报文,查询报文主要用途有:

  • 子网掩码查询;
  • 时间戳查询;
  • ping查询。
### ICMP协议详解 ICMP(Internet Control Message Protocol)即互联网控制消息协议,是TCP/IP协议族中的一个子协议,主要用于在IP网络中传递控制消息。它为网络设备提供了一种送错误消息、获取信息以及进行网络诊断的机制。 #### 工作原理 ICMP工作在网络层,通常与IP协议一起使用,但它本身并不提供传输服务,而是作为IP协议的一部分,用于报告IP数据报传输过程中的错误和异常情况。ICMP报文被封装在IP数据报的数据部分,其基本结构包括类型(Type)、代码(Code)和校验和(Checksum)等字段。不同类型和代码的组合表示不同的ICMP报文类型,如回显请求(Echo Request)和回显应答(Echo Reply)等。 ICMP的一个典型应用是`ping`命令,它通过ICMP Echo Request报文并等待Echo Reply来测试网络连通性。另一个常见的应用是`traceroute`,它利用ICMP超时消息来确定数据包在网络中的路径。 #### 应用场景 - **网络故障诊断**:利用`ping`和`traceroute`工具来检测网络连通性和路径信息。 - **网络优化**:通过ICMP重定向消息通知主机调整路由以优化网络性能。 - **安全监控**:监控网络中的ICMP消息,可以检测网络攻击和异常行为。 例如,当一个路由器现某个网络或主机不可达时,它可以ICMP Destination Unreachable报文给源主机,告知其具体的问题所在。此外,在进行网络优化时,如果路由器现有一条更优的路径,可以通过ICMP Redirect报文引导主机更新其路由表。 以下是一个简单的Python代码示例,展示如何使用`scapy`库构造一个ICMP Echo Request报文: ```python from scapy.all import IP, ICMP, sr1 # 构造ICMP Echo Request报文 packet = IP(dst="8.8.8.8") / ICMP() # 送报文并接收响应 response = sr1(packet, timeout=2) if response: response.show() else: print("No response") ``` 这段代码首先导入了必要的模块,然后构造了一个目标地址为`8.8.8.8`的ICMP Echo Request报文,并使用`sr1`函数送该报文并等待响应。如果接收到响应,则显示响应报文的信息;如果没有响应,则输出提示信息。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值