Routing for Web Developer

Last renew: April 7, 2022 pm

注:本文仅为个人学习笔记,无任何版权。

在web开发过程中,经常会遇到“路由”(Routing)的概念。路由到底是什么?简单来说,路由就是URL到函数的映射。是用来跟后端服务器进行交互的一种方式,通过不同的路径来请求不同的资源,请求不同的页面。ネットワーク上でデータを転送する際、その経路を導き出すことをルーティングと呼びます。

The Flow Path of Routing

  1. 服务器发出请求。
  2. 服务器端监听到80端口(http)或者443端口(https)有请求,并且解析URL路径。
  3. 根据服务器的路由配置,返回相应信息(html / json / image)。
  4. 浏览器根据数据包的content-type来决定如何解析数据。

The Difference between Router and Route

route 就是一条路由,将一条URL路径与一个函数进行映射,例如

/users -> getAlUsers()

/users/count -> getUsersCount()

这就是两条路由,访问users时,将会执行getAllUsers()函数;当访问 /users/count时,会执行getUsersCount()函数

而router(路由器)可以理解为一个容器,或者说一种机制,他管理了一组route。route执行的过程是由router来处理的。”The router routes you to a route.”

The Route of Server

对于服务器来说,当接收到客户端发来的http请求,会根据请求的URL,来找到相应的映射函数,并且执行,将返回值发回客户端。

1
2
3
4
5
app.get('/', (req, res)=>{undefined

res.sendFile('index')

})
1
2
3
4
app.get('/users', (req,res)=>{undefined
db.queryAllUsers()
.then(data => res,send(data))
})

这里定义了两条路由,访问/时,会返回index界面;访问/users时,会从数据库中读取所有的用户数据并返回。

Dynamic Router と Static Router

Static Router

静态路由是由管理员手工配置的,简单直接,是什么就是什么。但缺点在于如果网络拓扑发生变化/故障时静态路由也得由管理员亲手修改。

举个例子来说,就像公交车一样,路线与停靠站都是决定好的,就算有近路或者路线被堵了也只能按照规定好的路线走。

对于家用路由器来说每个家用路由中都有一条设定好的默认路由。默认添加了一条指向wan口的默认路由。因为没有第二条路走所以大丈夫。

Dynamic Router

现在我们来到一座陌生的城市,我们用google map进行导航。这里面,googlemap其实分了两步操作。第一步手机会自动下载我们周围的道路信息,第二步是根据算法计算出一条最好的路径去目的地。

动态路由适合大型网络,不需要手动添加路由条目,方便管理。

就好比出租车,会抄近路,也可以看路况抄近路,出租车司机的路由表是随时更新的。动态路由的最大特点是路由器上运行路由协议,使路由器可以自动根据网络拓扑的变化调整路由条目。

动态路由的工作方式:第一步,路由器获得全网的拓扑,包含了所有路由器和路由器之间的链路信息,拓扑就是地图。

第二步,路由器在拓扑中计算出到达目的地网址的最优路径。

Pros and Cons

优点:静态路由:简单、高效、可靠、网络安全、转发效率高。

​ 动态路由:灵活,能够适应网络结构的变化,无需管理员手工维护,减轻了管理员的工作负担。

缺点:静态路由:不能灵活的适应网络动态变化

​ 动态路由:占用网络带宽。(用于传输路由更新信息)

使用场景:静态路由:网络规模不大,拓扑结构固定的网络中。

​ 动态路由:网络规模大,网络拓扑机构复杂的网络。