【ping】在Linux服务器上ping某个主机时,出现(DUP!),一般是什么原因?

一、 默认iptables策略

Linux内核集成的IP信息包过滤系统,linux的包过滤功能,即linux防火墙,它由netfilter和iptables两个组件组成。

防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。

netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

netfilter组件也称为内核空间,是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

CentOS7没有iptables,默认使用firewalld 。
iptables默认无法被systemctl控制,需要安装iptables-services、iptables-devel这两个依赖包。

image.png

# yum -y install iptables iptables-services
# yum info iptables-services

# systemctl  status iptables
# cat /usr/lib/systemd/system/iptables.service
# rpm -qf /usr/lib/systemd/system/iptables.service
# cat /etc/sysconfig/iptables

image.png

image.png

image.png

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptables 默认策略解读

:INPUT ACCEPT [0:0]
# 该规则表示INPUT表默认策略是ACCEPT

:FORWARD ACCEPT [0:0]
# 该规则表示FORWARD表默认策略是ACCEPT

:OUTPUT ACCEPT [0:0]
# 该规则表示OUTPUT表默认策略是ACCEPT

-A INPUT -p icmp -j ACCEPT
# 该规则表示 OUTPUT表对 icmp协议的默认测试是 ACCEPT

-A INPUT -i lo -j ACCEPT
#  -i 参数是指定接口,这里的接口是lo ,lo就是loopback(本地环回接口),意思就允许本地环回接口在INPUT表的所有数据通信。

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许进入的数据包只能是刚刚我发出去的数据包的回应
# ESTABLISHED:已建立的链接状态
# RELATED:该数据包与本机发出的数据包有关

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

# 根据 iptables 策略匹配即停止原则
# 这两条表示在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包,并且发送一条host prohibited的消息给被拒绝的主机

配置文件 /etc/sysconfig/iptables 中的iptables的默认策略,你也可以删除这些,另外建立符合自己需求的策略。

二、 ICMP 协议

协议背景

ICMP,全称是 Internet Control Message Protocol,即互联网控制报文协议,所谓控制,就是通过下发指令来感知和控制网络环境,所以它一定是配合一个无法感知网络环境的协议来工作的,这个协议就是 IP(包括 IPv4 和 IPv6)。

ICMP 通常被认为是 IP 协议的一部分,它封装在 IP 层中,使用 IP 协议进行传输。因此,严格来说,ICMP 既不是一个网络层协议,也不是一个传输层协议,而是介于两者之间的一个协议。

它的主要功能是传输网络诊断信息,信息主要包括两类:

一类是 查询类报文 :主要用于信息的查询和采集,比如采集传输路径上的每个路由器都是谁,本次传输的报文是否达到目的地等等。
另一类是 差错诊断类报文 :主要用于诊断网络故障,比如传输报文被丢弃的原因是什么等等。

我们都知道,IP 协议是一个不可靠协议,如果 IP 包在传输过程中出现错误,比如 checksum 对不上,拥塞,超时等等,那么 IP 包是会直接被丢弃的,之后也不会有进一步的努力来修正。

这是 IP 协议的一个设计准则决定的,也就是 best effort,尽力而为,这样的好处是让 IP 协议尽量保持简单的形态,只负责有效率的数据传输,而更多的质量控制交给高层的协议去处理(比如 TCP)。

但高层能提供质量控制的协议毕竟在少数,所以就需要在下层有协议来辅助 IP 完成必要的网络质量管理,ICMP 协议自然就被提出来了。

通过 ICMP 协议,当 IP 包发生错误的时候,上层发送 IP 包的主机或路由器并不知道下层发生了错误,这个时候,下层的主机或路由器就可以通过发送 ICMP 包,将错误信息汇报给上层,从而让上层的主机或路由器进行调整。

不过需要注意的是,ICMP 仅仅只能提供某些特定类型的错误信息汇报,并不能帮助 IP 协议成为可靠的协议,它能做的事还是有限,但用于基本的网络质量管理是足够了。

ICMP 报文格式格式

如下图所示,ICMP 报文是被封装在 IP 数据报中传输的。

IP 报头中的 Protocol 字段为 1 即表示该报文携带的是 ICMP 报文。
(此处只是为了说明问题,因此 IP 报头是简化了的)

image.png

进一步看,ICMP 报头为 4 个字节:

类型 type:占 1 个字节,表示较大范围类型分类的 ICMP 报文
代码 code:占 1 个字节,表示较小范围类型分类的 ICMP 报文(type的细分)
校验和 checksum:占 2 个字节,ICMP checksum 的计算方法类似于 IP checksum,但是不同的是 IP 只校验头部,ICMP 校验头部+数据部分
后面紧接的 ICMP 数据部分,根据前面的类型和代码字段的不同,具有不同的内容。

ICMP报文类型

ICMP 支持的报文类型非常多,详细看下表:
image.png

类型字段(type)指代了一大类,代码字段(code)又细分了几大小类。

上面可能不够明确,我们通过下面这两张表来列举一下,由于类型太多了,而且有些平时非常少见,因此,这里我们只列举常见的一些类型。

第一张表:类型表
注:R表示查询报文,E表示差错报文
image.png

进一步,对于每种类型,又可以根据代码字段细分多种子类型。

第二张表:类型细分表
image.png

通过这两张表,每一种类型的 ICMP 包的意思应该都比较清楚了。

ICMP 相关内核参数

ICMP 相关内核参数,常用的是 net.ipv4.icmp_echo_ignore_all,这是禁 ping 的一个参数,禁 ping 有几种方法。
其他的参数大家有兴趣也可以看看,遇到不懂的直接查这个图即可。
image.png

三、参考

对于 ICMP 协议,你想知道的都在这里了
https://mp.weixin.qq.com/s/Su2M5aQ2GXsbrgpVcX3kpQ

ping容易忽略的10点用法和排查问题技巧
https://mp.weixin.qq.com/s/ajE0yJfZo02Mkjmpy27SgA

Linux禁止ping以及开启ping的方法

https://mp.weixin.qq.com/s/5nPbvQeAxfOl-li_oMMdDw

当使用 ping 命令来测试 VMWare Workstation 虚拟机,可能会遇到 "(DUP!)" 问题。"(DUP!)" 表示重复的 ICMP 响应。 这个问题通常是由于虚拟机的网络配置或网络连接问题导致的。下面是一些常见的原因和解决方法: 1. 虚拟机的网络配置问题:请确保虚拟机的网络适配器设置正确。检查虚拟机的网络适配器类型和连接方式,确保它们与所需的网络环境相匹配。您可以尝试重新配置虚拟机的网络适配器或重新创建虚拟机网络来解决配置问题。 2. 网络连接问题:检查主机和虚拟机之间的网络连接是否正常。确保主机和虚拟机在同一个子网中,并且可以相互通信。您可以尝试通过其他方式(如 Telnet)测试主机和虚拟机之间的连接,以确定是否存在网络连接问题。 3. 虚拟机操作系统的防火墙设置:某些操作系统(如 Windows)可能会启用防火墙,并配置为禁止对 ping 请求的响应。请检查虚拟机操作系统的防火墙设置,确保允许 ICMP 请求和响应。 4. 虚拟机网络驱动程序问题:某些情况下,虚拟机的网络驱动程序可能会引起重复的 ICMP 响应问题。尝试更新虚拟机的网络驱动程序或重新安装 VMWare Tools 来解决此类问题。 如果您仍然遇到 "(DUP!)" 问题,建议您参考 VMWare Workstation 的文档或向 VMWare 支持团队寻求进一步的帮助,以获得针对您特定情况的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值