当前位置:数据网络行业动态 → 正文

华云数据:ping不通 找房东——从一个ping包来解析网络转发原理

责任编辑:zsheng |来源:企业网D1Net  2019-03-04 18:29:51 原创文章 企业网D1Net

随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈。在云计算这样的技术领域,专利储备往往代表着企业最新的技术实力。华云数据本期“智汇华云”专栏将从一个ping包来解析网络转发原理,与大家共同分享云计算领域的最新技术与解决方案。

背景

“房东,我ping不通了”,相信在外打工租房的各位都有过这个经历吧。ping不通,一个简单的现象,其实蕴藏着很多的过程,今天我们就来谈谈,ping不通该怎么办。

基础概念

在说这些之前,先介绍几个概念:

1、ping包

ping包走的是ICMP协议,什么是ICMP协议呢,Internet控制报文协议,字面意思不好理解,作用很简单,就是发送一些控制消息,来检测链路。

要了解一个协议,我们一般先看它是怎么封装的,查什么书籍都是假的,最好的办法就是自己去抓一个包看看,抓包的工具有很多种,我喜欢用wireshark(windows)和tcpdump(linux),抓包工具怎么用,自行去度娘。

抓到的报文如下,一步步慢慢分析:

首先是以太头

我们知道,MAC地址是用来唯一标识网卡的,暂时理解为网卡门牌号吧。

DMAC:目的mac,也就是你的数据包要发给谁,

SMAC:源mac,你自己网卡的门牌号

type:数据包的类型

Tips: 小知识,这里插一句,如果是三层转发,DMAC一般是你网关的mac地址,如果是二层转发,DMAC则是目的端的MAC地址,这也是区分一个数据包是二层还是三层转发最好的方法。

IP层,主要看几个吧。

dscp:最大的用处就是区分报文优先级,我们都知道,协议报文需要高优先级

flags:分片的标志,下面的fragment offset是指分片的偏移量

protocol: 协议类型,可以看到 我们的ping是通过icmp协议

icmp里面比较重要的2个 type和code,以此来决定这个icmp报文是干嘛的。

这里的type 8 code 0,是icmp request,具体这些代表什么意思,我们可以去查RFC792

https://tools.ietf.org/html/rfc792

WHAT?什么是RFC,我只听过KFC,问题不大,自己去度娘。

2、ARP

ARP是什么,地址解析,所谓的地址解析就是根据IP地址来获取MAC地址,上面的报文你也看到了,你要ping别人,要知道别人的IP,别人的mac,发到网关的需要知道网关的mac,发到目的端的需要知道目的端的mac。

ARP的过程很简单,客户端先发一个ARP请求,比如你知道了10.10.10.10这个IP,但是你不知道mac,你就需要发一个ARP请求来获取。

好了 我们照例抓一个包,来看看ARP是怎么工作的。

ARP的请求报文是一个广播报文,所以他的dmac就是ff:ff:ff:ff:ff:ff,你知道了对方的IP,但是不知道对方的mac,所以你的target mac就填00:00:00:00:00:00就行,看上图,这是一个ARP请求报文,我想知道10.51.30.122的mac是多少。ARP请求报文会在局域网广播,如果你不是10.51.30.122,那么你收到这个报文后,会直接丢弃不处理,如果你恰好是10.51.30.122这个IP,那么就会做一个ARP应答。

我们再来看一个ARP应答报文。

10.51.30.122这个地址收到ARP请求后,会发一个单播报文给我,告诉我它的mac,同时他也会记录我的mac和IP,在他那边会保存我的ARP信息,同时我也保存了它的,下次我再找他,直接查ARP表就可以了,不再需要再发一起ARP请求,当然,如果ARP老化了,那么这样的流程还得再来一次咯。

3、DNS

有些人喜欢ping百度,如果ping的是域名,那中间又多了一层处理,那就是域名解析,来来来,继续抓包。

可以看到 由于不知道百度的IP是多少,所以我先发给了114.114.114.114,域名解析服务器,他帮我解析以后再把IP告诉我。

于是我重新封装报文,目的ip直接选择了216这个地址发送了icmp request。

大功告成,ping也就通了。

排查

搞什么??文章的标题不是ping不通吗,那你解释一堆ping通干什么,其实我们从原理里面反推一下,ping不通的理由到底有哪些嘛~ 每一个环节都检查一遍,那么问题不就迎刃而解了嘛~

