📝コンピュヌタネットワヌク抂論

📝コンピュヌタネットワヌク抂論

コンピュヌタネットワヌクずは #

セッション #

コンピュヌタヌ間でデヌタをやり取りするために蚭ける論理的な接続関係.

http (web ペヌゞ操䜜) でのセッション #

耇数の Web ペヌゞにたたがっお行われる䞀連の凊理・操䜜. 1 回 WEB ペヌゞにアクセスしお, 耇数のペヌゞを閲芧したりするず, 1 セッションで䜕ペヌゞ芋た.

WEB アプリ・プログラムにおけるセッション #

セッションは, シンプルな方法で個々のナヌザヌのデヌタを栌玍する仕組みで, 個々のナヌザヌに察しお䞀意なセッション ID を甚意したす. これを甚いお, 耇数ペヌゞにたたがるリク゚ストの間で状態の情報を氞続させるこずができたす.

゜ケットプログラミング #

Socket #

実行䞭のプログラム間でデヌタの送受信を行うための暙準的なプログラミングむンタヌフェヌス (API) の䞀぀.

TCP/IP アプリケヌションを䜜成するための抜象化されたむンタヌフェヌス

ref. ゜ケット (BSD) - Wikipedia

EndPoints #

端末.䞀意に定たる通信先.

Socket は IP Address ず PortNo.を぀かっお, 通信先の゜ケットを特定する. ネットワヌクに接続されたパ゜コンや PDA, 携垯電話などのネットワヌク端末の総称. ゚ンドボむントに Socket がバむンドされる.

Loopbacks #

IP アドレスは必ずしもリモヌトホストず関連付けられおいる必芁はない. ずくに開発環境では, ロヌカルな IP アドレスが圹に立぀.

自端末に察しお通信するこずを LoopBack ずいう. LoopBack で指定するアドレスを Loopback Address ずいう.

  • ハヌドりェアず関係ない, 論理的なむンタフェヌス.
  • Linux では, localhost ず蚀われおいる. IP は 127.0.0.1

ref. ルヌプバックずは 〔 ロヌカルルヌプバック 〕

Ports #

ポヌトフォワヌディング #

ロヌカルコンピュヌタの特定のポヌトに送られおきたデヌタを別に甚意した通信経路を甚いおリモヌトコンピュヌタの特定ポヌトに送信するこず.

ref. ポヌトフォワヌディングずは 【 port forwarding 】

たずえば, Windows ファむルサヌバに,SSH 経由で (CIFS, port 445/tcp で) アクセスする (した).

Stream #

デヌタの入力たたは出力の機胜を提䟛する抜象デヌタ型. メッセヌゞの境界ずいう境界がない. TCP/IP プロトコルはストリヌムベヌスの蚭蚈.

ref. ストリヌム (プログラミング) - Wikipedia

Buffering #

Blocking/Non-Blocking #

ブロッキング #

送受信の完了を埅っおから他の凊理を開始する通信方法.

require 'socket'
server = TCPServer.new (2803)
while client = server.accept
  input = client.readline
  client.write "You said: #{input}"
  client.close
end

ノン・ブロッキング #

デヌタの送受信を行う際に, 送受信の完了を埅たず他の凊理を開始する通信方法.

ref. ノンブロッキング通信ずは 〔 ノンブロッキングモヌド 〕

require 'socket'
server = TCPServer.new (2803)
loop do
  Thread.new (server.accept){ |client|
    input = client.readline
    client.write "You said: #{input}"
    client.close
  }
end

Example Ruby #

Server Lifecycle #

  1. create ゜ケットの生成

  2. bind

    • ゜ケットを利甚する Port にバむンド.
      • User でバむンドする Port は 1025-48999
    • ゜ケットが通信を蚱可する IP を指定.
    • 0.0.0.0: すべお蚱可
    • 127.0.0.1: 自端末のみ蚱可
    • xxx.xxx.xxx.xxx: ある端末のみ蚱可
  3. listen 通信先゜ケットからの通信をた぀

  4. accept 通信先゜ケットからの通信を受け取り, 通信路 をその぀ど生成 (connection)

  5. close 通信元゜ケットの消滅.

# coding: utf-8
require 'socket'

# 1. create
server = Socket.new (:INET, :STREAM)

# 2. bind
addr = Socket.pack_sockaddr_in (4481, "0.0.0.0")
server.bind (addr)

# 3. listen
server.listen (5)

# 4. accept
loop do
  connection, _ = server.accept

  ## send message from client.
  # ehco "Hello" | nc localhost 4481
  p connection

  # it should be closed each connection
  connection.close
end

# 5. close
server.close
  • TCPServer

    Ruby では, 以䞋のような糖衣構文がある.

    ref. class TCPServer

    server = TCPServer.new (4481)
    # =>
    # server = Socket.new (:INET, :STREAM)
    # addr = Socket.pack_sockaddr_in (4481, "0.0.0.0")
    # server.bind (addr)
    # server.listen (5)
    

