Network
น้องๆ เคยเจอปัญหาเวลาเล่นเกมออนไลน์แล้วแลคไหม? หรือเวลาดูหนัง Netflix แล้วกระตุก? ปัญหาพวกนี้ส่วนใหญ่มักจะมาจาก Network ที่ไม่ดี ซึ่ง SDN (Software Defined Networking) เนี่ยแหละ คือพระเอกที่จะเข้ามาช่วยแก้ปัญหาเหล่านี้ได้
สมัยผมทำร้านเน็ต SiamCafe เมื่อ 20 กว่าปีที่แล้ว การจัดการ Network เป็นอะไรที่ปวดหัวมาก ต้องเข้าไป Config Router ทีละตัว Switch ทีละตัว ถ้ามี 100 เครื่องก็ต้องทำ 100 รอบ คิดดูดิ! SDN มันเข้ามาเปลี่ยนโลกตรงที่ ทำให้เราสามารถควบคุมและจัดการ Network ทั้งหมดได้จากศูนย์กลาง Software ตัวเดียว ง่ายเหมือนสั่งปริ้นท์งานเลย
ทำไมมันถึงสำคัญน่ะเหรอ? ลองคิดดูว่าถ้าเรามี Network ที่ยืดหยุ่น ปรับเปลี่ยนได้ตามความต้องการของ Application แบบ Real-time มันจะช่วยลดค่าใช้จ่าย เพิ่มประสิทธิภาพ และทำให้เราสามารถสร้าง Services ใหม่ๆ ได้อย่างรวดเร็ว แค่คิดก็สนุกแล้ว!
SDN มันฉลาดตรงที่มันแยกส่วน "สมอง" (Control Plane) ออกจากส่วน "ส่งข้อมูล" (Data Plane) ลองนึกภาพว่า Control Plane คือคนขับรถ ส่วน Data Plane คือรถยนต์ คนขับรถจะคอยบอกรถยนต์ว่าจะไปทางไหน แต่ตัวรถยนต์เองก็มีหน้าที่ขับเคลื่อนไปตามคำสั่ง
OpenFlow คือภาษาที่ Control Plane ใช้คุยกับ Data Plane มันเป็น Protocol มาตรฐานที่ทำให้ Controller สามารถสั่งให้ Switch หรือ Router ทำงานตามที่เราต้องการได้ สมัยก่อนเราต้องใช้ Command Line แต่ตอนนี้เราสั่งงานผ่าน OpenFlow ได้เลย
SDN Controller คือหัวใจของ SDN มันเป็น Software ที่ทำหน้าที่เป็นศูนย์กลางในการควบคุม Network ทั้งหมด เราสามารถ Config Policy ต่างๆ ได้จาก Controller ตัวเดียว แล้ว Controller ก็จะส่งคำสั่งไปยังอุปกรณ์ Network ต่างๆ เอง
ถ้าอยากลองเล่น SDN ดู ไม่ยากเลย! มีหลายวิธีให้เลือก ทั้งแบบ Open Source และแบบ Commercial แต่ผมแนะนำให้เริ่มจาก Open Source ก่อน เพราะมันฟรีและมี Community ที่แข็งแกร่ง
ยกตัวอย่างเช่น Mininet เป็น Emulator ที่จำลอง Network ขนาดใหญ่บนเครื่องคอมพิวเตอร์ของเราได้ ทำให้เราสามารถทดลอง Config SDN ได้โดยไม่ต้องมีอุปกรณ์จริง
เริ่มจากติดตั้ง Mininet ก่อนเลย วิธีการติดตั้งง่ายมาก แค่ Copy Paste Command ด้านล่างนี้ลงใน Terminal:
sudo apt-get update
sudo apt-get install mininet
หลังจากติดตั้งเสร็จแล้ว เราก็สามารถสร้าง Topology Network ได้เลย ตัวอย่างเช่น สร้าง Topology ที่มี 2 Switch และ 2 Host:
sudo mn --topo=tree,depth=2
ขั้นตอนต่อไปคือเขียน Controller เพื่อควบคุม Network ที่เราสร้างขึ้น Controller สามารถเขียนได้หลายภาษา เช่น Python Java หรือ C++ แต่ Python เป็นภาษาที่ได้รับความนิยมมากที่สุด
ตัวอย่าง Code Python ง่ายๆ ที่ใช้ Floodlight Controller:
from pox.core import core
import pox.openflow.libopenflow_01 as of
log = core.getLogger()
class Firewall (object):
def __init__ (self, connection):
self.connection = connection
connection.addListeners(self)
def _handle_PacketIn (self, event):
packet = event.parsed
# Install a rule to drop all ICMP packets
match = of.ofp_match()
match.dl_type = 0x0800 # IPv4
match.nw_proto = 1 # ICMP
msg = of.ofp_flow_mod()
msg.match = match
msg.idle_timeout = 10
msg.hard_timeout = 30
msg.buffer_id = event.ofp.buffer_id
self.connection.send(msg)
def launch ():
core.registerNew(Firewall)
Code นี้จะ Block ICMP Traffic ทั้งหมดใน Network ของเรา ลองเอาไปปรับใช้กันดูนะ!
แน่นอนว่า SDN ไม่ใช่ทางเลือกเดียวในการจัดการ Network ยังมีทางเลือกอื่นๆ อีกมากมาย เช่น Traditional Networking, Cloud Networking หรือ Network Automation แต่ละทางเลือกก็มีข้อดีข้อเสียแตกต่างกันไป
Traditional Networking คือการ Config อุปกรณ์ Network ทีละตัว เหมาะสำหรับ Network ขนาดเล็กที่ไม่ต้องการความยืดหยุ่นมากนัก Cloud Networking คือการใช้ Services Network บน Cloud เหมาะสำหรับองค์กรที่ต้องการความรวดเร็วและ Scale ได้ง่าย Network Automation คือการใช้ Script หรือ Tools ช่วยในการ Config Network เหมาะสำหรับองค์กรขนาดใหญ่ที่มีความซับซ้อน
| คุณสมบัติ | SDN | Traditional Networking | Cloud Networking |
|---|---|---|---|
| ความยืดหยุ่น | สูง | ต่ำ | ปานกลาง |
| ความซับซ้อน | ปานกลาง | ต่ำ | สูง |
| ค่าใช้จ่าย | ปานกลาง | ต่ำ | สูง |
| การ Scale | สูง | ต่ำ | สูง |
| การจัดการ | รวมศูนย์ | กระจาย | ผ่าน Cloud Provider |
จากตารางจะเห็นได้ว่า SDN มีความยืดหยุ่นสูง สามารถ Scale ได้ง่าย และจัดการได้จากศูนย์กลาง แต่ก็มีความซับซ้อนในการ Config มากกว่า Traditional Networking ส่วน Cloud Networking ก็มีความยืดหยุ่นและ Scale ได้สูง แต่ต้องพึ่งพา Cloud Provider
เลือกทางเลือกไหนก็ขึ้นอยู่กับความต้องการและงบประมาณของแต่ละองค์กร แต่ผมเชื่อว่า SDN จะมีบทบาทสำคัญมากขึ้นในอนาคต เพราะมันช่วยให้เราสามารถสร้าง Network ที่ฉลาดและยืดหยุ่นได้ SiamCafe Blog มีบทความเกี่ยวกับ Network อีกเยอะ ลองเข้าไปอ่านกันดูนะ!
อย่าลืมว่าเทคโนโลยีมีการเปลี่ยนแปลงอยู่เสมอ SiamCafe Blog จะคอยอัพเดทข่าวสารและเทคนิคใหม่ๆ ให้ทุกคนได้เรียนรู้กันเสมอ
SDN เนี่ย มันไม่ใช่แค่เทคโนโลยีใหม่นะน้อง มันคือ Mindset ใหม่เลย สมัยผมทำร้านเน็ต Cat สมัยนั้น (ถ้าใครทันนะ) กว่าจะลากสาย กว่าจะเซ็ต router แต่ละที ปวดหัวสุดๆ แต่ SDN มันเปลี่ยนเกมเลยนะ
ตอนนั้นถ้ามี SDN คงสบายไปเยอะ สมัยนี้ยิ่งแล้วใหญ่ Network มันซับซ้อนขึ้นเยอะ การจัดการแบบเดิมๆ มันไม่ไหวแล้ว
1. เริ่มจากเล็กๆ: อย่าเพิ่งคิดจะเปลี่ยนทั้งระบบทีเดียว เริ่มจาก Project เล็กๆ ก่อน เช่น แยก VLAN สำหรับ Guest WiFi แล้วใช้ SDN Controller จัดการ Policy เอา
2. เลือก Controller ให้เหมาะ: SDN Controller มีหลายเจ้า แต่ละเจ้าก็มีจุดเด่นจุดด้อยต่างกัน ต้องเลือกให้เหมาะกับ Requirement ของเรา เช่น ถ้าเน้น Open Source ก็ลอง ONOS หรือ Ryu แต่ถ้าเน้นใช้งานง่าย มี GUI ก็ลอง Cisco APIC-EM
3. Automation is Key: หัวใจของ SDN คือ Automation พยายามเขียน Script หรือใช้ Tool ที่ช่วย Automate Task ต่างๆ ให้ได้มากที่สุด เช่น Deploy VLAN, Configure Firewall Rules, Monitor Network Traffic
# Example Python script using pyOF (OpenFlow library)
from pyof.v0x01.common.header import Header
from pyof.v0x01.controller2switch.flow_mod import FlowMod
header = Header()
header.xid = 12345 # Transaction ID
header.message_type = 2 # OFPT_FLOW_MOD
flow_mod = FlowMod()
flow_mod.header = header
flow_mod.match.in_port = 1 # Match packets arriving on port 1
flow_mod.actions = [...] # Define actions like forward to port 2
print(flow_mod.pack()) # Prepare the message to send to the switch
4. Monitor & Optimize: ติดตั้งระบบ Monitoring ที่ดี เพื่อ Monitor Performance ของ Network อย่างละเอียด แล้วใช้ข้อมูลที่ได้มา Optimize Configuration อยู่เสมอ SDN Controller ส่วนใหญ่จะมี API ให้ดึงข้อมูลออกมาได้
ไม่ยากอย่างที่คิดหรอกน้อง สมัยนี้มี GUI ให้ใช้เยอะแยะ แต่ถ้าเขียน Code เป็นก็จะได้เปรียบ เพราะจะ Customize ได้เยอะกว่า แต่ไม่ต้องกังวล เริ่มจากเรียนรู้ Concept พื้นฐานก่อน แล้วค่อยๆ ลองเขียน Script ง่ายๆ
อยู่ที่ Scale ของ Network เรานะ ถ้า Network เล็กๆ อาจจะใช้ Open Source Controller กับ Switch ที่รองรับ OpenFlow ได้ แต่ถ้า Network ใหญ่ ก็อาจจะต้องลงทุนกับ Commercial Controller และ Hardware ที่มี Feature SDN ขั้นสูงกว่า
SDN มันเหมาะกับ Network ที่ต้องการความ Flexibility, Scalability และ Automation สูงๆ เช่น Data Center, Cloud Computing, องค์กรขนาดใหญ่ที่มี Network ซับซ้อน
ไม่แทนที่หรอกน้อง SDN มันแค่เปลี่ยน Role ของ Network Engineer เฉยๆ จากที่เคยต้อง Configure Switch ทีละตัว ก็กลายเป็นต้องเขียน Code หรือ Automate Task ต่างๆ แทน Network Engineer ที่มีความรู้เรื่อง SDN จะยิ่งเป็นที่ต้องการในตลาด
SDN มันคืออนาคตของ Network Management จริงๆ น้อง มันช่วยให้เราจัดการ Network ได้ง่ายขึ้น, ยืดหยุ่นขึ้น และ Automate ได้มากขึ้น ถึงมันจะดูยาก แต่ถ้าเราค่อยๆ เรียนรู้และลงมือทำ เราก็จะสามารถใช้ประโยชน์จาก SDN ได้อย่างเต็มที่
ลองเข้าไปดู SiamCafe Blog นะ มีบทความ IT ดีๆ อีกเยอะเลย
อย่าลืมแวะไป iCafeForex ด้วยนะ เผื่อใครสนใจเรื่องลงทุน