有,而且非常重要.當然這裡指的Cache通常不是CPU層面的Cache,而是buffer緩衝區.舉個例子,路由器的快取就像一個蓄水池,而網線是水管,當上游水源一股股(分組)過來,路由器的路由演算法就需要決定這股水流要從哪個水管出去,這就是基本的路由(Routing),不過問題就routing這個操作還是挺吃資源的,如果是軟路由,或者是硬體路由都需要Cache 去緩衝Routing Table然後交付給對應的網線。
但是比如說有個水管是負責出站口,而另外水管的水流都是會從這個水管出去,那麼這個時候就需要臨時的緩衝,緩衝池滿了,就意味著新來的水會被放掉(丟包),在TCP協議中下游監測到可能發生了丟包會告訴上游這個資訊,請求重傳,而上游的TCP協議棧收到重傳資訊之後就會乘性降低傳送速率(當然如果是BBR那種演算法會準確估算頻寬和延遲,不會因為隨便丟兩個包而大幅度降低速度)
但是有的時候回出現一種情況,比如一個包同時被預設路由,/24的路由,/16的路由和各種metric路由條目所匹配,那麼預設就是匹配最小subnet和最小metric的條目,這個問題就意味著當路由條目膨脹的時候匹配效率會低很多,這就意味著高速的查路由表很重要,而CPU的Cache結構,核心網路棧的設計對這種查表/快取處理並不友好。
路由器是有快取的!使用的時間長了,就會變慢就和我們平時長用的手機一樣!需要重啟路由器去一下快取,這樣路由器又會變的快一些!!
有,而且非常重要.當然這裡指的Cache通常不是CPU層面的Cache,而是buffer緩衝區.舉個例子,路由器的快取就像一個蓄水池,而網線是水管,當上游水源一股股(分組)過來,路由器的路由演算法就需要決定這股水流要從哪個水管出去,這就是基本的路由(Routing),不過問題就routing這個操作還是挺吃資源的,如果是軟路由,或者是硬體路由都需要Cache 去緩衝Routing Table然後交付給對應的網線。
但是比如說有個水管是負責出站口,而另外水管的水流都是會從這個水管出去,那麼這個時候就需要臨時的緩衝,緩衝池滿了,就意味著新來的水會被放掉(丟包),在TCP協議中下游監測到可能發生了丟包會告訴上游這個資訊,請求重傳,而上游的TCP協議棧收到重傳資訊之後就會乘性降低傳送速率(當然如果是BBR那種演算法會準確估算頻寬和延遲,不會因為隨便丟兩個包而大幅度降低速度)
但是有的時候回出現一種情況,比如一個包同時被預設路由,/24的路由,/16的路由和各種metric路由條目所匹配,那麼預設就是匹配最小subnet和最小metric的條目,這個問題就意味著當路由條目膨脹的時候匹配效率會低很多,這就意味著高速的查路由表很重要,而CPU的Cache結構,核心網路棧的設計對這種查表/快取處理並不友好。