NetKubeLab EN

Network Fundamental เครือข่ายวงเดียว

โดเมนการชน กับ โดเมนกระจายข่าว — เส้นแบ่งที่ทุกคนท่องได้แต่ชี้ไม่ถูก

อุปกรณ์แต่ละชนิดหยุดอะไรได้บ้าง สามสิบปีที่เส้นแบ่งหนึ่งหดจนหายไป ส่วนอีกเส้นยังอยู่ที่เดิม

· หมวด 3 · เครือข่ายวงเดียว · 10 นาที

สองคำนี้อยู่ในหนังสือเรียนทุกเล่ม และคนส่วนใหญ่ตอบได้ว่าคืออะไร

แต่คำถามที่ตอบยากกว่าคือ เส้นแบ่งอยู่ตรงไหน และ ทำไมสองเส้นนี้ถึงไม่ได้อยู่ ที่เดียวกัน

คำตอบเป็นเรื่องของประวัติศาสตร์สามสิบปี ที่เส้นหนึ่งค่อย ๆ หดจนหายไป ส่วนอีกเส้น ยังอยู่ที่เดิมจนต้องคิดวิธีใหม่มาแบ่งมัน

ถ้ายังไม่เคยดู เริ่มตรงนี้

เครื่องที่คุณใช้อยู่อาจมีบริดจ์ทำงานอยู่แล้วโดยไม่รู้ตัว

$ ifconfig | grep -A2 bridge

บนเครื่องที่ใช้เขียนบทนี้ ได้ผลว่า

  proto stp   maxaddr 100   timeout 1200
  member: vmenet0 flags=3<LEARNING,DISCOVER>

คำว่า LEARNING ในบรรทัดนั้นคือกลไกทั้งหมดของบทความนี้ และตัวเลขสองตัวข้างบน จะกลับมาอีกครั้งตอนท้าย

โดเมนการชน คือระยะที่การชนยังมีความหมาย

บทความ Ethernet อธิบายไว้แล้วว่าเฟรม ต่ำสุดต้อง 64 ไบต์ เพราะผู้ส่งต้องยังส่งอยู่ตอนที่สัญญาณชนวิ่งกลับมาถึง

ทุกเครื่องต่อเข้าฮับตัวเดียว สัญญาณจากใครก็ไปถึงทุกคน การส่งพร้อมกันจึงชนกัน และทั้งวงต้องหยุด

โดเมนการชนคือขอบเขตที่การส่งพร้อมกันสองครั้งทำให้เกิดการชน ถ้าอยู่คนละโดเมน ส่งพร้อมกันได้โดยไม่กระทบกัน

ขนาดของมันไม่ได้ตั้งขึ้นตามใจ มันคำนวณมาจาก slot time ซึ่งเป็นตัวเลขเดียวกับที่ กำหนดเฟรมต่ำสุด

  rate       slot time   one way    theoretical   actual limit
  10 Mbps     51.20 us   25.60 us       5,120 m       2,500 m
  100 Mbps     5.12 us    2.56 us         512 m         205 m

ตัวเลขจริงสั้นกว่าตัวเลขทฤษฎีเพราะอุปกรณ์ระหว่างทางก็กินเวลาด้วย แต่อัตราส่วน คือสิ่งที่สำคัญ เร็วขึ้นสิบเท่า ระยะหดลงสิบเท่า

เหตุผลคือ slot time นับเป็นจำนวนบิต ไม่ใช่หน่วยเวลา 512 บิตที่ 10 Mbps กินเวลา 51.2 ไมโครวินาที แต่ 512 บิตเดิมที่ 100 Mbps กินเวลาแค่ 5.12

รีพีตเตอร์ — ยืดสายออกไป และยืดปัญหาไปด้วย

อุปกรณ์ตัวแรกที่คนใช้ขยายเครือข่ายคือรีพีตเตอร์ หน้าที่ของมันคือรับสัญญาณที่อ่อนลง แล้วส่งต่อออกไปให้แรงเหมือนเดิม

มันทำงานที่ระดับสัญญาณ ไม่ได้อ่านว่าข้างในเป็นเฟรมของใคร ฮับคือรีพีตเตอร์ หลายพอร์ตนั่นเอง

