[Daily morning study] SDN (Software Defined Networking)๊ณผ OpenFlow ๊ฐœ๋…

#daily morning study

Image


์ „ํ†ต์ ์ธ ๋„คํŠธ์›Œํฌ์˜ ํ•œ๊ณ„

๊ธฐ์กด ๋„คํŠธ์›Œํฌ ์žฅ๋น„(๋ผ์šฐํ„ฐ, ์Šค์œ„์น˜)๋Š” ์ œ์–ด ๋กœ์ง๊ณผ ํŒจํ‚ท ์ „๋‹ฌ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜์˜ ์žฅ๋น„์— ํ†ตํ•ฉ๋˜์–ด ์žˆ๋‹ค. ๊ฐ ์žฅ๋น„๊ฐ€ ๋…์ž์ ์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์žฅ๋น„๋งˆ๋‹ค ๋”ฐ๋กœ CLI๋กœ ์ ‘๊ทผํ•ด์„œ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์— ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์ •์ฑ… ๋ณ€๊ฒฝ ์‹œ ์ˆ˜๋ฐฑ ๋Œ€์˜ ์žฅ๋น„๋ฅผ ์ผ์ผ์ด ์„ค์ •ํ•ด์•ผ ํ•จ
  • ๋ฒค๋”(Cisco, Juniper ๋“ฑ)์— ์ข…์†๋œ ๋…์  ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ•˜๋“œ์›จ์–ด
  • ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด ๋ณ€ํ™”์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์–ด๋ ค์›€
  • ์ž๋™ํ™”์™€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ œํ•œ์ 

SDN์ด๋ž€?

SDN(Software Defined Networking)์€ ๋„คํŠธ์›Œํฌ์˜ ์ œ์–ด ํ‰๋ฉด(Control Plane)๊ณผ ๋ฐ์ดํ„ฐ ํ‰๋ฉด(Data Plane)์„ ๋ถ„๋ฆฌํ•ด์„œ, ์ค‘์•™ ์ง‘์ค‘ํ˜• ์†Œํ”„ํŠธ์›จ์–ด ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋„คํŠธ์›Œํฌ ์ „์ฒด๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜๋‹ค.

ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. ๋ผ์šฐํŒ… ๊ฒฐ์ •์€ ์ค‘์•™ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ•˜๊ณ , ์Šค์œ„์น˜/๋ผ์šฐํ„ฐ๋Š” ๊ทธ ๊ฒฐ์ •์— ๋”ฐ๋ผ ํŒจํ‚ท์„ ์ „๋‹ฌํ•˜๋Š” ๋‹จ์ˆœํ•œ ์žฅ๋น„๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.


SDN 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜

SDN์€ ์„ธ ๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ณ„์ธต์—ญํ• ์˜ˆ์‹œ
Application Layer๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ •์˜, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ, ๋ฐฉํ™”๋ฒฝ, ํŠธ๋ž˜ํ”ฝ ์—”์ง€๋‹ˆ์–ด๋ง ์•ฑ
Control Layer์ค‘์•™ ์ง‘์ค‘์‹ ์ œ์–ด, ๊ธ€๋กœ๋ฒŒ ๋„คํŠธ์›Œํฌ ๋ทฐSDN ์ปจํŠธ๋กค๋Ÿฌ (ONOS, OpenDaylight)
Infrastructure Layer์‹ค์ œ ํŒจํ‚ท ์ „๋‹ฌ, ํฌ์›Œ๋”ฉOpenFlow ์ง€์› ์Šค์œ„์น˜, ๋ผ์šฐํ„ฐ

Application Layer โ†” Control Layer ์‚ฌ์ด์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ Northbound API(์ฃผ๋กœ REST)๋ผ๊ณ  ํ•˜๊ณ ,
Control Layer โ†” Infrastructure Layer ์‚ฌ์ด๋ฅผ Southbound API(์ฃผ๋กœ OpenFlow)๋ผ๊ณ  ํ•œ๋‹ค.


Control Plane๊ณผ Data Plane ๋ถ„๋ฆฌ

Control Plane(์ œ์–ด ํ‰๋ฉด)์€ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ ํŒจํ‚ท์„ ๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋‘๋‡Œ ์—ญํ• ์ด๋‹ค. ๋ผ์šฐํŒ… ํ”„๋กœํ† ์ฝœ(OSPF, BGP ๋“ฑ)์ด ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค.

