BGP คืออะไร ? ทำไมทำให้ Facebook ล่มไปได้ถึงเกือบ 7 ชั่วโมง ?

เมื่อวันก่อนนี้ (4 ตุลาคม 2021) มีเหตุการณ์ใหญ่เกิดขึ้นอย่างระบบที่มีผู้คนใช้ทั่วโลกอย่าง Facebook ไม่สามารถเข้าใช้งานได้กว่า 7 ชั่วโมงเต็ม ๆ เลยทีเดียว ตอนที่เกิดเรื่องขึ้น เราก็สงสัยเหมือนกันว่า เอ๊ะ ระบบอย่าง Facebook มีการทำ HA (High Availability) แน่นอน และมี Data Centre อยู่ทั่วโลกที่พร้อมจะรับโหลดทันทีเมื่อ Data Centre สักที่มีปัญหาจนทำให้เข้าถึงไม่ได้ จนมาตอนเช้าที่ประเทศไทย ตื่นมาระบบก็เข้าใช้งานได้ปกติแล้ว และมีข่าวแจ้งออกมาว่าเป็นเพราะการตั้งค่า BGP ที่ทำให้ Node ของ Facebook ออกจาก Internet ไป วันนี้เรามาทำความรู้จักกับ BGP กันดีกว่า ว่า BGP ที่ทำให้ Facebook หายไป 7 ชั่วโมงมันเอาไว้ทำอะไรกันแน่

Internet ซับซ้อนกว่าที่เราคิด

ปกติเวลาเราวาด Diagram บอกว่า เราจะส่งข้อมูลออกจาก ต้นทาง ไปยัง ปลายทาง ผ่าน Internet เราก็มักจะแทนด้วย การวาดก้อนเมฆ และบอกว่า เออ อันนี้มันคือ Internet นะ ซึ่งการวาดแบบนั้นเพื่อเป็นการทำให้ Internet มัน Abstract เพราะเราไม่ได้สนใจ แต่ในความเป็นจริงแล้ว ถ้าเรามองลึกลงไปในก้อนเมฆนั้นมันมีอะไรที่ซับซ้อนกว่านั้น

ใน Internet จริง ๆ แล้วมันประกอบด้วยเครื่องคอมพิวเตอร์ต่อกันเยอะมาก ๆ มองให้ลึกขึ้น ตั้งแต่ เราเชื่อมต่อกับ ISP (Internet Service Provider) หรือผู้ให้บริการอินเตอร์เน็ต อย่าง AIS, True และ 3BB ที่เราใช้บริการอยู่ ซึ่งภายใน ISP เองก็จะมีระบบเครือข่ายอยู่ข้างในอีก เพราะเขาไม่ได้ให้บริการเราคนเดียว มันก็อาจจะเป็นชุมสายที่รวมสายที่ต่อเข้าบ้านเรากับบ้านแถว ๆ นั้นเข้าด้วยกัน

หลาย ๆ ชุมสายต่อเข้าด้วยกันไปเรื่อย ๆ สุดท้ายมันก็จะไปจบที่พวก Gateway หรือทางเช้าออกจาก ISP ซึ่งใน 1 ISP มักจะมีมากกว่า 1 Gateway แน่นอน เพื่อรองรับ Traffic ที่เข้าออกจาก ISP จำนวนมากนั่นเอง ซึ่งในปัจจุบัน ISP หรือ กลุ่มของ Router ที่ถูกจัดการโดยองค์หนึ่ง เราจะเรียกมันว่า AS (Autonomous System) ตัวอย่างเช่น ISP ต่าง ๆ ก็ถูกแยกออกเป็นแต่ละ AS และ มีเลขเรียกเป็นตัวของตัวเอง เช่น AIS ก็จะเป็น AS45430 หรือจะเป็นของ Jastel ก็จะเป็น AS45629 (ถ้าอยากดูว่าในไทยเรามีการเชื่อมต่อไปที่ไหนบ้าง NECTEC มี Internet Map ของไทยให้เราเข้าไปสืบค้นได้เลย ที่นี่) ถ้าเราดูเข้าไปในเรื่องของ AS เราก็สามารถแบ่งได้ออกเป็นอีก 2 แบบใหญ่ ๆ คือ Stub และ Transit Autonomous System ลองไปหาข้อมูลเพิ่มได้

