Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenFlow について

Cb17938137021ead2656d0fe58b7c7b1?s=47 kanata
May 01, 2021
29

OpenFlow について

2017/05 の発表資料です。

自身の利用するプラットフォームの移行に伴い https://www.slideshare.net/ssuserf17250/openflow-76434754 をコピーしました

Cb17938137021ead2656d0fe58b7c7b1?s=128

kanata

May 01, 2021
Tweet

Transcript

  1. OpenFlow ʹ͍ͭͯ 15K0112 ๺ᖒ ঵ଠ 1

  2. OpenFlow ʹ͍ͭͯ ͍͖ͭ͞ ▸ 2016೥ळֶظϓϩδΣΫτ ▸ ๺ᖒ: OpenFlow ͓΋͠Ζͦ͏ͳΜͰ΍Γ·͢ʂ ▸

    ኍ௡ઌੜ: ͍͍Μ͡Όͳ͍ͷʁ ▸ ݱࡏ ▸ ๺ᖒ: ωοτϫʔΫͷ࿩ͩ͠ɺকདྷ RAT Ͱ࢖͏ٕज़ʹͳΓಘΔ͔΋ʁ ͜Ε͔Β OpenFlow Λ࢝ΊΔํ΁ɻͦ͏Ͱͳ͍ํ΁ɻ 2
  3. OpenFlow ʹ͍ͭͯ ൃදͷ໨త ▸ OpenFlow ͕Կऀ͔Λ஌Δ ▸ OpenFlow ͕Ͳ͜ʹ࢖ΘΕ͍ͯΔͷ͔Λ஌Δ 3

  4. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow ׆༻๏ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 4
  5. OpenFlow ʹ͍ͭͯ ͷ࠲ֶΛ΍Γ·͢

  6. ίʔυͷॻ͖ํ ͷ࿩͸͠·ͤΜɻ

  7. ͕࣌ؒ͋ͬͨΒ
 ੒Ռ෺ͷ࿩Λ͠·͢

  8. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow ׆༻๏ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 8
  9. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ͱ͸ ▸ OpenFlow Controller

    (ҎԼ OFC) ͱOpenFlow Switch (ҎԼ OFS) ͷೋͭͷιϑτ΢ΣΞͰωοτϫʔΫػثΛ࣮ ૷͢Δ࢓૊Έ ▸ SDN (Software Defined Network) ͷҰछ ▸ ݱࡏ OpenFlow Ver 1.0 ~ 1.6 ·Ͱنఆ͞Ε͍ͯΔ ▸ ओʹ࢖ΘΕ͍ͯΔͷ͸ 1.0 or 1.3 9
  10. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow Controller ▸ OFS Λ੍ޚ͢Διϑτ΢ΣΞ

    ▸ ৭ʑͳߴڃݴޠͷϑϨʔϜϫʔΫ͕༻ҙ͞Ε͍ͯͯɺͦΕ Λ࢖͍ϓϩάϥϛϯά͢Δͱ OFS ͷಈ͖Λ੍ޚग़དྷΔ ▸ ಈతʹωοτϫʔΫΛߏ੒Ͱ͖Δ ▸ ϑϨʔϜϫʔΫྫ: 
 Ryu (Python) , Trema (Ruby) , OpenDaylight (Java) 10
  11. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow Switch ▸ εΠονͷ͏ͪɺOpenFlow ϓϩτίϧΛαϙʔτ͍ͯ͠Δ

    ΋ͷ ▸ ιϑτ΢ΣΞεΠονͱɺϋʔυ΢ΣΞͰରԠ͍ͯ͠Δ΋ ͷ͕͋Δ ▸ ιϑτ΢ΣΞྫ: Open vSwitch , Lagopus ▸ ϋʔυ΢ΣΞྫ: NEC UNIVERGE PFγϦʔζ 11
  12. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ͷྲྀΕ 12 OFS OFC

    ᶃ ᶆ ᶅ ᶄ OpenFlowϓϩτίϧΛ࢖༻
  13. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ϓϩτίϧ ▸ OFC ͱ

    OFS ؒͷ௨৴ͷͨΊͷϓϩτίϧ ▸ σϑΥϧτ͸ TCP 6653 (OFCଆ) ▸ ओʹҎԼͷ3ͭͷ੍ޚ͕࢖༻͞ΕΔ ▸ Packet In: OFS ʹདྷͨύέοτΛ OFC ʹసૹ͢Δ ▸ Packet Out: OFC ͔ΒɺOFS ʹసૹͯ͠΋Β͏ύέοτ Λసૹ͢Δ ▸ Flow Mod: OFC ͕ OFS ͷϑϩʔςʔϒϧΛߋ৽͢Δ 13
  14. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ ϑϩʔςʔϒϧ ▸ OFS Λ௨ΔશͯͷύέοτΛ Packet

    In ͯ͠ Packet Out ͢Δ ͷ͸ͱͯ΋͕͔͔࣌ؒΔͨΊɺͰ͖Δ͚ͩ OFS ͷΈͰύέο τΛॲཧ͍ͨ͠ ▸ ʮ͜ͷ৚݅Λຬͨͨ͠ (match ͨ͠) ύέοτΛɺͲ͏ॲཧ ͢Δ (action ͢Δ)ʯͱ͍͏੩తͳ ϧʔϧ (ϑϩʔΤϯτϦ) Λ OFC ͔Β OFS ʹॻ͖ࠐΈɺྫ֎Λ Packet In ͢Ε͹ྑ͍ ▸ ϑϩʔΤϯτϦͷू߹Λϑϩʔςʔϒϧͱ͍͏ 14
  15. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ͷྲྀΕ (OFS ໨ઢ) 1.

    OFS ʹಧ͍ͨύέοτͱϑϩʔςʔϒϧΛ ൺֱɻϚονͨ͠Β֘౰ΤϯτϦʹॻ͔Εͨ ॲཧΛߦ͏ɻ 2. Ϛον͠ͳ͔ͬͨ৔߹ ‣ Packet In ͢Δɻ (OpenFlow 1.0 - 1.2) ‣ ύέοτΛഁغ͢Δɻ (OpenFlow 1.3 Ҏ߱) ‣ ໌ࣔతʹϑϩʔςʔϒϧʹ Packet In 
 ͢Δ͜ͱΛॻ͔ͳ͚Ε͹͍͚ͳ͍ 3. OFC ͔Β Packet Out ͞Εͯདྷͨ࣌ɺͦͷ಺ ༰ʹै͏ɻ 15 OFS OFC ૹ৴ݩMAC ϙʔτ xx:xx:xx:xx: xx:xx 2 TCP6653
  16. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ (͋͘·Ͱ΋) ΍Ζ͏ͱࢥ͑͹ɾɾɾ 16 OFS OFS

    OFS OFC OpenFlow ಋೖ ैདྷ
  17. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ͷར఺ ▸ ඞཁͳػೳΛϓϩάϥϜͰࣗ༝ʹ࣮૷Ͱ͖Δ ▸

    ACL΍QoSΛಈతʹܾఆͰ͖Δ ▸ 1 ୆ͷ OFC ͕ෳ਺୆ͷ OFS Λ੍ޚͰ͖ΔͷͰɺOFC ͸ ωοτϫʔΫશମΛ೺ѲͰ͖Δ 17
  18. OpenFlow ʹ͍ͭͯ - OpenFlow ͱ͸ OpenFlow ͷܽ఺ ▸ ֶशίετ͕ߴ ▸

    ॻ͖खʹΑͬͯบ͕ग़Δ ▸ ιϑτ΢ΣΞεΠονΛ࢖༻͢Δͱɺ”εΠον༻” ʹ࡞Β Ε͍ͯΔ cisco ੡඼ͳͲͱൺ΂ͯ஗͍ 18
  19. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow ׆༻๏ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 19
  20. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ OpenFlow ͷܽ఺ͷ 1 ͭͱͦͷݪҼ (18ϖʔδ)

    OpenFlow ͷܽ఺ ΑΓ ▸ ιϑτ΢ΣΞεΠονΛ࢖༻͢Δͱɺ”εΠον༻” ʹ࡞ΒΕ͍ͯΔ cisco ੡඼ͳͲͱ ൺ΂ͯ஗͍ ‣ ൚༻ OS ͷ্ͰΞϓϦέʔγϣϯ͕ಈ͍͍ͯΔͨΊ ‣ NIC ͷసૹ଎౓ͷ໰୊ 20
  21. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ OpenFlow ͷܽ఺ͷ 1 ͭͱͦͷݪҼ (18ϖʔδ)

    OpenFlow ͷܽ఺ ΑΓ ▸ ιϑτ΢ΣΞεΠονΛ࢖༻͢Δͱɺ”εΠον༻” ʹ࡞ΒΕ͍ͯΔ cisco ੡඼ͳͲͱ ൺ΂ͯ஗͍ ‣ ൚༻ OS ͷ্ͰΞϓϦέʔγϣϯ͕ಈ͍͍ͯΔͨΊ ‣ NIC ͷసૹ଎౓ͷ໰୊ 21
  22. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ ͦ΋ͦ΋ͳͥ஗͘ͳΔ͔Λ஌Δ ▸ ൚༻ OS ʹ͓͚Δύέοτड৴ͷྲྀΕͷ೺ѲΛ͢Δ

    ▸ NIC ͕ύέοτΛड͚औ͔ͬͯΒɺϓϩηε͕ͦΕΛॲཧ ͢Δ·Ͱ ▸ ※ ؆ུԽͷͨΊɺτϥσΟγϣφϧͳํࣜΛલఏͱ͢Δ ▸ NAPI΍LRO͸ߟ͑ͳ͍ 22
  23. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ Linux ʹ͓͚Δύέοτड৴ͷྲྀΕ 1. ϓϩηεA͕ recv

    γεςϜίʔϧΑΓ S/W ׂΓࠐΈΛ͔͚ɺΧʔωϧʹͯ recv ॲཧ͕ߦ ΘΕɺύέοτड৴Λ଴ͭ (ͦͷؒϓϩηεA͸ block ঢ়ଶ΁ҠߦɺTimerׂΓࠐΈΑΓผ ϓϩηε͕ಈ͘) 2. ύέοτΛ NIC ͕ड৴͠ɺϋʔυ΢ΣΞϨδελʹ֨ೲ͢Δ 3. NIC ͸Χʔωϧʹ H/W ׂΓࠐΈΛ͔͚Δ 4. Χʔωϧ͸ׂΓࠐΈʹର͠ίϯςΩετεΠονͯ͠ Driver ॲཧɺL2, L3, L4 ॲཧΛߦ͍ɺ ιέοτΩϡʔʹड৴ύέοτΛ enqueue ͢Δ 5. ιέοτΩϡʔʹσʔλ͕དྷͨͨΊϓϩηεAΛ ready ঢ়ଶʹҠߦͯ͠ɺTimerׂΓࠐΈΑ ΓίϯςΩετεΠονͯ͠ϓϩηεAͷॲཧΛߦ͏ 23 ίϯςΩετεΠον
 ͕ϘτϧωοΫ Χʔωϧ ϓϩηεA (ύέοτΛड৴͢Δϓϩηε) 3. H/WׂΓࠐΈ 4.Driverॲཧ 1.TimerׂΓࠐΈ 5. TimerׂΓࠐΈ 1.S/WׂΓࠐΈ ϓϩηεB (ద౰ͳ1ͭҎ্ͷϓϩηε) 1. γεςϜ ίʔϧॲཧ 1.CS 1.CS 4.CS 5.CS 2. ύέοτड৴ 1.recv()
  24. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ ίϯςΩετεΠονʹΑΔϘτϧωοΫΛͳͦ͘͏ = ׂΓࠐΈʹΑΔϘτϧωοΫΛͳͦ͘͏ ▸ ύέοτड৴࣌ʹίΞ͕ͦΕΛ஌ΔͨΊʹى͜Δ

    H/W ׂΓࠐΈ ▸ ίΞ͕ͣͬͱ NIC ΛݟͯΕ͹͍͍Ͷʂ ▸ γεςϜίʔϧʹΑΓى͜Δ S/WׂΓࠐΈ ▸ γεςϜίʔϧΛى͜͞ͳ͚Ε͹͍͍Ͷʂ 24
  25. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ DPDK (Data Plane Development Kit)

    ͷొ৔ ▸ Linux্ͰɺωοτϫʔΫॲཧʹಛԽͨ͠ΞϓϦέʔγϣϯΛ࡞੒ ͢ΔͨΊͷιϑτ΢ΣΞϥΠϒϥϦʔ܈ ▸ DPDK Λ࢖༻ͯ͠ҎԼΛߦ͏ (Ұྫ) ▸ ίΞΛ઎༗ͯ͠NICͷड৴ύέοτΛϙʔϦϯά ▸ H/W ׂΓࠐΈ͕ى͜Βͳ͍ ▸ ϢʔβϥϯυͰಠࣗͷϝϞϦ؅ཧͷ࢓૊ΈΛߏங ▸ S/W ׂΓࠐΈ͕ى͜Βͳ͍ ▸ ※ NIC ͕ DPDK ʹରԠ͍ͯ͠Δඞཁ͕͋Δ 25
  26. 26 http://qiita.com/aoimidori27/items/9ae7cd42c2f9a4ff4a94 IRQ Pauling

  27. OpenFlow ʹ͍ͭͯ - OpenFlow ͷܽ఺Λิ͏ٕज़ DPDK ࢖༻ͷར఺ ▸ 1ͭҎ্ͷϓϩηοα͕Ϗδʔ΢ΣΠτͰύέοτΛ଴ͪड͚ΔͨΊɺύέοτ ड৴࣌ʹ

    H/W ׂΓࠐΈʹΑΔίϯςΩετεΠον͕ى͜Βͳ͍ ▸ ϢʔβۭؒͰಈ࡞͢ΔͨΊɺ(DPDK Ͱͷύέοτ଴डͱύέοτॲཧ͕ಉϓϩ ηεͰॲཧ͞ΕΔ৔߹) γεςϜίʔϧͷࡍʹى͜Δ S/W ׂΓࠐΈ ʹΑΔίϯ ςΩετεΠον͕ى͜Βͳ͍ ▸ ౰ΞϓϦέʔγϣϯઐ༻ͷύέοτ؅ཧػೳΛDPDKʹ࣮ͯ૷͢Δ(Linux Χʔω ϧͷϓϩτίϧελοΫΛར༻͠ͳ͍) ͨΊɺड৴ύέοτΛL4·Ͱണ͕͢͜ͱ ແ͘ύέοτΛߴ଎ʹసૹͰ͖Δ ▸ Huge Pages Λར༻͢Δ͜ͱͰɺTLB ϛεΛݮΒ͢͜ͱ͕Ͱ͖Δ 27
  28. 28 DPDK ʹΑΓ ”ιϑτ΢ΣΞεΠονͰ͋Δ͜ͱ͕ܽ఺” ͷվળ Ͱ͸࣮ࡍʹͲ͜Ͱ࢖ΘΕΔΑ͏ʹͳ͔ͬͨʁ

  29. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow׆༻๏ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 29
  30. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ Ҏ্Λ౿·͑ͨ OpenFlow ׆༻ྫ ▸ طଘͷωοτϫʔΫػثʹΑΔ੍ޚ

    + α (OpenFlow) ▸ ιϑτ΢ΣΞεΠον ͱ DPDK Ͱ൚༻ϚγϯΛ
 ωοτϫʔΫػثԽ ▸ SDN ରԠΞϓϥΠΞϯεεΠονͷ࢖༻ ▸ NFV (Network Function Virtualization) Ͱͷ࢖༻ ▸ VLAN ΑΓॊೈͳωοτϫʔΫߏ੒͕Մೳ ▸ DPDK ͷొ৔ʹΑΓιϑτ΢ΣΞεΠονͰ͋Δ͕ނͷ
 ϘτϧωοΫ͕ຆͲແ͘ͳͬͨ 30
  31. 31 ίϯϐϡʔλɾετϨʔδɾωοτϫʔΫશͯΛԾ૝Խ͢Δ Software Defined Infrastructure ͷ࣮ݱ NFV (ωοτϫʔΫԾ૝Խ) ͷొ৔ʹΑΓ

  32. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ SDI (Software Defined Infrastructure) ▸

    Πϯϑϥ؀ڥશͯΛιϑτ΢ΣΞͰ࣮ݱ͢Δ͜ͱ ▸ ෺ཧػͷ਺Λ཈͑ΒΕΔ ▸ ௐୡɾ഑ஔίετͷ࡟ݮ ▸ ߏ੒ͷมߋʹॊೈʹରԠՄೳ ▸ ར༻ऀ͸εϞʔϧελʔτ͕Մೳ ▸ ྫ: OpenStack 32
  33. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ “OpenStackͱ͸” Λͱͯ΋େࡶ೺ʹ஌Δ ▸ ͜Μͳ΋ͷ 33

    https://manage.conoha.jp/ VPS Λఏڙ͢ΔαʔϏε
  34. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ “OpenStackͱ͸” Λͱͯ΋େࡶ೺ʹ஌Δ ▸ OpenStack ͸༷ʑͳػೳຖʹ෼͚ΒΕͨίϯϙʔωϯτͷू߹

    34 http://news.mynavi.jp/series/openstack/ NovaʹͯVMΛݐͯΔ GlanceʹͯΠϝʔδΛ؅ཧ NeutronʹͯωοτϫʔΫΛ؅ཧ HorizonʹͯμογϡϘʔυΛఏڙ ɾ ɾ ɾ
  35. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ “OpenStackͱ͸” Λͱͯ΋େࡶ೺ʹ஌Δ ▸ OpenStack ͸༷ʑͳػೳຖʹ෼͚ΒΕͨίϯϙʔωϯτͷू߹

    35 http://news.mynavi.jp/series/openstack/ ϓϥάΠϯػೳΛ௨͡
 ༷ʑͳػೳͱ࿈ܞ ɾOpen vSwitch ɾNetwork Namespace ɾetc OpenStack ʹͯ 
 OpenFlow Λ࢖͍
 ωοτϫʔΫΛߏ੒Ͱ͖Δ ఻͍͑ͨ͜ͱ
  36. OpenFlow ʹ͍ͭͯ - OpenFlow ׆༻๏ ͳͥOpenStackʹͯOpenFlowΛ࢖༻͢Δ͔ ▸ ސ٬͝ͱͷωοτϫʔΫ෼ׂΛ VLAN Ͱӡ༻͢Δͱ

    ▸ ͦͷαʔό͕Ͳͷ VLAN ʹଐ͍ͯ͠Δ͔ ▸ ͦͷαʔόʹର͢ΔACL͸Ͳ͏ͳ͍ͬͯΔ͔ ▸ 4K VLAN ໰୊Λؾʹ͠ͳ͕Βͷ ID ؅ཧ ▸ ΛखಈͰ΍ΒͶ͹͍͚ͳͯͭ͘Β͍ɺࣗಈԽ͍ͨ͠ɻ ▸ OpenFlow ͸্هͷ໰୊ͷιϦϡʔγϣϯͷͻͱͭ 36
  37. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow ͷपลٕज़ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 37
  38. OpenFlow ʹ͍ͭͯ - ·ͱΊ ·ͱΊ - OpenFlow ͷར༻๏ ▸ ݱࡏ

    OpenFlow ͸େ͖͘෼͚ͯ 2 ͭͷར༻๏͕͋Δ ▸ NFV ▸ OpenStack ͷωοτϫʔΫίϯϙʔωϯτͱͯ͠ ▸ ࣮ػల։ ▸ OpenFlow ͸͋͘·Ͱ΋ิॿ 38
  39. OpenFlow ʹ͍ͭͯ - ·ͱΊ ·ͱΊ - ؔ܎ਤ 39 SDN NFV

    SDI OpenFlow DPDK ͷԸܙ OpenStack ͦͷଞ ΋Ζ΋Ζ
  40. OpenFlow ʹ͍ͭͯ ໨࣍ ▸ OpenFlow ͱ͸ ▸ OpenFlow Switch ͷܽ఺Λิ͏ٕज़

    ▸ OpenFlow ͷपลٕज़ ▸ ·ͱΊ —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— ▸ ੒Ռ෺঺հ 40
  41. OpenFlow ʹ͍ͭͯ ஫ҙ఺ ▸ ͜ͷεϥΠυ͸ൃදऴྃޙʹ௥Ճ͠·ͨ͠ɻ ▸ Ҏ߱ͷεϥΠυʹ͍ͭͯͷ໰୊఺Λ͜͜ʹॻ͍͓͖ͯ·͢ɻ ▸ DPDK͋Γͳ͠Ͱൺֱ͍ͯ͠·͕͢ɺVM্ͰͷಋೖͷͨΊɺ DPDK͸ޮՌతʹಈ͍͍ͯͳ͍Ͱ͢ɻ(ҙຯͷͳ͍ൺֱͰ͢)

    ▸ ൺֱͷج४͕ᐆດͰ͢ɻ(OpenFlow vs ௚઀઀ଓ) ▸ “ಉϗοϓ਺ͰOpenFlowͷ଎౓” Λൺֱ͍ͨ͠ͳΒޙऀʹ ΞϓϥΠΞϯεεΠονΛڬΉ΂͖ 41
  42. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ؀ڥ ▸ OFCػ ▸ CentOS 7.3

    ▸ Python 3.6.0 ▸ Ryu 4.10 (OFC) ▸ OFSػ ▸ Ubuntu 16.04 ▸ Lagopus 0.2.10 (OFS) ▸ DPDK 16.11 42
  43. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ੒Ռ෺ ▸ OpenFlow Λ༻͍ͨϩʔυόϥϯα ▸ NAPT

    Λ༻͍Δ ▸ WebαʔόͷԠ౴࣌ؒͰৼΓ෼͚ઌΛܾఆ͢Δ ▸ https://github.com/ShotaKitazawa/ryu/loadBalancer 43
  44. 44 ࣮ࡍͷಈ࡞ͷղઆ

  45. OFS Server01 Server02 ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 1. OFC ىಈ OFC ͸ɺ10

    ඵʹҰճ HTTP HEAD ཁٻ͠ɺͦͷ࣮ߦ͕࣌ؒখ͍͞ํͷ Server Λ֮͑Δɻ PC3 PC2 PC1 OFC
  46. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 1. OFC ىಈ OFC ͸ɺ10 ඵʹҰճ HTTP HEAD

    ཁٻ͠ɺͦͷ࣮ߦ͕࣌ؒখ͍͞ํͷ Server Λ֮͑Δɻ OFS Server01 Server02 PC3 PC2 PC1 OFC
  47. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 2. OFC <--> OFS ઀ଓ OFS ͷϑϩʔςʔϒϧʹඞཁͳ৘ใ Λॻ͖ࠐΉ

    • Server01,02 ͷARPςʔϒϧ • Server01,02 ϧʔςΟϯάςʔ ϒϧ FlowMod To: Server02 OFS Server01 Server02 PC3 PC2 PC1 OFC
  48. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 3. PC1͔Β192.168.38.10ͷARPཁ ٻ To: Server02 OFS Server01 Server02

    PC3 PC2 PC1 OFC
  49. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 3. PC1͔Β192.168.38.10ͷARPཁ ٻ To: Server02 OFS Server01 Server02

    PC3 PC2 PC1 OFC
  50. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 4. PC1 -> OFS ͷ௨৴ To: Server02 OFS

    Server01 Server02 PC3 PC2 PC1 OFC
  51. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 5. OFSͷϑϩʔςʔϒϧࢀর 192.168.38.1 ʹରԠ͢ΔNAPT
 ςʔϒϧ͕͋Δ͔֬ೝɻ
 → ͳ͍ͷͰOFCʹPacket In͢Δɻ

    Packet In To: Server02 OFS Server01 Server02 PC3 PC2 PC1 OFC
  52. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 6. Packet In 192.168.38.1 ͔ΒͷύέοτΛ NAPT͢ΔΑ͏Flow Mod͢Δɻͦͷ ࡍɺNAPTޙѼઌΞυϨε͸

    
 1. ͷखॱͰܾ·Δɻ To: Server02 FlowMod OFS Server01 Server02 PC3 PC2 PC1 OFC 192.168.38.1:50000ʛ192.168.38.10:80 10.10.11.1:60001ʛ10.10.11.12:80
  53. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 7. PC1 -> OFS ࠶౓௨৴ TCP࠶ૹػೳΑΓPC1͔Β࠶౓OFS ΁ύέοτ͕ૹΒΕΔɻ To:

    Server02 OFS Server01 Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  54. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 8. OFSͷϑϩʔςʔϒϧࢀর 192.168.38.1 ʹରԠ͢ΔNAPT
 ςʔϒϧ͕͋Δ͔֬ೝɻ
 →͋ΔͷͰϑϩʔςʔϒϧΛ࢖༻ To: Server02

    OFS Server01 Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  55. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 9. OFS -> Server02 ͷ௨৴ 2. ͷ࣌఺ͰServer01,02ͷARP
 ςʔϒϧ͕ϑϩʔςʔϒϧʹॻ͖ࠐ

    ·Ε͍ͯΔͷͰARP͸ඞཁͳ͍ɻ To: Server02 OFS Server01 Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  56. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 10. OFS <- Server02 ͷ௨৴ To: Server02 OFS

    Server01 Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  57. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 11. OFSͷϑϩʔςʔϒϧࢀর NAPT ςʔϒϧΛࢀরͯ͠NAPT͢ Δɻ To: Server02 OFS

    Server01 Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  58. ɾ WebͷԠ౴࣌ؒͰৼΓ෼͚Δ 12. OFS -> PC1 To: Server02 OFS Server01

    Server02 PC3 PC2 PC1 OFC 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  59. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ࣮૷͕ඞཁͳػೳ ▸ HTTP HEAD ཁٻ ▸

    ARP ▸ FlowMod ▸ IP: xxx.xxx.xxx.xxx , oo ൪ϙʔτ͔Βͷ http ϦΫΤετ
 ύέοτΛ Server0x Ѽʹ NAPT ͢Δ ▸ Server0x ͔Βͷ http ϨεϙϯεύέοτΛ
 IP: xxx.xxx.xxx.xxx , oo ൪ϙʔτ Ѽʹ NAPT ͢Δ 59
  60. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ੑೳධՁ ▸ Webαʔόʹର͢ΔϩʔυόϥϯαͷػೳͷΈͷ࣮૷ͷͨΊɺ
 ੑೳධՁʹ͸ Apache Bench

    Λ༻͍ͨ ▸ ૯਺ ಉ࣌ίωΫγϣϯ Ͱܭଌ ▸ αʔόଆͷ apache ͸ worker ʹͯ͠ɺνϡʔχϯά͸ͳ͠ ▸ OpenFlowɺOpenFlow + DPDK ɺ0QFO'MPXͳ͠ Ͱൺֱ͢Δ ▸ Windows ػͷ VMWare ্Ͱ࣮ࢪ 60
  61. OpenFlow ʹ͍ͭͯ ੑೳධՁ 61 OpenFlow OpenFlow ʴ DPDK Կ΋ͳ͠ req/sec

    8.98 9.05 3774.58 !? ɾDPDK ͋Γͱͳ͠ͰͦΜͳมΘΒͳ͍? ɾͦ΋ͦ΋ OpenFlow ஗͗͢!?
  62. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ໰୊఺ ▸ 1ίωΫγϣϯຖʹ Packet In Λͯ͠͠·͍ͬͯΔ

    ▸ ૹ৴ݩϙʔτ൪߸͕ຖճมΘΔͨΊ ▸ TCP ͷ ’’’Ұఆ࣌ؒޙ’’’ ࠶ૹػೳΛ࢖༻͍ͯ͠Δ ▸ Packet In ͨ͠ύέοτʹରͯ͠ͷసૹॲཧΛߦΘͳ͍ͨΊ ▸ DPDK ͷԸܙ͕ബ͍ ▸ L4 (TCP ৘ใ) ·ͰಡΜͰύέοτΛసૹ͢ΔͨΊ 62
  63. OFS Server01 Server02 PC3 PC2 PC1 OFC ▸ 1ίωΫγϣϯຖʹ Packet

    In Λͯ͠͠·͍ͬͯΔ ▸ ૹ৴ݩϙʔτ൪߸͕ຖճมΘΔͨΊ 10.10.11.1:60001ʛ10.10.11.12:80 192.168.38.1:50000ʛ192.168.38.10:80
  64. 192.168.38.1:50000ʛ192.168.38.10:80 10.10.11.1:60001ʛ10.10.11.12:80 OFS Server01 Server02 PC3 PC2 PC1 OFC 192.168.38.1:50001ʛ192.168.38.10:80

    10.10.11.1:60002ʛ10.10.11.12:80 192.168.38.1:50002ʛ192.168.38.10:80 10.10.11.1:60003ʛ10.10.11.12:80 192.168.38.1:50003ʛ192.168.38.10:80 10.10.11.1:60004ʛ10.10.11.12:80 ▸ 1ίωΫγϣϯຖʹ Packet In Λͯ͠͠·͍ͬͯΔ ▸ ૹ৴ݩϙʔτ൪߸͕ຖճมΘΔͨΊ }Ϝ μ
  65. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ վળࡦᶃ ▸ ෺ཧϙʔτϕʔεͰϩʔυόϥϯε ▸ OFS (ϩʔυόϥϯα)

    ͷ֎ଆNIC, Server0x ͷ IP ΞυϨε Λશͯಉ͡ʹͯ͠ɺOFS Ͱ͸ MACΞυϨεͷΈΛॻ͖׵ ͑ͯసૹ ▸ ίωΫγϣϯຖʹϥϯμϜͳ஋ΛͱΔཁૉΛݟͳ͍ͨΊɺ ϑϩʔςʔϒϧͰղܾͰ͖Δ (ຖճ Packet In ͠ͳ͍Ͱ ྑ͍) 65
  66. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ վળࡦᶄ ▸ OpenFlow 1.5Ͱࡦఆ͞Εͨcopy fieldΞΫγϣϯΛ࢖༻͢Δ ▸

    ϑϩʔΤϯτϦʹ ”ड৴ύέοτͷૹ৴ݩxxͱૹ৴ઌxxΛ ೖΕସ͑Δ” ͱ͍͏ॲཧΛॻ͘͜ͱ͕ग़དྷΔ ▸ ૹ৴ݩϙʔτ൪߸Λࢦఆͤͣͱ΋ฦ͢͜ͱ͕ग़དྷΔ 66 https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.0.noipr.pdf
  67. OpenFlow ʹ͍ͭͯ - ੒Ռ෺঺հ ੒Ռ෺঺հ·ͱΊ ▸ OpenFlow ͸ίʔυ͑͞ॻ͚͹͔֬ʹԿͰ΋ग़དྷΔ ▸ ͨͩ͠ɺΉ΍Έͳ

    Packet In Λ܁Γฦ͢ͱεϧʔϓοτ͕
 ֨ஈʹখ͘͞ͳΔ ▸ ࣮༻Խ͢ΔͨΊʹ͸ίʔσΟϯάྗ͕ඞਢ ▸ Packet In ͸ݶΓͳ͘θϩʹ͢Δ ▸ ΞϧΰϦζϜͷ࠷దԽ 67
  68. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