ผลที่ตามมาคือสิ่งที่คนสมัยนั้นต้องคำนวณกันจริง ๆ

  hub ports   collision domains   simultaneous senders
      8               1                     1
     24               1                     1
     48               1                     1

ต่อฮับกี่ตัวก็ยังเป็นโดเมนเดียว และยิ่งต่อยาว ยิ่งเข้าใกล้เพดานระยะที่ตาราง ข้างบนกำหนดไว้

เลขคณิตที่ฆ่าวิธีนี้ทิ้ง

ลองคำนวณต่อไปที่ 1 Gbps ด้วย slot time เดิม

  rate       slot time   one way    theoretical
  1 Gbps       0.51 us    0.26 us          51 m

51 เมตร สั้นกว่าสายหนึ่งเส้นที่มาตรฐานอนุญาตให้ยาว 100 เมตร

บทความ ชั้นกายภาพ อธิบายไว้แล้วว่าทำไม สายต้องหยุดที่ร้อยเมตร ตอนนี้เราได้ตัวเลขที่บอกว่า ถ้ายังใช้ slot time เดิม โดเมนการชนจะเล็กกว่าสายเส้นเดียว ซึ่งแปลว่าใช้ไม่ได้เลย

มาตรฐานจึงต้องขยาย slot time สำหรับกิกะบิต แล้วสุดท้ายก็แทบไม่มีใครใช้โหมดที่ ต้องใช้มัน เพราะถึงตอนนั้นทุกคนย้ายไปสวิตช์กันหมดแล้ว

บริดจ์ — อุปกรณ์ตัวแรกที่อ่านว่าข้างในเป็นอะไร

จุดเปลี่ยนคืออุปกรณ์ที่ไม่ได้ส่งต่อสัญญาณดิบ แต่อ่านที่อยู่ปลายทางในเฟรมก่อน แล้วค่อยตัดสินใจ

บริดจ์อ่านที่อยู่ในเฟรม แล้วส่งออกเฉพาะพอร์ตที่จำเป็น สองฝั่งจึงส่งพร้อมกันได้ กลายเป็นคนละโดเมนการชน

RFC 1493 ปี 1993 ซึ่งอธิบายวิธีจัดการบริดจ์ นิยามตารางของมันไว้ว่า

"A table that contains information about unicast entries for which the bridge has forwarding and/or filtering information. This information is used by the transparent bridging function in determining how to propagate a received frame."

คำว่า filtering คือสิ่งที่ฮับทำไม่ได้ ฮับส่งต่อทุกอย่าง บริดจ์เลือกได้ว่า จะไม่ส่ง

และรายการในตารางนั้นมีสถานะบอกว่ามันมาจากไหน

  learned(3)   บริดจ์เรียนรู้เอง จากเฟรมที่วิ่งผ่าน
  self(4)      ที่อยู่ของตัวบริดจ์เอง
  mgmt(5)      คนตั้งไว้เอง
  invalid(2)   เคยเรียนรู้มา แต่หมดอายุแล้ว

บริดจ์ไม่ต้องมีใครมาตั้งค่าให้ มันดูที่อยู่ต้นทางของเฟรมที่วิ่งผ่านพอร์ตไหน แล้วจำว่าที่อยู่นั้นอยู่ทางพอร์ตนั้น นั่นคือคำว่า LEARNING ที่เครื่องผมแสดงไว้ ตั้งแต่ต้นบท

ความจำที่ต้องลืม และตัวเลขที่ไม่ตรงกับมาตรฐาน

ที่อยู่ที่เรียนรู้มาต้องหมดอายุ ไม่งั้นย้ายเครื่องแล้วเฟรมจะวิ่งไปผิดพอร์ตตลอดไป

RFC 1493 กำหนดค่านี้ไว้พร้อมคำแนะนำ

"The timeout period in seconds for aging out dynamically learned forwarding information. 802.1D-1990 recommends a default of 300 seconds."

แต่บริดจ์บนเครื่องที่ผมใช้เขียนบทนี้ตั้งไว้ที่

  standard recommends    300 s
  this machine ships   1,200 s

ต่างกันสี่เท่า และนี่ไม่ใช่ความผิดพลาด มันคือการตัดสินใจของผู้พัฒนาว่าจะแลก ความเร็วในการตามการย้ายเครื่อง กับจำนวนครั้งที่ต้องกระจายเฟรมออกทุกพอร์ตเพราะ ลืมไปแล้ว