มองให้กว้างกว่านั้นอีกคือ เมื่อ ISP หลาย ๆ ISP ต่อเข้าด้วยกัน เช่น เราบอกว่า เราจะเชื่อมต่อจาก ISP ของ AIS ไปที่ 3BB เราก็ต้องมี Interlink ระหว่าง ISP เข้าด้วยกัน ไม่งั้น เราก็จะไม่สามารถเชื่อมต่อไปที่ปลายทางได้ แต่แน่นอนว่า ถ้า ISP จะต้องเชื่อมต่อไปทุกที่ คือเรื่องใหญ่แน่นอน เพราะมันใช้เงินเยอะมาก ๆ ในการจัดการเรื่องเหล่านี้ เพื่อให้ลดต้นทุนในการเชื่อมต่อลง จึงใช้วิธีว่า เราก็ให้ข้อมูลวิ่งผ่านสักที่นึง ที่สามารถไปในที่ ๆ เราต้องการได้ สุดท้ายแล้ว เมื่อมันต่อ ๆ ไปเรื่อย ๆ จนเป็นเครือข่ายขนาดใหญ่ จะไปสักที่ เราก็อาจจะไปได้มากกว่า 1 เส้นทางนั่นเอง ทำให้เกิดคำถามว่า เอ๊ะ ในเมื่อเราสามารถไปได้หลายเส้นทาง เครื่องมันควรจะเลือกว่าจะไปทางไหนดี และเราไปไหนได้บ้างก็เป็นอีกปัญหานึง ทำให้เรื่องของ Routing Protocol เลยเป็นเรื่องสำคัญมาก ๆ

บริษัทบรอดแบนด์ในเกาหลีใต้ ฟ้อง Netflix ให้ช่วยจ่ายเงินต้นทุนบริการ เนื่องจากทราฟิกเพิ่มสูงขึ้นมาก
SK Broadband ผู้บริการอินเทอร์เน็ตบรอดแบนด์ในเกาหลีใต้ ได้ฟ้องร้อง Netflix เพื่อให้บริษัทช่วยจ่ายเงินต้นทุนทราฟิกอินเทอร์เน็ต และต้นทุนการดู

นอกจากนั้น ในเมื่อข้อมูลมันต้องวิ่งผ่านที่สักที่ มันก็ต้องทำให้คนกลางเหล่านี้ต้องรับภาระในการส่งข้อมูลไปในที่ต่อไปเรื่อย ๆ เลยทำให้พวก ISP เอง หรือพวก Data Centre หรือคนที่ถือ AS เป็นของตัวเอง เวลาเราจะเชื่อมต่อกับใคร เลยจะต้องมีการเหมือนกับซื้อ Bandwidth เลยว่า เราจะเชื่อมต่อกันได้ที่ Bandwith เท่าไหร่ เหมือนกับเวลาเราซื้อ Package Internet ที่บ้านของเราเช่น เชื่อมต่อได้ 500 Mbps Max อะไรแบบนั้น ในระดับบ้านมันก็เฉย ๆ เนอะ แต่ถ้าเป็น ISP ละ มันก็จะ Scale ใหญ่มาก ๆ ล่าสุด ของ Series Squid Game ที่ได้รับความนิยมมาก ๆ คนเข้าไปดูเยอะมาก ๆ ทำให้ Bandwidth ที่วิ่งผ่านระหว่าง ISP ไปถึง Netflix มันเพิ่มขึ้นอย่างหนาแน่น จน SK Broadband ที่เป็น ISP ของฝั่งเกาหลียื่นฟ้อง Netflix ให้จ่ายค่าใช้บริการระบบเครือข่ายอินเตอร์เน็ตและค่าบำรุงรักษา

Routing Protocol คืออะไร ?

ไม่ต้องตกใจเด้อ มันมีหลายวิธีในการทำ Routing ถ้าสนใจ ลองเอาแต่ละวิธีไปหาอ่านต่อได้