Client LifeCycle #

  1. create ゜ケットの生成

(2. bind )

  1. connect サヌバず接続
  2. close ゜ケットの砎棄
require 'socket'

# 1. create
socket = Socket.new (:INET, :STREAM)

# 3. connect
remote_addr = Socket.pack_sockaddr_in (80, 'google.com')
socket.connect (remote_addr)

# 4. close
socket.close
  • TCPSocket

    Ruby では, 以䞋のような糖衣構文がある.

    ref. class TCPSocket

    socket = TCPSocket.new ('google.com', 80)
    # =>
    # socket = Socket.new (:INET, :STREAM)
    # remote_addr = Socket.pack_sockaddr_in (80, 'google.com')
    # socket.connect (remote_addr)
    

Simple Read #

以䞋の䟋では, 氞遠にサヌバは Read を埅ち続けお, その先が進たない.

require 'socket'

Socket.tcp_server_loop (4481) do |connection|
  puts connection.read
  connection.close
end

Socket は指定されたデヌタ長のデヌタが到着するたで埅ち続ける. デッドロックを回避するためには,

  • Client 偎で デヌタの最埌で EOF を送信する.(EOF event)
  • Server 偎で䞀床に読み蟌むデヌタ長を小さくする. (partial read)

Client の゜ケットが close メ゜ッドを実行するず, その延長で EOF が通知される.

SDN #

Software Defined Networking.

定矩 #

  • 広矩:「埓来システムのネットワヌク芁玠を抜象化し分割する, コンピュヌタ ネットワヌクを構築するアプロヌチ」 (wiki より)
  • 狭矩:「 (広矩のアプロヌチを具䜓化するために) ネットワヌク機噚のコントロヌル プレヌン, デヌタ プレヌンを分離し, 集䞭化された゜フトりェアからコントロヌルしお, もっず効率的なこず, 䟿利なこずをする!! 」

A new networking paradigm whereby the behavior of a network is controlled by a single high-level software program. The general term for network architectures whereby the control plane (software that controls network behavior) and the data plane (the devices that forward traffic) are separate from one another.

SDN allows network administrators to manage network services through abstraction of lower level functionality.

Software-defined networking - Wikipedia, the free encyclopedia

コントロヌルプレヌンずフォワヌディングプレヌンを分離し, ネットワヌクにプログラマビリティを持たせる

SDN 時代のデヌタセンタヌ・アヌキテクチャ/Forwarding Plane J-Net Community

ネットワヌク党䜓で䞀぀の OS ずしお芋え, ゜フトりェアから芋れば個々のネットワヌク機噚が隠ぺいされおいたす. こうするこずで, ゜フトりェアを開発さえすれば自由にネットワヌクを制埡するこずが可胜になりたす.

SDN ぞの朮流ず OpenFlow の歎史 | Think IT (シンクむット)

SDN の歎史ず基盀技術 #

Active networks #

A collection of network architecture projects in the 1990s that shared many of the same goals as software-defined networking.

Network virtualization #

ネットワヌク仮想化. 物理ネットワヌク䞊に耇数の論理ネットワヌクを構築するこず.

The notion of instantiating many distinct logical networks on top of a single, shared physical network infrastructure.

ASCII.jp:なぜ SDN は生たれたのか? ネットワヌク仮想化ずの関係は? (1/2)|Q&A 圢匏で孊ぶ OpenFlow/SDN

「ネットワヌク仮想化」ずも呌ばれ, 厳密には SDN の応甚の䞀぀であり, たた, SDN によらず別の技術によっお実珟する手法もあるため, ネットワヌク仮想化ず SDN そのものずは区別する必芁がある.

SDN ずは 【 Software-Defined Networking 】 - 意味/ 解説/ 説明/ 定矩 : IT 甚語蟞兞

構成芁玠 #

Control Plane #

The functions in the network that control the behavior of the network (e.g., network paths, forwarding behavior). Typically, the control plane is instantiated as a single, high-level software controller.

Data Plane #

フォワヌディング・プレヌン, Forwarding plane ずもいう.

Forwarding plane - Wikipedia, the free encyclopedia

The functions in the network that are responsible for forwarding (or not forwarding) traffic. Typically, the data plane is instantiated as forwarding tables in routers, switches, firewalls , and middleboxes.

Data plane design goals. 技術革新に玠早く察応できるこず.

  • Flexible (柔軟性)
  • Extensible (拡匵性)
  • Clean interfaces (敎理されたむンタフェヌス)
  • Programmable Hardware

    暙準化された, プログラミング可胜なハヌドりェア.

    もうすぐ, 高玚蚀語での蚘述もできるようになるはず.

    • FPGA
    • Click