Data Plane(๋ฐ์ดํ„ฐ ํ‰๋ฉด)์€ ๊ฒฐ์ •๋œ ๊ฒฝ๋กœ์— ๋”ฐ๋ผ ์‹ค์ œ๋กœ ํŒจํ‚ท์„ ํฌ์›Œ๋”ฉํ•˜๋Š” ์—ญํ• ์ด๋‹ค. FIB(Forwarding Information Base)๋ฅผ ์ฐธ์กฐํ•ด์„œ ํŒจํ‚ท์„ ๋ณด๋‚ธ๋‹ค.

์ „ํ†ต ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ๋‘ ๊ธฐ๋Šฅ์ด ๊ฐ™์€ ์žฅ๋น„์— ์žˆ๋‹ค. SDN์€ Control Plane์„ ๋ฝ‘์•„๋‚ด์„œ ์ค‘์•™ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์˜ฎ๊ธด๋‹ค.

[์ „ํ†ต ๋„คํŠธ์›Œํฌ]
 ๋ผ์šฐํ„ฐ A: Control Plane + Data Plane
 ๋ผ์šฐํ„ฐ B: Control Plane + Data Plane
 ๋ผ์šฐํ„ฐ C: Control Plane + Data Plane
 โ†’ ๊ฐ์ž ๋…๋ฆฝ์ ์œผ๋กœ ๊ฒฝ๋กœ ๊ณ„์‚ฐ

[SDN]
 SDN ์ปจํŠธ๋กค๋Ÿฌ: Control Plane (์ „์ฒด ํ† ํด๋กœ์ง€ ํŒŒ์•…)
      โ†• OpenFlow
 ์Šค์œ„์น˜ A: Data Plane๋งŒ
 ์Šค์œ„์น˜ B: Data Plane๋งŒ
 ์Šค์œ„์น˜ C: Data Plane๋งŒ
 โ†’ ์ปจํŠธ๋กค๋Ÿฌ ์ง€์‹œ์— ๋”ฐ๋ผ ํŒจํ‚ท ์ „๋‹ฌ

OpenFlow ํ”„๋กœํ† ์ฝœ

OpenFlow๋Š” SDN ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋„คํŠธ์›Œํฌ ์Šค์œ„์น˜ ์‚ฌ์ด์˜ ํ‘œ์ค€ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ONF(Open Networking Foundation)์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ๋Š” OpenFlow๋ฅผ ํ†ตํ•ด ์Šค์œ„์น˜์˜ ํ”Œ๋กœ์šฐ ํ…Œ์ด๋ธ”(Flow Table)์„ ์ง์ ‘ ์ฝ๊ณ  ์“ด๋‹ค.

ํ”Œ๋กœ์šฐ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

ํ”Œ๋กœ์šฐ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ•ญ๋ชฉ(Flow Entry)์€ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ์„ค๋ช…
Match FieldsํŒจํ‚ท๊ณผ ๋งค์นญํ•  ์กฐ๊ฑด (IP ์ฃผ์†Œ, ํฌํŠธ, MAC ์ฃผ์†Œ, VLAN ID ๋“ฑ)
Priority์—ฌ๋Ÿฌ ๋ฃฐ์ด ๋งค์นญ๋  ๋•Œ ์šฐ์„ ์ˆœ์œ„
Actions๋งค์นญ๋œ ํŒจํ‚ท์— ์ˆ˜ํ–‰ํ•  ๋™์ž‘
Counters๋งค์นญ ํšŸ์ˆ˜, ๋ฐ”์ดํŠธ ์ˆ˜ ํ†ต๊ณ„

Actions ์ข…๋ฅ˜

  • OUTPUT: ์ง€์ •ํ•œ ํฌํŠธ๋กœ ํŒจํ‚ท ์ „์†ก
  • DROP: ํŒจํ‚ท ๋ฒ„๋ฆผ
  • FLOOD: ๋ชจ๋“  ํฌํŠธ๋กœ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ
  • CONTROLLER: ์ปจํŠธ๋กค๋Ÿฌ๋กœ ํŒจํ‚ท ์ „๋‹ฌ (์ฒ˜์Œ ๋ณด๋Š” ํŒจํ‚ท ์ฒ˜๋ฆฌ)
  • MODIFY_FIELD: ํ—ค๋” ํ•„๋“œ ์ˆ˜์ • (NAT, QoS ๋“ฑ)

