RIP (Route Information Protocols) Introduction

介紹

  • 屬於 IGP (Interior gateway protocol) 之一
  • 屬於 Distance-Vector routing protocols 之一
    • 利用 hops count 做度量(metric)
    • 每經過一台 router, hops count ++
  • 採用 Shortest Path Problem 的 Bellman-Ford Algorithm 動畫展示
  • 可傳遞範圍至多 15 hops, 超過視為不可到達
  • 透過與 Neighbor 交換 routing table 進行更新
  • 共有 RIPv1, RIPv2, RIPng 詳細比較

Timer

  • Update timer
    • 每 30 秒 Broadcast 自己的 routing table
  • Invalid timer
    • 每 180 秒 若 Routing table 內的 Path 未被確認會被視為 Invalid, 且開始計算 holddown timer
    • Path 還存在 Routing table 內
  • Holddown timer
    • 當 Path 被判斷為 Invalid 時, 此時間內不再接收同一 dest source, 除非從其他 dest source 接收到更好的 path metric, 或直到 timer expiers 後, 才重新接收
  • Flush timer
    • 每 240 秒 若超過時間該 Path 會被 Flush
    • Path 不存在 Routing table 內

RIP loop prevention mechanism

  • Split Horizon

    • 保證 router 記住接收 Path 的 interface, 而不會再同一個 interface 發送它
  • Poison Reverse

    • 情境
      1. 當 hosts 與 R1 連線中斷時
      2. 因處於 Invalid time 180s, 故 R2 認為 hosts 至 R1 還存在連線
      3. 導致整個網路資料不正確, 有可能會有 loop 情形產生
    • Poison Reverse 做法
      1. 發現 hosts 至 R1 連線中斷
      2. R1 將此 Path metric 設為 16 (Hop count = Max + 1 ), 即為不可到達之狀態
      3. R1 發送 Routing update 至 R2
      4. R2 更新資料將該 Path 列為 Inaccessible
  • Trigger Update

    • Routing table 發生變化時, 無視 Update Timer, 透過 broadcast 直接發送 routeing update 至所有設備

不連續網路問題

  • 針對不同 Router 上同一 subnet 進行 summary, 雖會減少 Routing Table rule, 但卻會造成 Equal cost load balance 問題
  • 解法是 no auto-summary

NBMA (Non-Broadcast MultiAccess)

  • 有些設備不允許傳送 Broadcast 封包
  • 解法是指定某一個 Neighbor

Reference

Dynamic Routing Protocol

Overview

Reference:

編譯 OpenvSwitch v2.3.1 on Ubuntu 14.04.1 LTS

2014/12/3 推出 OpenvSwitch 2.3.1, 主要為 OpenvSwitch 2.3.0 fixed 一些 bugs

2014/8/14 OpenvSwitch 發出了 OpenvSwitch 2.3.0 新版本, 這是繼 1.9.0 之後最新的 LTS (Long-term Support), 也是第一版有支援 multithreading 及 megaflows 的 LTS 版本, 如果有在開發及研究的可以往 2.3.0 發展會是比較恰當的選擇

  • Linux kernel 支援到 3.14
    • Ubuntu 14.04.1 可以用了 大家不用再回頭找 12.04 舊版本的 iso 來使用了
  • 預設開啟 OpenFlow 1.1 1.2 1.3
  • 針對 Linux Kernel datapath megaflows 部分有做改善
  • 增加實驗性質的 DPDK 支援
    • 最近有個很出名的 vswitch project 就是用 Intel DPDK Lagopus
  • 對於 IPFIX (IP Flow Information Export) 新增了 SCTP 及 ICMPv4/v6 templates
  • 當 ovs-vswitchd fails 時, ovs-vsctl 要 add-port 或 add-br 現在會回報錯誤
    • 以前如果 ovs-vswitchd 沒正確開啟的話, 使用 ovs-vsctl 是還可以add的
  • 針對 Ryu 有特別寫了個 "check-ryu" 測試 ovs 與 Ryu 的功能, 喜愛 Ryu 的可以研究一下
  • 支援 custom vlog pattern (Python)