ค่า maxaddr 100 ก็เป็นการแลกแบบเดียวกัน คือจำได้แค่ร้อยที่อยู่ ถ้าเกินกว่านั้น ต้องทิ้งของเก่า

สิ่งที่บริดจ์แบ่งไม่ได้

บริดจ์รู้ว่าที่อยู่ปลายทางไหนอยู่พอร์ตไหน จึงเลือกส่งได้

แต่ถ้าปลายทางคือ "ทุกคน" มันเลือกอะไรไม่ได้เลย เฟรมกระจายข่าวต้องออกทุกพอร์ต เสมอ ไม่มีทางอื่น

  frame type    bridge behaviour
  unicast       ส่งออกพอร์ตเดียวที่รู้ว่าปลายทางอยู่
  unicast new   ยังไม่รู้ว่าอยู่ไหน จึงส่งออกทุกพอร์ต
  broadcast     ส่งออกทุกพอร์ตเสมอ

บรรทัดที่สองสำคัญกว่าที่คิด เฟรมที่ยังไม่รู้ปลายทางก็ถูกกระจายเหมือนกัน ซึ่งเป็นเหตุผลที่ค่า timeout ข้างบนมีผลกับปริมาณทราฟฟิกจริง

โดเมนกระจายข่าว คือขอบเขตที่คำว่า "ทุกคน" ครอบถึง

โดเมนกระจายข่าวคือกลุ่มเครื่องที่เฟรมกระจายข่าวใบเดียวไปถึงทุกตัว

และเพราะบริดจ์ต้องส่งต่อเฟรมกระจายข่าวเสมอ การใส่บริดจ์เพิ่มไม่ได้ทำให้โดเมน กระจายข่าวเล็กลงเลยแม้แต่นิดเดียว

นี่คือจุดที่สองโดเมนแยกทางกัน

บริดจ์แบ่งโดเมนการชนออกเป็นสองส่วน แต่โดเมนกระจายข่าวยังคงครอบทั้งสองส่วนอยู่เหมือนเดิม

บทความ ARP แสดงไว้แล้วว่าทุกการติดต่อในวง เริ่มด้วยคำถามที่ถามทุกคน ยิ่งโดเมนกระจายข่าวใหญ่ คำถามพวกนั้นยิ่งไปรบกวนเครื่อง ที่ไม่เกี่ยวข้องมากขึ้น

และ RFC 1286 ปี 1991 เตือนเรื่องลูปในบริดจ์ไว้ตรง ๆ ว่า

"unlike transparent bridging this is not catastrophic to the network if there are loops"

คำว่า catastrophic หมายถึงบริดจ์ เฟรมกระจายข่าวที่วนในลูปไม่มีอะไรหยุดมัน เพราะเฟรมไม่มี TTL ซึ่งเป็นเหตุผลที่ STP ต้องมีอยู่

สวิตช์ — บริดจ์ที่มีพอร์ตเยอะและทำงานในฮาร์ดแวร์

สวิตช์ไม่ใช่แนวคิดใหม่ มันคือบริดจ์ที่มีพอร์ตจำนวนมากและตัดสินใจในฮาร์ดแวร์

ผลที่ตามมาคือจำนวนโดเมนการชน

  device       ports   collision domains
  hub             24                   1
  bridge           2                   2
  switch          24                  24

ทุกพอร์ตของสวิตช์คือโดเมนการชนของตัวเอง ซึ่งแปลว่ายี่สิบสี่เครื่องส่งพร้อมกัน ได้ทั้งหมด แทนที่จะได้ทีละเครื่อง

แต่คอลัมน์ที่ไม่ได้อยู่ในตารางนั้นคือโดเมนกระจายข่าว ซึ่งยังเป็น 1 ทั้งสามแถว

ฟูลดูเพล็กซ์ — เมื่อโดเมนการชนหดจนเหลือศูนย์

ขั้นสุดท้ายคือการเลิกใช้สายร่วมโดยสิ้นเชิง เมื่อพอร์ตสวิตช์ต่อกับเครื่องเดียว และมีคู่สายแยกสำหรับแต่ละทิศทาง การชนกันไม่มีทางเกิดขึ้นได้อีก