来来来,先来画个图,二层转发不过网关我就不画了,直接来一个三层转发图。

这是一个简单的图,下面我来慢慢的一步步的写下步骤,假设我就去ping百度,一般现在看自己能不能上网不都是ping百度嘛。

1、首先客户端要对百度的域名进行解析才能获取到IP地址,才能进一步封装自己的ping包,所以他首先发到域名服务器(假设我配置的是114.114.114.114),等域名服务器帮我解析好以后,给了我百度的IP地址,220.181.57.216,那么这里,我要去域名服务器,我是怎么去的呢,当然首先查看路由表。

很明显,我没有直接去114.114.114.114的路由,所以我只能发给网关,也就是上图的192.168.0.1,由网关去处理(如果你不知道网关的mac,需要先发广播ARP给网关,拿到网关的mac来维护ARP表),之后网关把域名解析的结果返还给我,我就有了baidu的IP地址。

2、有了目的IP,客户端就准备封装报文,因为是三层转发,我不需要知道百度的mac地址,我只要知道网关的mac就行了,dmac=网关mac,dip=百度IP,直接发送ping包,由于网关的mac上面已经发送过一次ARP请求了,所有网关的ARP已经保存在客户端的ARP表了。

3、数据包到了网关,因为是到公网去,这里面的处理就不说了,用一条命令可以查看你的数据包经过了多少的跃点。

4、百度收到了我的ping包以后,于是如法炮制的获取它的网关ARP信息,再把封装好的icmp reply给我发了回来,等我的网关收到了这个reply以后,发现目的IP是我,通过路由直接转发给了我,这里整个过程就完成了。

Tips:对于过来的数据包,网关会自行学习数据包的源mac信息,维护自己的mac表和ARP表。

好了,如果ping不通,那么你想想有哪些原因呢,一步步地去检查,一步步地去抓包分析,你就能找到原因,ping不通,不用找房东,自己把网线捋一捋,不就通了啊。

关键字:

原创文章 企业网D1Net

x 华云数据:ping不通 找房东——从一个ping包来解析网络转发原理 扫一扫
分享本文到朋友圈
当前位置:数据网络行业动态 → 正文

华云数据:ping不通 找房东——从一个ping包来解析网络转发原理

责任编辑:zsheng |来源:企业网D1Net  2019-03-04 18:29:51 原创文章 企业网D1Net

随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈。在云计算这样的技术领域,专利储备往往代表着企业最新的技术实力。华云数据本期“智汇华云”专栏将从一个ping包来解析网络转发原理,与大家共同分享云计算领域的最新技术与解决方案。

背景

“房东,我ping不通了”,相信在外打工租房的各位都有过这个经历吧。ping不通,一个简单的现象,其实蕴藏着很多的过程,今天我们就来谈谈,ping不通该怎么办。

基础概念

在说这些之前,先介绍几个概念:

1、ping包

ping包走的是ICMP协议,什么是ICMP协议呢,Internet控制报文协议,字面意思不好理解,作用很简单,就是发送一些控制消息,来检测链路。

要了解一个协议,我们一般先看它是怎么封装的,查什么书籍都是假的,最好的办法就是自己去抓一个包看看,抓包的工具有很多种,我喜欢用wireshark(windows)和tcpdump(linux),抓包工具怎么用,自行去度娘。

抓到的报文如下,一步步慢慢分析:

首先是以太头

我们知道,MAC地址是用来唯一标识网卡的,暂时理解为网卡门牌号吧。

DMAC:目的mac,也就是你的数据包要发给谁,

SMAC:源mac,你自己网卡的门牌号

type:数据包的类型

Tips: 小知识,这里插一句,如果是三层转发,DMAC一般是你网关的mac地址,如果是二层转发,DMAC则是目的端的MAC地址,这也是区分一个数据包是二层还是三层转发最好的方法。

IP层,主要看几个吧。

dscp:最大的用处就是区分报文优先级,我们都知道,协议报文需要高优先级

flags:分片的标志,下面的fragment offset是指分片的偏移量

protocol: 协议类型,可以看到 我们的ping是通过icmp协议

icmp里面比较重要的2个 type和code,以此来决定这个icmp报文是干嘛的。