ในการที่ข้อมูลจะส่งถึงปลายทางได้ มันจะต้องมีการหาเส้นทางในการเดิน เหมือนกับเวลาเราเดินทางในโลกแห่งความเป็นจริง เราก็ต้องเปิดแผนที่ หรือ GPS เพื่อหาเส้นทางจากที่ ๆ เราอยู่ ถึงปลายทางที่เราต้องการ ซึ่งในโลกของ Computer Network เราใช้สิ่งที่เรียกว่า Routing Protocol

หลัก ๆ แล้ว Routing Protocol จะแบ่งออกเป็น 2 ประเภทใหญ่ ๆ นั่นคือ Interior และ Exterior หรือก็คือ ภายใน และ ภายนอก โดยที่ Interior จะเป็น Routing Protocol สำหรับการหาเส้นทางในเครือข่ายเอง เช่น เราจะส่งข้อมูลภายในเครื่องที่อยู่ใน ISP เดียวกัน หรืออยู่ใน Data Centre เดียวกันเป็นต้น ตัวอย่างของ Interior Routing Protocol เช่น RIP (Routing Information Protocol) และ IGRP (Interior Gateway Protocol) เป็นต้น

อีกประเภทของ Routing Protocol คือ Exterior Routing Protocol ตามชื่อเลยคือ เป็น Protocol สำหรับการค้นหาเส้นทางระหว่างเครือข่ายด้วยกันเอง เช่น เราบอกว่า เราอยู่ในเครื่องข่าย A และต้องการที่จะส่งข้อมูลไปยังเครือข่าย B เราจะต้องใช้ Routing Protocol แบบ Exterior แทน ตัวอย่างเช่น BGP (Border Gateway Protocol) ซึ่งก็คือเรื่องที่เราจะมาเล่าให้อ่านในวันนี้

ถ้าเกิดไม่มี Exterior Routing Protocol จะเป็นยังไง ?

ก่อนเราจะไปเล่าถึง BGP เราอยากเล่าถึงเมื่อก่อนมาก ๆ ตอนที่ Internet ยังพึ่งเกิดไม่นาน ตอนนั้นมีผู้ให้บริการอินเตอร์เน็ต (ISP) มาหลาย ๆ เจ้าแล้วละ แต่ปัญหาคือว่า แต่ละเครือข่าย เขาใช้คนละ Protocol ในการคุยกันหมดเลย ทำให้ ณ เวลานั้น เราไม่สามารถคุยกับเครื่องคอมพิวเตอร์ที่อยู่อีกเครือข่ายได้เลย เหมือนกับเราคุยกันคนละภาษา จนกระทั่งเรามีพวก Exterior Routing Protocol นี่ละ ที่ทำให้การเชื่อมต่อระหว่างเครือข่ายเป็นไปได้จนถึงวันนี้ นั่นเองงงงงงงงงงง

BGP คืออะไร ?

BGP (Border Gateway Protocol) เป็น Protocol สำหรับการแลกเปลี่ยนเส้นทางของระบบ Network แบบอัตโนมัติเลย ถ้าเรานึกถึงเวลาเราจะส่งข้อมูล อย่างที่เราบอกว่า มันจะมีอยู่ 2 ส่วนใหญ่ ๆ คือ เราต่อตรงถึงเลย อันนี้ง่ายแน่นอน แต่ถ้าเราต่อไม่ถึงละ เราจะทำยังไงดี

เราลองมาดูเคสแรกกัน เราบอกว่า เรามี AS อยู่ทั้งหมด 3 ตัวด้วยกัน คือ AS 1,2 และ 3 เชื่อมต่อกันอยู่ โดยที่เส้นจะแทน การเชื่อมต่อระหว่าง AS เราจะเห็นได้เลยว่าจะมีแค่ AS2 เท่านั้นที่สามารถเดินไป AS 1 และ 3 ตรง ๆ ได้ ในขณะที่ AS 1 และ 3 สามารถเดินไปได้แค่ AS2 ตรง ๆ เท่านั้น ไม่สามารถเดินข้ามได้