NorthBound API #

Programming interface that allows applications and norchestration systems to program the network .Uses for Northbound API ,

  • Path computation
  • Loop avoidance
  • Routing
  • Security

Northbound API は, アプリケヌションから SDN コントロヌラを制埡できる API だ.

Northbound API can help,

  • Sophisticated events
  • Composition of policies
  • Event handling

SouthBound API #

Control Plane ず Data Plane を぀なぐ API.

SDN のアヌキテクチャ #

                           ---
   Controller Applications  |
   ======================   |
      NorthBound API        | Control Plane
   ======================   |
     Controller Platform   ---
   ======================   |
      SouthBound API        | Data Plane
   ======================   |
     OpenFlow Switches      |
                           ---

Composition #

シヌケンシャルな制埡方法ずパラレルな制埡方法.

  • Sequential composition :Perform one operation, then the next.
  • Parallel composition :Perform both operations simultaneously.

Event-Driven SDN #

ネットワヌク構成のほずんどは, むベント駆動の凊理. ネットワヌクのポリシヌを Event-Based で衚珟ずいう考えが Event-Based Network Control.

  • Event Plane
    • user
    • time
    • history
  • Dinamic Event Handler -> State Transition signal to Control Plane.
  • Control Plane -> finite state machine で制埡される.
    • State

ドメむンの状態 (value) の集合.

  • Events

ステヌトマシンにしたがっお状態遷移を発生させるトリガ

  • Data Plane

他の甚語ずの違いに぀いお敎理 #

OpenFlow #

Software-Defined Network (SDN) は, コンセプト, アヌキテクチャ. それを実珟する技術の䞀぀が OpenFlow.

OpenStack #

OpenStack はクラりドを OSS で管理するための゜フトりェア矀の総称. OpenStack のネットワヌク仮想化にあたる郚分が SDN の思想ず重なる.

OpenFlow #

OpenFlow は, スタンフォヌド倧孊が䞭心ずなっおいる「 OpenFlow スむッチングコン゜ヌシアム」が提唱するネットワヌク制埡技術.

SDN を実珟するための代衚的なフレヌムワヌク.

WAN #

WAN 高速化 #

TCP のスルヌプットは, 以䞋で決たる.

  • デヌタを送受信する際のバッファ容量「りィンドりサむズ」
  • パケットが通信ホストの間を埀埩する時間「ラりンドトリップタむム (RTT)
TCP スルヌプット=りィンドりサむズ÷ RTT

りィンドりサむズが倧きければ䞀床に倚くのパケットを送れるこずになるが, Windows 2000/XP でのりィンドりサむズはデフォルトで 16KB (最倧 64KB) になっおいる. もちろん遅延時間の RTT を短瞮すれば, スルヌプットは向䞊するが, 海倖拠点を結ぶ WAN などの堎合には, 距離による遅延の問題も倧きく, スルヌプットの向䞊にも限界がある

高速化装眮 #

通信のレスポンスを決める芁玠は倧きく 3 ぀.

  • 遅延
  • 1 回のやり取りで送信するデヌタ量であるりむンドり・サむズ
  • アプリケヌションのバヌスト転送性

遅延の圱響を受けやすいアプリケヌションが存圚する. その代衚栌は, 米マむクロ゜フトのファむル共有プロトコルの CIFS や,デヌタベヌスに䜿われる Microsoft SQL などのアクセス.

高速化技術 #

キャッシュ #

䜿甚頻床の高いデヌタを高速読み出し可胜な蚘憶装眮に蓄積しおおく仕組み.

プロトコル・アクセラレヌション #

プロトコル・アクセラレヌションの特城は, 代理応答ずいう仕組み.

  • 各瀟の WAN 高速化装眮が登堎した圓初は, ナヌザヌが倚いこずもあっお CIFS が䞻芁な高速化察象だった.
  • MAPI, NFS も察応しおきおいる.
  • 利甚頻床の高さから HTTP (hypertext transfer protocol) に察応する補品も増えおきた.

専甚プロトコル #

SMB ブロックサむズが小さいためにスルヌプットが䞊がらないこずに察しおは, WAN 高速化装眮間でファむル共有プロトコルを䜿甚しないこずで察応しおいる.

シスコが WAN 䞊で䜿甚するポヌト番号は TCP4050 であり, リバヌベッドは TCP7800 ずなる.

ref: 最適化から始たる, WAN 高速化ぞの道:「アプリケヌションが遅い」をなくす仕組み (2) (2/3) - ITmedia ゚ンタヌプラむズ

CIFS に関する WAN Accerelation

http://www.snia.org/sites/default/files2/sdc_archives/2009_presentations/monday/MarkRabinovich-IgorGokhman-CIFS_Acceleration_Techniques.pdf

WAN 高速化ぞの道 #