安裝步驟大致上跟 編譯 OpenvSwitch v2.1.2 on Ubuntu 12.04 LTS 一樣 但為求謹慎還是在寫個一篇紀錄

安裝過程

環境

  • OS: Ubuntu 14.04.1 Server LTS X86_64
  • Kernel version: 3.13.0-34-generic

預先安裝

aptitude install dh-autoreconf libssl-dev openssl

編譯 OpenvSwitch

wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
tar zxvf openvswitch-2.3.1.tar.gz && cd openvswitch-2.3.1
./boot.sh
./configure --with-linux=/lib/modules/`uname -r`/build
make -j && sudo make install
sudo make modules_install
sudo modprobe gre
sudo modprobe openvswitch
sudo modprobe libcrc32c
  • 使用 lsmod |grep openvswitch 確認ovs正確地掛載起來
  • ./configure 部份其實還可以下一個 --prefix= 參數, 可以讓openvswitch 完全裝在該目錄底下而不會亂掉

設定 ovsdb

ovsdb-tool create /usr/local/etc/openvswitch/conf.db /usr/local/share/openvswitch/vswitch.ovsschema
  • 建立一次即可, 如果設定有問題的話可以把conf.db砍掉重建

(二選一) 開啟 ovsdb-server (no ssl)

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach --log-file
  • cat /usr/local/var/log/openvswitch/ovsdb-server.log 可查到 ovsdb log

(二選一) 開啟 ovsdb-server (ssl)

ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--private-key=db:Open_vSwitch,SSL,private_key \
--certificate=db:Open_vSwitch,SSL,certificate \
--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
--pidfile --detach --log-file
  • 若要使用 ssl 連線, 務必在編譯前要先準備好 libssl-devopenssl, 否則會噴出 Private key specified but Open vSwitch was built without SSL support 的錯誤
  • OpenvSwitch Lab 6$ TLS SSL

開啟 ovs-vsctl

ovs-vsctl --no-wait init

開啟 ovs-switchd 功能

ovs-vswitchd --pidfile --detach --log-file
  • cat /usr/local/var/log/openvswitch/ovs−vswitchd.log 可查到 ovs-vswitchd log

開機自動化

設定開機自動 load module

echo "openvswitch " >> /etc/modules
echo "gre" >> /etc/modules
echo "libcrc32c" >> /etc/modules

設定開機自動啟動

  1. vim /etc/init.d/openvswitch
    #!/bin/sh
    start-stop-daemon -q -S -x /usr/local/sbin/ovsdb-server -- --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options --pidfile --detach --log-file
    sleep 3 # waiting ovsdb-server 
    start-stop-daemon -q -S -x /usr/local/bin/ovs-vsctl -- --no-wait init
    start-stop-daemon -q -S -x /usr/local/sbin/ovs-vswitchd -- --pidfile --detach --log-file
    
  2. chmod +x /etc/init.d/openvswitch
  3. update-rc.d -f openvswitch defaults

設定 interface

  1. ovs-vsctl add-br ovs-br
  2. vim /etc/network/interfaces
    # The loopback network interface
    auto lo
    iface lo inet loopback
    # The primary network interface
    auto eth0
    iface eth0 inet manual
    up ifconfig $IFACE 0.0.0.0 up
    down ifconfig $IFACE down
    # OpenvSwitch Interface
    auto ovs-br
    iface ovs-br inet static
    address x.x.x.x
    netmask 255.255.255.0
    gateway o.o.o.o
    dns-nameservers 168.95.1.1
    

修改 Failsafe

vim /etc/init/failsafe.conf

$PLYMOUTH message --text="Waiting for network configuration..." || :
sleep 1 
$PLYMOUTH message --text="Waiting up to 60 more seconds for network configuration..." || :
sleep 1 
$PLYMOUTH message --text="Booting system without full network configuration..." || :