ทำให้ในมุมมองของ AS1 และ AS3 ก็จะรู้จักแค่ AS2 เท่านั้น แต่ AS2 ก็จะรู้จักทั้ง AS1 และ AS3 ทีนี้ ถามว่า ถ้าเราจะส่งข้อมูลจาก AS1 ไปถึง AS3 ได้อย่างไร สิ่งที่ BGP ทำคือ มันจะ Advertise ออกไปว่า มันสามารถเชื่อมต่อไปที่ไหนได้บ้าง โดยใช้ Cost เท่าไหร่ (ต้องผ่านกี่จุดถึงจะถึงปลายทาง)

ตัวอย่างเช่น AS1 ก็จะมี Routing Table เป็น 2 ชิ้นด้วยกันคือ AS1 -> AS1 ด้วย Cost 0 หรือก็คือ เดินไปถึงตัวเอง และ AS1 -> AS2 ด้วย Cost 1 หรือก็คือ การเดินไป 1 Step เพื่อไปถึง AS2 ตัวตารางนี้แหละ AS1 ก็จะทำการปล่อยข้อมูลออกไปให้คนที่เชื่อมต่อกับ AS1 อยู่ ในที่นี้ก็คือ AS2 นั่นเอง

ใน AS2 ก็จะมี Routing Table อยู่เหมือนกัน ก็คือ AS2 -> AS2 ด้วย Cost 0 (เชื่อมต่อภายใน AS กันเอง), AS2->AS1 ด้วย Cost 1 และ AS2 -> AS3 ด้วย Cost 1 นั่นเอง มันก็จะยิง Table นี้แหละ ไปให้คนที่เชื่อมต่ออยู่กับ AS2 ในที่นี้คือ AS1 และ 3

จะเห็นว่า ตัวสีแดงคือ AS3 <-> AS1 ซึ่งต้องผ่าน AS2 โดยมันรู้จักจากข้อมูลที่ AS2 ส่งกลับมาให้

ในฝั่งของ AS3 เมื่อได้รับข้อมูลจาก AS2 ที่พึ่งส่งมาให้ มันก็จะเอามาเทียบกับ Routing Table ที่มันทำไว้คือ AS3 -> AS3 ด้วย Cost 0 และ AS3 -> AS2 ด้วย Cost 1 แต่เมื่อเราเทียบ Table ภายใน AS3 กับ Table ที่ AS2 โยนมาให้ เราจะเห็นได้ว่า มันมีอีก AS นึงที่ AS3 ไม่เคยเจอมาก่อนคือ AS1 นั่นเอง โดยเส้นทางจะต้องวิ่งจาก AS3 -> AS2 -> AS1 ด้วย Cost 2 นั่นเอง กลับกัน ในฝั่งของ AS1 เมื่อได้รับข้อมูลจาก AS2 ก็จะทำการ Update Routing Table ทำให้ทั้ง AS1,2 และ 3 รู้จักกันหมด

ในโลกแห่งความเป็นจริง มันเชื่อมต่อกันซับซ้อนกว่านี้มาก การเดินจากจาก ASx ไปถึง ASy มันอาจจะมีหลายทางให้เราเดินได้ แล้วอะไรละที่ทำให้ BGP สามารถบอกให้ Router เลือกเส้นทางที่สั้นที่สุดได้ ก็มาจาก Cost ที่อยู่ใน Table ที่เราไล่ Update ไปนั่นเอง

นอกจากนั้น ถ้าเราทำแค่นั้น Route ของเราก็จะเพิ่มขึ้นเรื่อย ๆ แน่ ๆ ละ แต่ถ้าเกิดวันนึงเราบอกว่ามี AS ตัวนึงไม่ทำงาน หรือไม่อยากทำงานแล้ว คนที่เหลือจะรู้ได้อย่างไรว่า AS นี้มันหายไป การที่จะบอกว่าหายไป อาจจะยากไปหน่อย แต่การที่บอกว่า ชั้นยังมีชีวิตอยู่นะ ยังไม่ไปไหน น่าจะง่ายกว่า หรือก็คือ การส่งข้อมูลเพื่อเป็นการกระตุ้นว่าชั้นยังอยู่เรื่อย ๆ นั่นเอง เราเรียกมันว่า Keep-alive Message