ํŒจํ‚ท ์ฒ˜๋ฆฌ ํ๋ฆ„

ํŒจํ‚ท ์ˆ˜์‹ 
    โ†“
Flow Table ์กฐํšŒ (Match)
    โ†“
  ๋งค์นญ๋จ? โ”€โ”€YESโ”€โ”€โ†’ Action ์‹คํ–‰ (์ „๋‹ฌ, ๋“œ๋กญ ๋“ฑ)
    โ”‚
   NO
    โ†“
Packet-In ๋ฉ”์‹œ์ง€๋กœ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌ
    โ†“
์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ฒฝ๋กœ ๊ณ„์‚ฐ ํ›„ Flow Rule ์„ค์น˜
    โ†“
์Šค์œ„์น˜๊ฐ€ Flow Entry์— ๋”ฐ๋ผ ํŒจํ‚ท ์ „๋‹ฌ

์ฒ˜์Œ ๋ณด๋Š” ํ”Œ๋กœ์šฐ์˜ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท์€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์˜ฌ๋ผ๊ฐ€์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ Flow Entry๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ดํ›„ ๊ฐ™์€ ํ”Œ๋กœ์šฐ์˜ ํŒจํ‚ท์€ ์Šค์œ„์น˜๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•œ๋‹ค.


์ฃผ์š” SDN ์ปจํŠธ๋กค๋Ÿฌ

ONOS (Open Network Operating System)

AT&T, ๊ตฌ๊ธ€ ๋“ฑ ํ†ต์‹ ์‚ฌ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ๋œ ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋กค๋Ÿฌ. ๊ณ ๊ฐ€์šฉ์„ฑ๊ณผ ๋ถ„์‚ฐ ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋Œ€๊ทœ๋ชจ WAN ํ™˜๊ฒฝ์— ๊ฐ•ํ•˜๋‹ค.

OpenDaylight (ODL)

๋ฆฌ๋ˆ…์Šค ์žฌ๋‹จ ์‚ฐํ•˜์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ. Java ๊ธฐ๋ฐ˜์ด๋ฉฐ ๋‹ค์–‘ํ•œ ๋‚จํ–ฅ ํ”„๋กœํ† ์ฝœ(OpenFlow, NETCONF, OVSDB ๋“ฑ)์„ ์ง€์›ํ•œ๋‹ค.

Ryu

Python์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ๋Ÿ‰ SDN ์ปจํŠธ๋กค๋Ÿฌ. ํ•™์Šต๊ณผ ํ”„๋กœํ† ํƒ€์ดํ•‘์— ์ ํ•ฉํ•˜๋‹ค.

# Ryu ์ปจํŠธ๋กค๋Ÿฌ ์˜ˆ์‹œ - Packet-In ํ•ธ๋“ค๋Ÿฌ
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.ofproto import ofproto_v1_3