这里的type 8 code 0,是icmp request,具体这些代表什么意思,我们可以去查RFC792

https://tools.ietf.org/html/rfc792

WHAT?什么是RFC,我只听过KFC,问题不大,自己去度娘。

2、ARP

ARP是什么,地址解析,所谓的地址解析就是根据IP地址来获取MAC地址,上面的报文你也看到了,你要ping别人,要知道别人的IP,别人的mac,发到网关的需要知道网关的mac,发到目的端的需要知道目的端的mac。

ARP的过程很简单,客户端先发一个ARP请求,比如你知道了10.10.10.10这个IP,但是你不知道mac,你就需要发一个ARP请求来获取。

好了 我们照例抓一个包,来看看ARP是怎么工作的。

ARP的请求报文是一个广播报文,所以他的dmac就是ff:ff:ff:ff:ff:ff,你知道了对方的IP,但是不知道对方的mac,所以你的target mac就填00:00:00:00:00:00就行,看上图,这是一个ARP请求报文,我想知道10.51.30.122的mac是多少。ARP请求报文会在局域网广播,如果你不是10.51.30.122,那么你收到这个报文后,会直接丢弃不处理,如果你恰好是10.51.30.122这个IP,那么就会做一个ARP应答。

我们再来看一个ARP应答报文。

10.51.30.122这个地址收到ARP请求后,会发一个单播报文给我,告诉我它的mac,同时他也会记录我的mac和IP,在他那边会保存我的ARP信息,同时我也保存了它的,下次我再找他,直接查ARP表就可以了,不再需要再发一起ARP请求,当然,如果ARP老化了,那么这样的流程还得再来一次咯。

3、DNS

有些人喜欢ping百度,如果ping的是域名,那中间又多了一层处理,那就是域名解析,来来来,继续抓包。

可以看到 由于不知道百度的IP是多少,所以我先发给了114.114.114.114,域名解析服务器,他帮我解析以后再把IP告诉我。

于是我重新封装报文,目的ip直接选择了216这个地址发送了icmp request。

大功告成,ping也就通了。

排查

搞什么??文章的标题不是ping不通吗,那你解释一堆ping通干什么,其实我们从原理里面反推一下,ping不通的理由到底有哪些嘛~ 每一个环节都检查一遍,那么问题不就迎刃而解了嘛~

来来来,先来画个图,二层转发不过网关我就不画了,直接来一个三层转发图。

这是一个简单的图,下面我来慢慢的一步步的写下步骤,假设我就去ping百度,一般现在看自己能不能上网不都是ping百度嘛。

1、首先客户端要对百度的域名进行解析才能获取到IP地址,才能进一步封装自己的ping包,所以他首先发到域名服务器(假设我配置的是114.114.114.114),等域名服务器帮我解析好以后,给了我百度的IP地址,220.181.57.216,那么这里,我要去域名服务器,我是怎么去的呢,当然首先查看路由表。

很明显,我没有直接去114.114.114.114的路由,所以我只能发给网关,也就是上图的192.168.0.1,由网关去处理(如果你不知道网关的mac,需要先发广播ARP给网关,拿到网关的mac来维护ARP表),之后网关把域名解析的结果返还给我,我就有了baidu的IP地址。

2、有了目的IP,客户端就准备封装报文,因为是三层转发,我不需要知道百度的mac地址,我只要知道网关的mac就行了,dmac=网关mac,dip=百度IP,直接发送ping包,由于网关的mac上面已经发送过一次ARP请求了,所有网关的ARP已经保存在客户端的ARP表了。

3、数据包到了网关,因为是到公网去,这里面的处理就不说了,用一条命令可以查看你的数据包经过了多少的跃点。

4、百度收到了我的ping包以后,于是如法炮制的获取它的网关ARP信息,再把封装好的icmp reply给我发了回来,等我的网关收到了这个reply以后,发现目的IP是我,通过路由直接转发给了我,这里整个过程就完成了。

Tips:对于过来的数据包,网关会自行学习数据包的源mac信息,维护自己的mac表和ARP表。

好了,如果ping不通,那么你想想有哪些原因呢,一步步地去检查,一步步地去抓包分析,你就能找到原因,ping不通,不用找房东,自己把网线捋一捋,不就通了啊。

关键字:

原创文章 企业网D1Net

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^