บนเครื่องที่ใช้เขียนบทนี้

$ ifconfig en1 | grep media
  media: autoselect <full-duplex>

เมื่อเป็นฟูลดูเพล็กซ์ CSMA/CD ถูกปิดการทำงาน ไม่ใช่แค่ไม่ได้ใช้ แต่ถูกปิด เพราะไม่มีอะไรให้ตรวจ

โดเมนการชนจึงหดจากสองพันห้าร้อยเมตร เหลือเป็นศูนย์ในทางปฏิบัติ ภายในเวลาประมาณ ยี่สิบปี

เส้นแบ่งอยู่ตรงไหน — ตารางที่ตอบคำถามตั้งต้น

  device       stops collisions   stops broadcast
  repeater             no                no
  hub                  no                no
  bridge              yes                no
  switch              yes                no
  router              yes               yes

มีอุปกรณ์ชนิดเดียวที่หยุดเฟรมกระจายข่าวได้ คือเราเตอร์ เพราะมันไม่ส่งต่อเฟรม มันอ่านแพ็กเก็ตข้างในแล้วสร้างเฟรมใหม่ ตามที่บทความ การเลือกเส้นทาง อธิบายไว้

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

เมื่อมันโกหก

"สวิตช์แบ่งโดเมนกระจายข่าว" ไม่แบ่ง สวิตช์ธรรมดาที่ไม่ได้ตั้ง VLAN คือโดเมน กระจายข่าวเดียวทั้งตัว

"ฮับกับสวิตช์ต่างกันแค่ความเร็ว" ต่างกันที่ฮับส่งต่อสัญญาณโดยไม่อ่าน ส่วน สวิตช์อ่านที่อยู่ก่อน ผลคือจำนวนโดเมนการชนต่างกันเท่ากับจำนวนพอร์ต

"เดี๋ยวนี้ไม่มีการชนแล้ว ไม่ต้องรู้เรื่องนี้" จริงสำหรับสายทองแดงแบบสวิตช์ แต่ Wi-Fi ยังใช้ตัวกลางร่วมกันอยู่ และ แนวคิดโดเมนการชนยังใช้อธิบายมันได้ตรง ๆ

"ตารางที่อยู่ของสวิตช์ตั้งค่าเอาเอง" ค่ามาตรฐานคือ learned คือเรียนรู้เองจาก เฟรมที่วิ่งผ่าน ไม่มีใครตั้ง

"โดเมนกระจายข่าวใหญ่แค่ไหนก็ได้ ถ้าสวิตช์แรงพอ" ปัญหาไม่ได้อยู่ที่สวิตช์ แต่อยู่ที่ทุกเครื่องในโดเมนต้องประมวลผลเฟรมกระจายข่าวทุกใบที่ผ่านมา

ตัวอย่างจริงจากงานจริง

กรณีที่ 1 — เครือข่ายช้าลงเมื่อมีเครื่องเพิ่ม

สถานการณ์ เพิ่มเครื่องในวงแล้วทุกคนรู้สึกช้าลง ทั้งที่แบนด์วิดท์ยังเหลือ

อ่านอย่างไร ถามว่าอยู่โดเมนกระจายข่าวเดียวกันกี่เครื่อง เพราะเฟรมกระจายข่าว ทุกใบไปถึงทุกเครื่อง และทุกเครื่องต้องประมวลผลมัน ปริมาณงานจึงโตตามจำนวนเครื่อง แม้ทราฟฟิกจริงจะไม่ได้โตตาม

สิ่งที่ยังไม่ได้พิสูจน์ อาการช้าลงมาจากหลายสาเหตุได้ การนับจำนวนเครื่องบอก ว่ามีความเสี่ยง ไม่ได้บอกว่าเป็นสาเหตุจริง ต้องดูสัดส่วนเฟรมกระจายข่าวจริง

กรณีที่ 2 — ตัดสินใจว่าจะแบ่ง VLAN ตรงไหน

สถานการณ์ วงเดียวเริ่มใหญ่ ต้องเลือกว่าจะแบ่งอย่างไร

