ICMP协议

本文深入解析ICMP协议的消息类型、编码方式及其在ping和tracert工具中的具体应用,详细阐述了如何通过TTL值和ICMP错误消息判断数据包传输路径,揭示了网络探测背后的原理。

1. ICMP消息类型和编码类型

ICMP协议


2. ICMP应用-ping

ICMP协议
<br/>
2.1、-a 指定源IP地址ping目标IP地址
ICMP协议
<br/>
2.2、-c指定ping请求包的个数,默认是5个
ICMP协议

3.ICMP应用-Tracert

Tracert的工作原理:Tracert使用IP包的TTL值和ICMP错误消息来判断主机达到目标地址中间经过的路由个数;
首先,Tracert发送一个UDP包的端口大于30000,TLL值为1,一次性发送3个包,因为UDP是不可靠的,所以发送3个包保证传输的可靠性,只要有一个包达到目标即可;
在路径上的第一个路由器收到包之后,TTL值减1,此时TTL值为0,路由器就会丢弃数据包,返回一个ICMP Replay包(包括发送方路由器的IP地址等);
Tracert收到ICMP Replay包之后,知道下一跳的IP地址是存在;
Tracert第二次发送一个和第一个数据包端口一样的,TTL值位2,当路径上第二台路由器收到数据包之后,TTL值减1,此时TTL值为0(每经过一个路由器,TTL值减1),这个重复的动作持续到数据包达到目的地;
当目的地收到这个数据包时,发现自己并没有这个端口号,就会返回一个端口不可达的ICMP Replay包,此时,tracert就知道到达目的地了。

1、默认已经配好IP地址 and 路由
ICMP协议
选中R2的Ethernet0/0/0端口进行抓包
2、在R1路由器 tracert 路由器R5的IP地址 1.1.4.2
ICMP协议
3、R1访问R5的端口30005,TTL值为1
ICMP协议
4、当R2路由器收到R1发送的数据包之后,发现TTL值为1,因转发一台路由器,TTL值减1,那么R2发现TTL值为0就不会再继续转发数据包,就会告诉R1,TTL值已超出,此时R1也就知道了他的下一跳的IP地址是1.1.1.2
ICMP协议
5、当数据包达到目的地后,R5发现没有30005这个端口,就告诉R1端口不可达。
ICMP协议

转载于:https://blog.51cto.com/158573116/2406343

### 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、付费专栏及课程。

余额充值