ネットワーク学習帳

ネットワークに関して学んだことを記録していきます。継続こそが力なり。

QoS

概要

  • Quality of Service、直訳するとサービスの品質という意味だが、ユーザやアプリケーションが一定の通信速度で通信できるようにする技術を指す言葉として一般的には使われる。
  • 90年代のQoSVoIP(Voice over IP)通信の音声品質確保を目的とした話が多かった。
  • 2000年代になりブロードバンドが普及すると、ビデオ会議の品質や無線通信の品質を語る時にもQoSという用語が使われるようになった。
    そのため、物理レベル、リンクレベル、ネットワークレベル、エンドツーエンドレベル、アプリケーションレベル、ユーザーレベルなど様々なレベルのQoS技術が存在するため、QoSという言葉が出てきたときにはどのレイヤーの話なのかを慎重に見極める必要がある。

 

QoSを実現する技術と実現例

  • QoSは「通信速度を上げる技術」ではなく「通信負荷が高い状態でも一定の通信品質を確保する技術」なので、QoS技術=ボトルネックになる箇所に対する施策と言える。
  • クラス分け、ポリシング、マーキング、キューイング、シェーピング、往復遅延時間を考慮した再送などの方式を組み合わせて実現していることが多い。
  • ルーターテレビ会議データリンク層以上のレイヤーで実現する技術がほとんどだが、VoLTEのように品質のほとんどが物理層(無線通信)で決まってしまうようなケースもある。

 

 

 

 

OSI基本参照モデル

概要

  • コンピュータ間の通信をする際に必要な機能を整理し階層構造で示したもの。
  • OSI準拠製品用の参照モデルなので、通信プロトコル自体がこのモデルを準拠する必要はない。インターネットプロトコルスイート(TCP/IP)も準拠していない。
  • 知識としては整理されているので、ネットワークを勉強するにあたっては誰もが一度は学ぶことになる。

歴史

  • 1977年3月にISOの委員会が設置され、策定が始まった。当時はメーカーごとに独自のコンピュータ間通信仕様が乱立していて互いに通信することが難しく、標準的なOpen System Interface を作成する機運が高まったことが策定の背景だったとのこと。
  • 最終的にはISO7948として規格化されたが、複雑すぎて実装が難しかったり、OSI標準化プロセスがNIH(Not Invented Here)症候群に陥ってIETFと亀裂が生じたり、その間にTCP/IPの製品が普及してしまったりといった事情により、対応製品は普及しなかった。1996年には委員会も解散した。

各レイヤーについて

第1層:物理層

  • メディアタイプ、コネクタタイプ、シグナリングタイプを定義する。
  • 通信媒体の例としては、金属線(電圧の変化を利用して信号を伝える)、光ファイバー(光の明滅で信号を伝える)、無線(電波や赤外線で信号を伝える)などがある。金属線は環境や材質の影響で長距離伝送が難しい(増幅器が必要)、光ファイバはガラス繊維のため施工が難しく金属より効果、無線は電波状況や障害物の影響を受ける等の短所があるので、要件に応じて使い分ける必要がある。
  • このレイヤーの機器としてはリピータ(受信した信号を整形、増幅して中継・転送する機器)や、ハブ(受信した電気信号をそのまま増幅し、受信したポート以外の全ポートに送り出す機器)がある。

第2層:データリンク層

  • 物理的に直接接続されたノード間でデータをやり取りする方法を定義する。同じスイッチングハブに接続されている端末同士の通信がこのレイヤーの範疇であり、この範囲がLAN(Local Area Network)である。
  • Ethernetではこのレイヤーは下記の2つの層に分けられる。
  • MAC副層(IEEE802.3)は、物理層を使用してフレームを転送する方法を定義している。パケットの構造としては、送信先のMACアドレス、送信元のMACアドレス、フレーム長、データ、FCSが含まれる。
  • LLC副層(IEEE802.2)は、論理的なアドレスの割り当てやエラーチェック(ビットチェック)を定義している。LLCヘッダはMAC副層のパケットでいうとデータの部分に含まれる。
  • このレイヤーの機器としてはブリッジがある。リピータは電気信号を中継・転送するだけだが、ブリッジはデータを転送し、異常なデータは転送しない。

第3層:ネットワーク層

  • 様々なアクセス方式を使用しているLAN同士の接続方式、通信相手までの経路選択(ルーティング)とデータ中継(バケツリレーのようなパケット交換)を定義する。End-to-Endのパケット配送の責任を持つ。
  • このレイヤーの代表的なプロトコルにIP(Internet Protocol)がある。
  • このレイヤーの機器としてはルーター(LAN間接続装置)がある。

