Cisco Internetworking Operating System

Cisco Internetworking Operating System (Cisco IOS) は、シスコシステムズ製のほとんどのルーターとスイッチで使用されているソフトウェアである。William Yeagerによって開発された。

**概要**
Cisco IOSは、マルチタスクオペレーティングシステム (OS) と統合されたルーティングスイッチングインターネットワーキングおよびテレコミュニケーション機能のパッケージである。コマンドラインインターフェース (CLI) を有しており、他社のネットワーク製品もCisco IOSを模倣しているため、同じコマンドが実行可能である場合が多い。使用可能なコマンドは、CLIの「モード」と権限レベルによって決定される。「グローバルコンフィグレーションモード」であれば、システム全体の設定を変更するコマンドを実行できるが、「インターフェイスコンフィグレーションモード」では、インターフェイスの設定を変更するコマンドを実行できる。すべてのコマンドは0から15までの権限レベルを割り当てられており、ユーザーは自分の持つ権限レベルに応じてコマンドを実行することができる。

**バージョニング**
Cisco IOSは3つの数字といくつかの文字によってa.b(c.d)eという形式でバージョニングされる。
*aはメジャーバージョン番号である。
*bはマイナーバージョン番号である。
*cはリリース番号である。同じa.bの組み合わせの中で新しいリリースがある際に増える。
*d（一般的なリリースからは省略される）は暫定的なビルドの番号である。
*e（0 - 2個の文字）はリリースされたトレインの識別子である。なし（下記のメインラインであることを明示）、T（テクノロジー用）、E（企業用）、S（サービスプロバイダ用）、XA（臨時機能のためのもの）、XB（別の臨時機能のためのもの）等。
例えば、リリース12.3(1)はバージョン12.3における最初のCisco IOSのメインラインのリリースである。12.3(2)は次のリリースであり以下同様である。12.3(1)TはTトレインの最初のリリースであり12.3(2)Tはその次であり以下同様である。暫定的なビルドは次のリリースの候補であり、次のリリースが入手可能になる前にバグを修正するより早い方法として、シスコのサポートによって頻繁に入手可能となる。例えば、12.3(1.2)Tはリリース12.3(1)Tに対応する2回目の暫定的なビルドである。
リビルド - しばしば、与えられたIOSのバージョンの、単一の問題または脆弱性を解決するためにリビルドが作られる。例えば、12.1(8)E14は12.1(8)Eの14個目のリビルドである。リビルドは迅速に欠陥を修理するため、また重大なインフラストラクチャーを運営しており、変化とリスクを最小化したいためメジャーバージョンのアップグレードを望まない顧客のために提供される。
暫定的なリリース - 週単位で生み出され、現在の開発の成果で構成される。シスコの報告ウェブサイトでは、関連した問題を修正するために複数の暫定的なリリースがリストされるかもしれない（この理由は一般には未知である）。
メンテナンスリリース - 性能向上とバグ修正を含む厳しく修正されたりリース。シスコはリビルドおよび暫定的なリリースの上にある、可能な限りのメンテナンスリリースにアップデートするよう薦める。

**トレイン**
Cisco IOSは違う機能のセットを含む、いくつかの「トレイン」に分けられる。トレインはシスコがターゲットとしている顧客の別市場とグループに多少対応する。
*メインライントレインはシスコが提供できる最も安定したリリースであるようにデザインされ、ライフタイムの間決して機能セットは拡張されない。アップデートは製品中のバグに対処するためだけにリリースされる。直前のTトレインはメインライントレインの基礎となる。例えば12.1Tは12.2の基礎となる。よって、あるメインライントレインのリリースで利用可能な機能を調べる際には、直前のTトレインを見るとよい。
*T - テクノロジートレイン。そのライフタイムの間新しい機能とバグの修正を得る。よって、メインラインほど安定しない。（12.0より古いIOSでは、Pトレインがテクノロジートレインとして役立っていた。）シスコはあるTトレインの新しい機能を実装する緊急性がない場合における生産現場でのTトレインの使用を推奨しない。
*S - サービスプロバイダトレイン。ある会社のコアルータ製品のみに対応し、サービスプロバイダの顧客のために大きくカスタマイズされる。
*E - エンタープライズトレイン。企業における実装のためにカスタマイズされる。
*B - ブロードバンドトレイン。インターネットベースのブロードバンド機能をサポートしている。
*XA、XB、… - 文書化される必要のある特別な機能のトレイン。
時々、特定のニーズに対応するために別のトレインがリリースされる。例えば、12.0AAトレインはCisco AS5800のために必要な新しいコードが含まれている。

**パッケージング・機能セット**
ほとんどのIOSを動作させるシスコの製品は1個以上の「機能セット」もしくは「パッケージ」を持っている。典型的にはシスコ製ルーターのための8つのパッケージと、シスコ製スイッチングハブのための5つのパッケージが存在する。例えば、Catalystスイッチでの使用を意図しているCisco IOSのリリースは、「標準」バージョン（基本的なIPルーティングのみのサポート）、「強化」バージョン（完全なIPv4ルーティングのサポート）、および「高度なIPサービス」バージョン（強化された機能とIPv6のサポート）が利用可能である。
各パッケージは以下のようなのサービスカテゴリーに対応する。
*IPデータ
*集中した音声とデータ
*セキュリティとVirtual Private Network

