昨天讲 dns 时讲过,“你问一个当地人最近的厕所在哪,路人给你一个地址…”,可是只有地址还不够,如何到达那里呢?这是本节的内容。
自然的方式是,一边走一边问,根据路人的指示继续一边走一边问,这就是逐跳转发。问题的核心在于,当地为你指路的人如何知道到达目的地最短的路径。
这里面并没有什么高科技,我尝试从蜜蜂找花蜜来解释:
蜜蜂不停找距离蜂巢最近的花蜜,一旦找到就占作根据地,从而可嗅到其它距离更远的花蜜,这过程基本保证了蜜蜂每占领一块花丛,都是从最短距离逐步过来的,如果不是最短,蜜蜂肯定在更早时通过其它被占领的花蜜丛嗅到了。
不光蜜蜂采蜜,蚂蚁找食物,树根的生长,甚至包括侵略战争的以战养战策略,都遵循最短路径优先。特别是树根生长最具代表性,树根从近处吸取营养,为了从更远处吸取,它需要不断延伸生长,每延伸所到处,这就是根的一部分,作为继续感知更远处营养的前沿,最终的树根就是一棵最短路径树。
包括河流泛滥渗透在内,大自然中无论生物还是非生物,都遵循最小作用量原则,生物更是将其装备在了嗅觉,触觉等感知器官上,不停地自动计划着最短路径优先的生命调度。
这确实没什么大不了的,只是为了将其在更狭窄的工业领域运用,人们将其抽象成固定步骤的算法以便实际操作,狄杰斯特拉算法就算其一。
互联网的连通性便构建在这个最短路径优先算法之上,dns 指路,spf(即:最短路径优先) 寻址,因此我觉得这个也比较核心,就安排在第二讲。
我问孩子们,这个算法有问题吗?
…
将所有过境流量引入同一条最短路径,势必会造成拥堵,度量为 11 和度量为 12 相差不几的两条路径在数值上显然并不等价,但在自然的情况下,两者显然可以分担流量。
女儿提出不停递增一条路径的度量,直到它过大时,流量就会自动被调度走,好像是这么一回事,但我反问,这样的话流量岂不是会在不同路径乒乓颠簸吗,此外,路由器需要不停重新计算最短路径,仅这些流量就非常可观了
为什么不能在两条不等价但差不多的路径上做加权负载均衡呢?比如总流量 11/(11+12) 的流量走路径 1,12/(11+12) 走路径 2?
如果一列婚车车队在一个十字路口被拆散驶入两条道路,这合适吗?当然,这对交通状况的改善肯定没问题,信号灯看不懂车队,但对婚礼当事人却并不友好,如何做才能让各方满意?这是明天第三课的内容。
总之,最短路径优先依然是高效连通性的根本,作为一个贪心策略可以获得全局最优解,背后还是最小作用量在起作用,如果仅从数学归纳法来看其正确性,可能并不高雅,但考虑到它的物理意义,就非常精美了。
回到最初的蜜蜂找花蜜丛,不是蜜蜂的聪明才智起了作用,而是花蜜散发的信息素被距离越近的蜜蜂感知越强烈,同时蜜蜂之间会进行信息传递,此二者就是最短路径优先的保证,关键就是信息的传递,这得益于蜜蜂和花都在这个最小作用量的世界进化了千万年,一切完美适应最小作用量。考虑网络中的最短路径优先实例的狄杰斯特拉算法,“信息素被距离越近的蜜蜂感知越强烈” 表现为路径度量的松弛操作,这就是算法的全部。
浙江温州皮鞋湿,下雨进水不会胖。