第4層:トランスポート層

  • データの信頼性の保証について定義する。
  • 仮想的な回線機能の提供、誤り訂正や再送、フロー制御などもこの層で提供される。
  • このレイヤーの機器としては、プロトコルを変換する装置であるゲートウェイがある。アプリケーション層で動く機器やルータをゲートウェイと呼ぶこともあるが、情報処理試験的にはトランスポート層の機器と覚えておいたほうがいい

第5層:セッション層

  • トランスポート層の仮想的な回線で、使用開始から使用終了までの一連の通信(セッション)を定義する。
  • 送受信の同期管理機能もこのレイヤーに含まれる。

第6層:プレゼンテーション層

  • ネットワークを流れるデータの意味を定義する。ハードウェアやOSによって異なるコード(符号)を統一したコードに変換し、アプリケーション間で意味を統一する。
  • コードの変換以外にも、データの暗号化や圧縮機能もこのレイヤーに含まれる。

第7層:アプリケーション層

  •  ファイル転送、メッセージ送信など具体的な通信サービスを定義する。

その他(ジョーク)

  • 第8層:ユーザー層(ネットワークを使う人の事情を定義)
  • 第9層:財務層(ネットワークを使う人の金銭的事情を定義)
  • 第10層:政治層/宗教層(ネットワークを使う人の信じることを定義)

 

WebRTC

WebRTCの歴史

  • ブラウザ上でReal Time Communicationを実現するために作られたフレームワーク
  • SIPを作ったJonathan Rosenbergが、SIPの失敗を元に考えた思想がベースになっている。端末-サーバ間やサーバ同士の通信プロトコルをガチガチに固めすぎて柔軟性が無く、策定にも時間がかかり、関連RFCも100を超えたためSIP対応と謳っていても「どこまでのSIPをサポートしていますか?」と聞く有様だったので、どんな環境でも通信できるHTTPを使ってアプリをダウンロードし、アプリの実装でシグナリングプロトコルを決められるようにしたのがWebRTCの思想。
  • GoogleとEricssonが主導して標準化と実装を進め、OpenSourceとして公開されている。
  • パソコン/Android版のChromeFirefoxOperaで実装されている。ずっと未サポートだったIEも2014年10月に ORTC API for WebRTC の実装を表明した。

 

WebRTCの構成要素(≒APIの種類)

  • Media Stream
     カメラ・マイクなどの入力デバイスからストリームを取得する。
  • RTC Peer Connetion
     NAT/Firewallを超えてP2Pを実現する。
  • RTC Data Channel
     P2Pで汎用データをトランスポートする。

 

WebRTCのアーキテクチャ

f:id:wingbeats:20150106235214p:plain

参考:http://www.webrtc.org/architecture 

WebRTCのプロトコルスタック

f:id:wingbeats:20150106235351p:plain

 

DTLS/SRTP/SCTP について

 DTLS (Datagram Transport Layer Security)

  • UDPでは許容されているパケットロスがTLSでは許容されていない。これを防ぐために内部でシーケンス番号とフラグメントオフセット、タイムアウト、再送の仕組みを提供している。TCPに近い仕組み。

  • WebRTCではUDP通信の暗号化のために公開鍵をサーバから取得するので、UDPのパケットロスによって公開鍵の取得を失敗しないためという目的もある。

SRTP (Secure Realtime Transport Protocol)

  • 映像音声をリアルタイムに送受信するプロトコルRTPはUDPにタイムスタンプ、シーケンス番号を不可しただけだが、SRTPではペイロード部を暗号化する。暗号化に使う鍵はDTLSで取得する。

SCTP (Stream Control Transmission Protocol)

  • 元はVoIP用に開発されたプロトコル。高次の信頼性と速度が求められていたこともあり、TCPUDPで差がある到達保証、順序保証、フロー/輻輳制御、マルチストリームを両方サポートしている(選べる)。

 

RTP Peer Connection

※ 前述の通り、以下のシグナリングはWebRTCのスコープ外です。
  WebRTCのP2P接続ではアプリケーションが下記のトランスポートとプロトコルを選択して使うのが一般的という話です。