และสุดท้าย เมื่อมี AS สักตัวล่ม หรือมีปัญหาขึ้นมา มันก็จะต้องส่งข้อมูลไปบอกคนอื่น ๆ ด้วยว่าเห้ย AS นี้บั้ยบายไปแล้วนะ จัดการข้อมูลออกไปเลย หรือมีการส่งอะไรบางอย่าง เราก็จะมีสิ่งที่เรียกว่า Notification Message ส่งไปตาม AS ต่าง ๆ

นั่นทำให้ในระบบ BGP จะมี Message อยู่ทั้งหมด 4 ประเภทใหญ่ ๆ ด้วยกันที่ส่งกันในระบบคือ

  • Open Message -> บอกทักทาย ระบบที่เรากำลังเชื่อมต่อด้วยอยู่ ว่ามีชั้นแล้วนะ
  • Update Message -> ส่ง Routing Table ไปยังเพื่อนข้างบ้าน
  • Keep-alive Message -> ชั้นยังอยู่นะ ส่งทุก 30 วินาที
  • Notification Message -> แจ้งเตือนข้อผิดพลาด หรือข้อมูลที่จำเป็น

เกิดอะไรขึ้นกับ Facebook ??

Update about the October 4th outage
To those around the world who depend on us, we are sorry for the inconvenience caused by today’s outage across our platforms.

สิ่งที่เกิดขึ้นกับ Facebook คือ Node ของ Facebook หายออกไปจาก Routing Table หมดเลย พอ Node มันหายไป เหล่า Node ที่เหลือก็จะรู้ทันทีว่ามันมี Node หาย ทำให้มันก็จะไล่ Update ผ่าน Update Message ว่า Node นี้ ๆ หายไปแล้วนะ ไปไม่ได้แล้ว ทำให้เราเข้า Facebook ไม่ได้นั่นเอง หรือพูดง่าย ๆ ก็คือ ในช่วงเวลาที่หายไป Facebook ออกจาก Internet ไปนั่นเอง

More details about the October 4 outage
Now that our platforms are up and running after yesterday’s outage, we are sharing more detail on what happened and what we’ve learned.

ความพีคของเรื่องนี้เราว่ามันอยู่ที่ว่าเมื่อ IP Address ทั้งหมดของ Facebook ไม่สามารถเข้าใช้งานได้เลย เมื่อเกิดปัญหาขึ้นแทนที่ Engineer จะ Remote เข้าไปที่เครื่องเพื่อตรวจสอบ และ แก้ปัญหา กลายเป็นว่า มันก็จะเข้าไม่ได้ เพราะ IP Address มันเข้าถึงไม่ได้ ทำให้เราว่า การแก้ปัญหาน่าจะต้อง On-Site และเช็ค Configuration (การตั้งค่า) กว่าจะกลับมาได้

และสุดท้าย หลังจากเวลาผ่านไปเกือบ 7 ชั่วโมง ตอนวันที่ 5 ตุลาคมเวลา 4:28 ของประเทศไทย IP Address ของ Facebook ก็กลับเข้าสู่ Internet อีกครั้งทำให้เราสามารถเข้าใช้งาน Facebook ได้ตามปกติ

สรุป

จากประเด็นที่ Facebook ล่มอย่างนาน ปัญหาไม่ได้เกิดแค่ฝั่งของ Facebook อย่างเดียวเท่านั้น แต่ปัญหามันยังลามไปถึงเว็บต่าง ๆ ที่ใช้งาน API ของ Facebook ต่าง ๆ ด้วยเช่นพวก Authentication ต่าง ๆ ก็ชิบหายกันไป เราว่าตอนนั้นใน Data Centre ของ Facebook น่าจะมีอาการตึกสั่นกันบ้างแหละ Engineer วิ่งพล่านแก้ปัญหากันรัว ๆ ไหน ๆ เหตุการณ์มันก็เกิดขึ้นแล้ว ก็เลยเอาเรื่องนี้มาเป็นบทเรียนในการเล่าเรื่องของ Protocol ที่เราใช้งานกันทุกวินาที อย่าง BGP ที่เป็นเหมือน GPS พาข้อมูลของเราให้ไปถึงปลายทางอย่างถูกต้อง โดยใช้เส้นทางที่สั้นที่สุดได้กัน