อ่านอย่างไร เส้นแบ่งที่มีความหมายคือเส้นของโดเมนกระจายข่าว ไม่ใช่เส้นของสาย คำถามคือกลุ่มไหนที่ไม่จำเป็นต้องได้ยินคำถาม ARP ของกลุ่มอื่น

  1  กลุ่มไหนคุยกันเองเป็นหลัก
  2  กลุ่มไหนต้องผ่านเราเตอร์อยู่แล้ว
  3  กลุ่มไหนมีเครื่องเยอะที่สุด

สิ่งที่ยังไม่ได้พิสูจน์ การแบ่งโดเมนกระจายข่าวลดเสียงรบกวน แต่เพิ่มงานให้ เราเตอร์ ทราฟฟิกที่เคยข้ามกันในสวิตช์จะต้องขึ้นไปที่ชั้นสาม ซึ่งอาจย้ายคอขวด ไม่ใช่กำจัดมัน

กรณีที่ 3 — อ่านค่าตารางที่อยู่ของอุปกรณ์

สถานการณ์ อยากรู้ว่าอุปกรณ์จำที่อยู่ไว้นานแค่ไหน และจำได้กี่รายการ

อ่านอย่างไร ดูสองค่า คือเวลาหมดอายุกับจำนวนสูงสุด

  ageing time   นานไป ตามการย้ายเครื่องไม่ทัน
                สั้นไป ต้องกระจายเฟรมบ่อยขึ้น
  max entries   เต็มเมื่อไหร่ ต้องทิ้งของเก่า

สิ่งที่ยังไม่ได้พิสูจน์ ค่าที่ผู้ผลิตตั้งมาอาจต่างจากที่มาตรฐานแนะนำมาก อย่างเครื่องที่ผมใช้เขียนตั้งไว้ 1,200 วินาที ขณะที่ 802.1D แนะนำ 300 การเห็น ตัวเลขไม่ได้แปลว่ารู้เหตุผลที่เขาเลือกค่านั้น

สามสิบปีในสามบรรทัด

  repeater / hub   collision domains 1
  bridge / switch  collision domains = จำนวนพอร์ต
  full duplex      collision domains หายไป

ตลอดสามบรรทัดนั้น โดเมนกระจายข่าวไม่ได้ขยับเลย มันยังเป็นหนึ่งเสมอ จนกระทั่ง มีคนคิดวิธีแบ่งมันด้วยแท็กสี่ไบต์ ซึ่งเป็นบทถัดไป

อ้างอิง

เอกสารมาตรฐาน

  • RFC 1493 กรกฎาคม 1993 Definitions of Managed Objects for Bridges — นิยามตาราง forwarding สถานะของรายการ และค่าหมดอายุที่อ้างถึงคำแนะนำของ 802.1D-1990
  • RFC 1286 ธันวาคม 1991 ฉบับก่อนหน้า และประโยคเรื่องลูปในบริดจ์ที่ยกมาอ้าง

วัดจากเครื่องที่ใช้เขียน

  • ifconfig ของบริดจ์จริงบนเครื่องนี้ — ธง LEARNING บนพอร์ต ค่า maxaddr 100 และ timeout 1200 ซึ่งต่างจากคำแนะนำของมาตรฐานสี่เท่า
  • ifconfig en1 ที่รายงานว่าลิงก์เป็นฟูลดูเพล็กซ์

คำนวณเอง

  • ตารางระยะของโดเมนการชน คำนวณจาก slot time 512 บิต และความเร็วสัญญาณในสาย ทองแดงที่ประมาณ 2 x 10^8 เมตรต่อวินาที ตัวเลขระยะจริงของแต่ละมาตรฐานเป็นค่าที่ มาตรฐานกำหนด ไม่ได้มาจากการคำนวณนี้

สิ่งที่ยืนยันจากต้นทางไม่ได้

  • IEEE 802.3 และ 802.1D ต้องเสียเงินเข้าถึง ตัวเลข slot time และระยะสูงสุดที่ อ้างในบทนี้จึงมาจากการคำนวณและจากเอกสารที่อ้างถึงมาตรฐานอีกทอด ไม่ได้อ่านจาก ตัวมาตรฐานโดยตรง

วัดจากเครื่องจริงคำนวณเอง

อ่านหน้านี้เป็นภาษาอังกฤษ