SDP (Session Description Protocol)

  • P2Pで接続するメディアの種類(音声、映像)やメディアの形式(コーデック)、転送プロトコル、自身のIPアドレスUDPポート番号等を記した文字列を、P2P接続するブラウザ同士で交換するセッション記述用プトロコル。
  • 呼び出し元がシグナリングサーバを介してSDPをOfferし、呼ばれる側がシグナリングサーバを介してSDPをAnswerする。
  • SDPは一部変わっただけでも全ての情報を送らなければならず、主に性能面が問題視されている。仕様が分かりづらいという面もあるらしい。SDPの情報の一部を送れるようにしたTrickle-ICEやSDPを使わないORTCが最近出てきている。

ICE (Interactive Connectivity Establishment)

  • P2Pで接続するブラウザの通信経路を示した文字列(ICE Candiddate)を交換し、ネットワーク的に最短の通信経路上にP2P接続を確立する。
  • まず同一NAT下にある可能性を考慮し、直接クライアント同士のP2P接続を試みる。
  • 次に外部のSTUNサーバを用いて外部から見たIPアドレスとポートによるP2P接続を試みる。
  • それでも接続できなかった場合はTURNサーバを経由した接続を試みる。

STUN (Simple Traversal of UDP through NATs)

TURN (Traversal Using Relay NAT)

  • 多段NAT等のSTUNで解決できない経路の場合は、TURNサーバがUDPパケットをRelayする。
  • サーバに負荷がかかり、オーバーヘッドも大きくなるため、P2Pのメリットが無くなる。

クラウドサービス

クラウドサービスの種類

クラウドサービスには主に下記の3種類がある。

  • SaaS (Software as a Service)
  • PaaS (Platform as a Service)
  • IaaS (Infrastructure as a Service)

f:id:wingbeats:20150106000758p:plain

 

SaaS

  • 必要な機能を必要な分だけインターネット経由で利用できるようにしたソフトウェア。シングルシステム・マルチテナント方式で提供されるものを指す。
  • ASP(Application Service Provider)の進化したものとも言える。
  • SaaS」はSalesforce.com社が1999年に提唱した。Salesforce.com社はCRMによって提供されることが多かったパッケージをSaaSで提供するようになったSaaS専業ベンダー。
  • 日本では2009年頃からASP事業者が呼称をASPSaaSへ変え始めた。
  • 従来のASPとの違いは、Ajax等のWeb2.0技術によるUIの進化、ネットワークの高速化、マルチテナント技術、ユーザーカスタマイズサービス、機器の進化によるサービスの性能向上などが挙げられる。
  • SaaS(Software as a Service)は”サース”と発音するのが一般的。

PaaS

  • Salesforce.com社が2007年に提唱。従来から同社が提供していたSaaSの構成要素をPlatformサービスとして提供することにより、ユーザーがサービス構築をできる利用形態にしたもの。Salesforceのプラットフォーム部分であるDB、ロジック、ワークフロー、API構造はほとんどのアプリケーションの構成要素になる。
  • PaaSを使うと従来システム化できなかったようなロングテール的なニーズに応えられる。Web2.0がコンテンツの主導権がユーザーに渡ったものとすれば、PaaSはエンタープライズ2.0とも言える。
  • 仮想化技術を使っているだけのIaaSに比べると、スケーラビリティや生産性の面で開発者の負荷を減らしている。ミドルウェアまで提供されている反面、開発言語は限定される。
  • PaaS(Platform as a Service)は”パース”または”パーズ”と呼ぶのが一般的。

IaaS

  • 2006年後半にSavvis、BlueLock、ZDNet、Tier3などがIaaSと言い始めた。2006/3にHaaSという言葉をエコノミストのNicholas Carrが使ったが、あまり普及しなかった。
  • 仮想化されたコンピュータ基盤を、インターネット経由のサービスとして提供するもの。サーバやソフトウェアやデータセンターのスペースを自分で購入する代わりに、アウトソースされたサービスとして購入する。利用レベルに応じた従量制で課金される。ウェブホスティングやサーバ仮想化の進化系。
  • 開発者は好きなOS、ミドルウェアをインストールし、アプリケーションを開発できるが、スケーリングは開発者自らが検討する必要がある。
  • IaaS(Infrastructure as a Service)は”イアース”または”アイアス”と呼ぶのが一般的。

 

ネットワークの勉強ブログを始めます

2015年あけましておめでとうございます。

SNSでないところにブログを書くのはいつ以来か分からないくらいですが、久しぶりにテーマに沿ったブログを書くことにしました。

個人的に今年はネットワークの知識を深めたいと考えています。しかし経験上ただ勉強しただけではどんどん忘れていくので、学んだことを使う場としてこのはてなブログの日記を使いたいと考えています。

仕事で忙しい日も多いことが予想されますが、できるだけ毎日更新できるよう頑張ります。