ping的过程详解

谈到这个问题,我们首先想到的就应该是分情况考虑:

一、同一网段内的ping操作

假设主机A的IP为:1.1.1.1
主机B的IP为:1.1.1.3
主机A去ping同一网段的主机B,它会封装二层报文,首先去查本地MAC地址表,发现没有B的地址,此时就会发送ARP报文。
目的MAC:源MAC:OP:发送端MAC:发送端IP:目的端MAC:目的端IP
FFFFF:A的MAC:1:A的MAC:1.1.1.1:0000000:1.1.1.3
通过观察报文发现:外面封装了目的MAC地址为FFFFF,源地址为A的MAC的头部,里面的部分意思是:我的MAC和IP都在了,你的IP也有了,返回给我你的MAC地址。

交换机收到A的ARP请求后,就会将查找自己的MAC地址表,如果有,则直接返回给A;如果没有则从所有端口将该报文广播出去;B接收到报文后,给A返回如下格式的报文:

目的MAC:源MAC:OP:发送端MAC:发送端IP:目的端MAC:目的端IP
A的MAC:B的MAC:1:B的MAC:1.1.1.3:A的MAC:1.1.1.1

这样A就学到了B的MAC地址;

下面就可以愉快的进行ICMP报文通信了。
A封装ICMP报文,发送给B,格式如下:
目的地址:源地址:目的IP:源IP:ICMP报文
B的MAC:A的MAC:1.1.1.3:1.1.1.1:request

将学到的MAC地址封装到报文头部,利用MAC地址进行通信;

B收到后,回复报文格式如下:
目的地址:源地址:目的IP:源IP:ICMP报文
A的MAC:B的MAC:1.1.1.1:1.1.1.3:Echoc answer

整个过程就是:先利用ARP学习到B的地址,然后再利用MAC地址发送ICMP报文。

二、不同网段的ping

此时网络中还有一个主机C,IP地址为:2.2.2.2(够2的!)

ApingC的过程如下:
首先A想发报文给C,查找MAC地址表发现,没有C的MAC地址,同时发现C与自己不在一个网段,于是它先发送一个ARP请求,学习到网关的MAC地址;这里可以把网关理解为同一网段的B;
然后再把ICMP报文封装好,发送给网关;
目的地址:源地址:源IP:目的IP:ICMP报文
网关的MAC:A的MAC:1.1.1.1:2.2.2.2:request

报文到达网关之后,路由器根据目的地址查找路由表,找到转发出口。
去掉原来的MAC头部。换成如下的头部:
目的地址:源地址:
C的MAC:另一侧网关的MAC 其他的不变

如果路由器也没有C的MAC地址,则从转发端口先发送ARP报文,学习C的MAC地址。

C收到ICMP报文后,应答如下:
目的地址:源地址:目的IP:源IP:ICMP
网关的MAC:C的MAC:1.1.1.1:2.2.2.2:echo answer

总结

跨网段ping时,可以理解为:两个同网段的过程,通过路由器连接起来了。
最终A学到的也只是网关的MAC地址,这就够了,报文能够顺利转发出去了。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux双网卡绑定bond的过程可以分为以下几个步骤: 1. 准备工作 在开始绑定之前,需要确认系统中是否已经安装了bonding模块,如果没有则需要先安装。可以使用以下命令检查: ``` lsmod | grep bonding ``` 如果没有任何输出,则表示没有安装bonding模块。 2. 创建bond接口 使用以下命令创建bond接口: ``` modprobe bonding mode=<mode> ``` 其中,mode参数表示绑定模式,可以选择以下几种模式: - balance-rr:将传输的数据包在所有可用的接口之间按照轮询方式进行负载均衡。 - active-backup:使用一张接口作为主接口,另一张接口作为备份接口,当主接口失效时自动切换到备份接口。 - balance-xor:将传输的数据包在所有可用的接口之间按照源和目的MAC地址进行负载均衡。 - broadcast:将传输的数据包在所有可用的接口之间进行广播。 - 802.3ad:使用LACP(链路聚合控制协议)协议进行端口聚合,实现负载均衡。 - balance-tlb:将传输的数据包在所有可用的接口之间按照当前负载情况进行负载均衡。 - balance-alb:将传输的数据包在所有可用的接口之间按照源和目的IP地址进行负载均衡。 例如,使用balance-rr模式创建bond接口,可以使用以下命令: ``` modprobe bonding mode=balance-rr ``` 3. 配置bond接口参数 可以使用以下命令配置bond接口的参数: ``` ifconfig bond0 <IP地址> netmask <子网掩码> ``` 其中,bond0表示bond接口的名称,IP地址和子网掩码根据实际情况进行设置。 4. 添加物理接口 使用以下命令将物理接口添加到bond接口中: ``` ifenslave bond0 eth0 ifenslave bond0 eth1 ``` 其中,bond0表示bond接口的名称,eth0和eth1表示需要添加的物理接口的名称。 5. 配置物理接口参数 可以使用以下命令配置物理接口的参数: ``` ifconfig eth0 0.0.0.0 up ifconfig eth1 0.0.0.0 up ``` 其中,eth0和eth1表示需要配置的物理接口的名称。 6. 测试 完成以上配置后,可以使用以下命令测试bond接口是否正常工作: ``` ping <IP地址> ``` 其中,IP地址为需要测试的目标IP地址。 如果ping命令能够正常响应,则表示双网卡绑定bond已经成功。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值