class SimpleSwitch(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath  # ์Šค์œ„์น˜
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser

        # ๋ชจ๋“  ํฌํŠธ๋กœ ํŒจํ‚ท ํ”Œ๋Ÿฌ๋“œ
        actions = [parser.OFPActionOutput(ofproto.OFPP_FLOOD)]
        out = parser.OFPPacketOut(
            datapath=datapath,
            buffer_id=msg.buffer_id,
            in_port=msg.match['in_port'],
            actions=actions
        )
        datapath.send_msg(out)

SDN์˜ ์žฅ์ 

์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ: ์ „์ฒด ๋„คํŠธ์›Œํฌ๋ฅผ ํ•œ ๊ณณ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ •์ฑ… ์ ์šฉ์ด ์‰ฝ๊ณ  ์ผ๊ด€์„ฑ์ด ๋†’๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ์„ฑ: API๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ์ฝ”๋“œ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ž๋™ํ™”์™€ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜๋“œ์›จ์–ด ๋…๋ฆฝ์„ฑ: ํ™”์ดํŠธ๋ฐ•์Šค ์Šค์œ„์น˜(๋ฒ”์šฉ ํ•˜๋“œ์›จ์–ด)์— OpenFlow๋ฅผ ์˜ฌ๋ ค์„œ ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์„ธ๋ฐ€ํ•œ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด: ํ”Œ๋กœ์šฐ ๋‹จ์œ„๋กœ ๊ฒฝ๋กœ์™€ ์ •์ฑ…์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํŠธ๋ž˜ํ”ฝ ์—”์ง€๋‹ˆ์–ด๋ง์ด ์œ ์—ฐํ•˜๋‹ค.


SDN์˜ ๋‹จ์ 

์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์ผ ์žฅ์• ์ : ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฃฝ์œผ๋ฉด ์ „์ฒด ๋„คํŠธ์›Œํฌ๊ฐ€ ๋งˆ๋น„๋  ์ˆ˜ ์žˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ ์ด์ค‘ํ™” ํ•„์ˆ˜.

์ง€์—ฐ: ์ƒˆ๋กœ์šด ํ”Œ๋กœ์šฐ๋งˆ๋‹ค ์ปจํŠธ๋กค๋Ÿฌ ํ†ต์‹ ์ด ํ•„์š”ํ•ด์„œ ์ฒซ ๋ฒˆ์งธ ํŒจํ‚ท ์ฒ˜๋ฆฌ์— ์ง€์—ฐ์ด ์ƒ๊ธด๋‹ค.

ํ™•์žฅ์„ฑ: ๋Œ€๊ทœ๋ชจ ๋„คํŠธ์›Œํฌ์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ํ”Œ๋กœ์šฐ ์„ค์ • ์š”์ฒญ์ด ๋ณ‘๋ชฉ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ํ˜ธํ™˜์„ฑ: ๊ธฐ์กด ๋„คํŠธ์›Œํฌ ์žฅ๋น„์™€์˜ ํ˜ผ์šฉ์ด ๋ณต์žกํ•˜๋‹ค.


์‹ค์ œ ํ™œ์šฉ ์‚ฌ๋ก€

๊ตฌ๊ธ€ B4: ๊ตฌ๊ธ€ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ๊ฐ„ WAN(Wide Area Network)์— SDN์„ ์ ์šฉํ•ด์„œ ๋งํฌ ํ™œ์šฉ๋ฅ ์„ 95% ์ด์ƒ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฐ ์‚ฌ๋ก€๋‹ค. ๊ธฐ์กด IP ๋ผ์šฐํŒ…์œผ๋กœ๋Š” 40~60%๊ฐ€ ํ•œ๊ณ„์˜€๋‹ค.

๋ฐ์ดํ„ฐ์„ผํ„ฐ ๊ฐ€์ƒํ™”: VMware NSX, Open vSwitch(OVS) ๊ธฐ๋ฐ˜ ์˜ค๋ฒ„๋ ˆ์ด ๋„คํŠธ์›Œํฌ. ๊ฐ€์ƒ ๋จธ์‹  ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์„ SDN์œผ๋กœ ์ œ์–ดํ•œ๋‹ค.

5G ์ฝ”์–ด ๋„คํŠธ์›Œํฌ: 3GPP ํ‘œ์ค€์—์„œ 5G ์ฝ”์–ด๋Š” SDN/NFV ๊ธฐ๋ฐ˜์˜ ๋ถ„๋ฆฌ๋œ ์ œ์–ด/๋ฐ์ดํ„ฐ ํ‰๋ฉด ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ–ˆ๋‹ค.


NFV์™€์˜ ๊ด€๊ณ„

SDN๊ณผ ์ž์ฃผ ๋ฌถ์ด๋Š” ๊ฐœ๋…์œผ๋กœ NFV(Network Functions Virtualization)๊ฐ€ ์žˆ๋‹ค.

ย SDNNFV
๋ชฉ์ ๋„คํŠธ์›Œํฌ ์ œ์–ด ์†Œํ”„ํŠธ์›จ์–ดํ™”๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ ์†Œํ”„ํŠธ์›จ์–ดํ™”
๋Œ€์ƒ์Šค์œ„์น˜/๋ผ์šฐํ„ฐ์˜ Control Plane๋ฐฉํ™”๋ฒฝ, IDS, ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ๋“ฑ
๊ฒฐ๊ณผํ”„๋กœ๊ทธ๋ž˜๋จธ๋ธ” ๋„คํŠธ์›Œํฌ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์–ดํ”Œ๋ผ์ด์–ธ์Šค

SDN๊ณผ NFV๋Š” ์ƒํ˜ธ ๋ณด์™„์ ์ด๋‹ค. SDN์€ ํŠธ๋ž˜ํ”ฝ ๊ฒฝ๋กœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ , NFV๋Š” ๊ทธ ๊ฒฝ๋กœ ์œ„์˜ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.