OpenFlow คือ protocol บน Layer 2 หรือ Data link Layer (OSI Model) นั่นก็แปลได้ว่า OpenFlow จะทำหน้าที่ในการส่งต่อ Frame จาก Switch ไปยัง Switch ด้วย โดยที่เราไม่จำเป็นต้องเข้าไป config switch แต่ละตัวโดยตรง แต่จะทำการ config จากส่วนกลางหรือ Controller นอกจากนั้น OpenFlow นั้นถูกออกแบบมาเพื่อให้ใช้งานได้กับ Switch จากผู้ผลิตใดๆก็ได้ ไม่ยึดติดกับ software บน switch อีกต่อไป เพราะอุปกรณ์ทั้งหมดสามารถคุยเข้าใจกันได้ผ่าน protocol เดียวกันนั่นเอง

องค์ประกอบหลักๆของ OpenFlow มีดังต่อไปนี้

  • Flow Table เป็นตารางบน Switch แต่ละตัว หน้าที่ของ Flow Table คือ เป็นที่เก็บ Rule หรือ Flow เมื่อมี Packet วิ่งเข้ามาที่ Switch ก็จะถูกนำไปเปรียบเทียบว่าตรงกับ flow ไหน โดยในแต่ละ flow ก็จะมี คำสั่ง เป็นของตัวเอง เช่น ปล่อยผ่าน drop ทิ้ง หรือแก้ไขข้อมูลข้างในเป็นต้น โดยใน 1 switch สามารถมีได้หลาย Table ต่อกันไปเรื่อยๆ
  • Controller เป็นอุปกรณ์ที่ทำหน้าที่แก้ไข Flow ใน switch เครือข่ายของตัวเอง และในกรณีที่ Packet วิ่งเข้ามาที่ switch แต่ไม่ match กับ flow ใดๆ (table-miss) packet นั้นอาจจะถูก drop หรือ packet นั้นก็อาจจะถูก forward มาที่ controller อีกทีเพื่อให้ controller ที่จะทำหน้าที่คล้าย hub ส่ง packet ต่อไป ซึ่งถ้าทดลองเล่นโดยการ ping ดูจะพบว่า response time จากการไม่ระบุ flow นั้นจะสูงกว่าเป็นร้อยเท่าเลยทีเดียว

หลักการเขียนโปรแกรมบน Controller

คล้ายๆกับการเขียนโปรแกรมบังคับหุ่นยนต์ ถ้าเจอ Dest IP/Port  นี้ให้ forward ไปที่ switch port ไหน

Controller 1 ตัว สามารถควบคุมได้หลาย Switch แต่ผมไม่แน่ใจว่ามัน config อย่างไรเพราะไม่เห็นว่ามันมี method ให้เซท หรือ detect ว่ามาจาก switch ใด อาจจะเป็นการ broadcast ไปยังทุกๆ switch ก็เป็นไปได้ ไว้เดี่ยวเข้าใจแล้วจะมาลองอัพเดทอีกทีหนึ่ง

แล้ว SDN ละคืออะไร SDN ย่อมาจาก Software-defined networking เป็นกระบวนการที่ใช้ software ในการควบคุมการทำงานของ network ซึ่ง software ที่ว่านี่ก็คือ software ที่ทำการ implement protocol OpenFlow นั่นเอง