**アーキテクチャ**
すべてのIOSにおいて、ルーティングとパケット転送（LANスイッチング）は別々の機能である。ルーティングなどのプロトコルはCisco IOSのプロセスとして動作し、ルーティング情報ベース (RIB) に貢献する。RIBはルーターの転送機能が使用する最終的なIP転送テーブル (FIB, Forwarding Information Base) を作るために処理される。ソフトウェアのみのよる転送機能を持つルーター（例:Cisco 7200）において、アクセス制御リストによるフィルタリングと転送を含むほとんどのトラフィックは、
Cisco Express Forwarding (CEF)もしくはdCEF（配布されたCEF）によって割り込みレベルで行われる。これによって、IOSはパケットを転送するためにプロセスコンテキストスイッチを用いる必要がない。Open Shortest Path FirstやBorder Gateway Protocolのようなルーティング機能はプロセスレベルで動作する。Cisco 12000シリーズのようなハードウェアベースの転送を行うルーターの場合、IOSはソフトウェアでFIBを作り、実際のパケットを転送する機能を実行するハードウェア（ASIC、ネットワークプロセッサなど）にロードする。
Cisco IOSは「モノリシック」な（いわゆる「モノリシックカーネル」ということではなく、システム全体が一つのイメージとして動作し、すべてのプロセスが同じメモリ空間を共用する）アーキテクチャを持っている。プロセス間のメモリの保護は存在しない。したがって、IOSのコード内のバグが、ほかのプロセスが使用しているデータを破壊しうる。
（旧）IOS は、run to completionスケジューラを持っているので、カーネルは動作しているプロセスからプリエンプトしない。他のプロセスが動作するチャンスを得る前提として、実行中のプロセスがカーネルを呼ばねばならない。
CRS-1などの非常に高い稼働性を必要とするシスコ製品にとって、この制限は容認できなかった。加えて、ジュニパーネットワークスのJUNOSのような競合するルーターのOSは、そのような制限がないようにデザインされた。シスコの反応は、モジュール性とプロセス間のメモリーの保護、スレッドの軽さ、割り込みのスケジューリング、および失敗したプロセスの独立した再スタートの機能を提供するIOS XRと呼ばれる新しいCisco IOSの開発であった。IOS XRはQNXのマイクロカーネルを使用し、現在のIOSのコードの大部分は、新しいカーネルによって提供される機能を利用するために書き換えられている。
マイクロカーネルアーキテクチャは、カーネル中で動作することが絶対に必要ではないすべてのプロセスをカーネルから取り除き、アプリケーションのプロセスに類似したプロセスとして実行する。その方法を通じて、IOS XRは新しいルーターのプラットフォームのための高い稼動性を達成することができる。よって、IOSとIOS XRは機能とデザインにおいて関連するが、大きく異なるコードベースである。2005年、シスコはCisco 12000シリーズでIOS XRを導入し、マイクロカーネルアーキテクチャをCRS-1からシスコの広く展開されたコアルーターに拡張した。
2006年、シスコはQNXマイクロカーネル環境をより伝統的なIOSの環境に拡張するIOS Software Modularityを入手可能にしたが、まだ顧客が要求しているソフトウェアアップグレード機能を提供している。それはCatalyst6500で入手可能である。

**セキュリティと脆弱性**
Cisco IOSには、Unixを通常の形で利用したシステムにあるような、カーネルと比べて権限の制限されたユーザプロセスとしてプロセスを実行することによるセキュリティがない。これは、ちょっとしたバグによって起きるバッファオーバーランなどが、即、Unixでいうところの「root権限による任意コード実行」に相当する危険なセキュリティホールにつながる、ということを意味する。
互換性のために保持されているレガシーCLIの、Router(config)#username jdoe password 7 0832585B1910010713181Fのような、Type 7ハッシュ値としてCLI上で暗号化されたパスワードは、1995年以降入手可能な「getpass」と呼ばれるソフトウェアを使って、容易に突破できる。上記の例は「stupidpass」と解読される。これは古いニュースであるが、現在でもこれらの弱いハッシュは使用されている。getpassは、Type 5パスワードや、enable secretコマンドで設定されたMD5で処理されたパスワードは突破できない。
注:シスコは、すべてのCisco IOS機器が認証 (authentication)、認可 (authorization)、アカウンティング (accounting) によるセキュリティモデル (AAA) を実装するよう薦めている。AAAはローカル、RADIUSおよびTACACS+データベースを使用することができる。

**IOSの後継**
ルーターやスイッチに搭載されるIOSの後継となるネットワークOSには以下がある。これらはネットワーク機器の機能拡張が含まれている。
*IOS-XR
*IOS-XE

**脚注**

**文献**
 『インサイドCisco IOSアーキテクチャ - Ciscoルータ内部の動作を理解するための手引き』ISBN 978-4-7973-1726-8

**外部リンク**
  ネットワーキング ソフトウェア（IOS と NX-OS） - Cisco