从计算机知识到落地能力,你欠缺了什么?

作者:媒体转发 时间:2018-08-09 16:46

字号
技术沙龙 | 8月25日与多位资深技术大咖探讨小程序电商实战

从计算机知识到落地能力,你欠缺了什么?

大学学到的基本概念

我相信你脑子里关于网络基础知识的概念都在下面这张图中。知识内容有点乱,感觉都认识,又都模模糊糊,更谈不上将内容转化成生产力或是用来解决实际问题了。这是因为知识没有贯通、没有实践、没有组织。

从计算机知识到落地能力,你欠缺了什么?

上图中知识点的作用在RFC1180[1]中讲得无比通俗易懂了。看第一遍的时候也许你就看懂了,但是一个月后又忘记了。其实这些东西我们在大学也学过,但还是忘了(能够理解,缺少实操环境和条件),或者碰到问题才发现之前看懂了的东西其实没懂。

所以接下来我们将示范书本知识到实践的贯通过程,希望把网络概念之间的联系通过实践来组织起来。

还是从一个问题入手

最近的环境碰到一个网络ping不通的问题,当时的网络链路是(大概是这样,略有简化):

现象

从容器1 ping 物理机2 不通;

从物理机1上的容器2 ping物理机2 通;

同时发现即使是通的,有的容器 ping物理机1只需要0.1ms,有的容器需要200ms以上(都在同一个物理机上),不合理;

所有容器 ping 其它外网IP(比如百度)反而是通的。

这个问题扯了一周才解决是因为容器的网络是我们自己配置的,交换机我们没有权限接触,由客户配置。出问题的时候都会觉得自己没问题对方有问题,另外就是对网络基本知识认识不够,所以都觉得自己没问题而不去找证据。

这个问题的答案在大家看完本文的基础知识后会总结出来。

解决这个问题前大家先想想,假如有个面试题是:输入 ping IP 后敲回车,然后发生了什么?

复习一下大学课本中的知识点

要解决一个问题你首先要有基础知识,在知识欠缺的情况下就算逻辑再好、思路再清晰、智商再高,也不一定有效。

route 路由表

从计算机知识到落地能力,你欠缺了什么?

假如你在这台机器上ping 172.17.0.2 ,根据上面的route表得出 172.17.0.2这个IP符合下面这条路由:

这条路由规则,那么ping 包会从docker0这张网卡发出去。

但是如果是ping 1.1.4.4 根据路由规则就应该走eth0这张网卡而不是docker0了。接下来就要判断目标IP是否在同一个子网了。

ifconfig

首先来看看这台机器的网卡情况:

从计算机知识到落地能力,你欠缺了什么?

这里有三个网卡和三个IP,三个子网掩码(netmask)。根据目标路由走哪张网卡,得到这个网卡的子网掩码,来计算目标IP是否在这个子网内。

arp协议

网络包在物理层传输的时候依赖的mac 地址而不是上面的IP地址,也就是根据mac地址来决定把包发到哪里去。

arp协议就是查询某个IP地址的mac地址是多少,由于这种对应关系一般不太变化,所以每个os都有一份arp缓存(一般15分钟过期),也可以手工清理,下面是arp缓存的内容:

从计算机知识到落地能力,你欠缺了什么?

进入正题,回车后发生什么?

有了上面的基础知识打底,我们来思考一下 ping IP 到底发生了什么。

首先 OS 的协议栈需要把ping命令封成一个icmp包,要填上包头(包括src-IP、mac地址),那么OS先根据目标IP和本机的route规则计算使用哪个interface(网卡),确定了路由也就基本上知道发送包的src-ip和src-mac了。每条路由规则基本都包含目标IP范围、网关、MAC地址、网卡这样几个基本元素。

如果目标IP和本机使用的IP在同一子网

如果目标IP和本机IP是同一个子网(根据本机ifconfig上的每个网卡的netmask来判断是否是同一个子网——知识点:子网掩码的作用),并且本机arp缓存没有这条IP对应的mac记录,那么给整个子网的所有机器广播发送一个 arp查询,比如我ping 1.1.3.42,然后tcpdump抓包首先看到的是一个arp请求:

从计算机知识到落地能力,你欠缺了什么?

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
关键词 >>计算机 知识 能力
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接