NetKubeLab EN

ชั้นกายภาพ — บนสายไม่มีบิต

ทำไมต้องมีการเข้ารหัส ทำไมสายต้องบิดเกลียว ทำไมต้องหยุดที่ร้อยเมตร base page ของ auto-negotiation มีอะไรบ้าง และทำไม duplex mismatch ถึงเป็นความผิดพลาดที่เงียบที่สุดของชั้นนี้

ทุกบทความในชุดนี้ก่อนหน้านี้เริ่มจากสมมติฐานเดียวกันโดยไม่ได้พูดออกมา — ว่ามีบิตเดินทางจากปลายด้านหนึ่งไปอีกด้านหนึ่งได้

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

หน้านี้คือเรื่องของงานที่ต้องทำเพื่อให้สมมติฐานนั้นเป็นจริง

บนสายไม่มีบิต

รูปคลื่นที่ผู้ส่งตั้งใจจะส่ง เทียบกับรูปคลื่นที่เดินทางถึงผู้รับจริงซึ่งขอบลาดและแอมพลิจูดลดลง

เส้นบนคือสิ่งที่ผู้ส่งตั้งใจ ขอบตั้งฉาก ระดับคงที่ แบ่งเวลาเป็นช่องเท่า ๆ กัน ช่องละหนึ่งบิต

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

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

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

เครื่องที่กำลังอ่านหน้านี้อยู่บอกได้ว่าพอร์ตของมันพูดภาษาอะไรได้บ้าง

$ ifconfig -m en5
    supported media:
        media none
        media autoselect
        media 10baseT/UTP mediaopt full-duplex
        media 100baseTX mediaopt full-duplex
        media 1000baseT mediaopt full-duplex
        media 2500Base-T mediaopt full-duplex
        media 5000Base-T mediaopt full-duplex

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

สังเกตอีกอย่างว่าไม่มี half-duplex ในรายการเลย อุปกรณ์รุ่นนี้ไม่รองรับแล้ว ซึ่งเป็นเรื่องดี และจะเข้าใจว่าทำไมเมื่ออ่านถึงหัวข้อ duplex mismatch

ปัญหาที่หนึ่ง — ผู้รับไม่มีนาฬิกา

รูปคลื่น NRZ ที่มีศูนย์ติดกันสิบสองตัวโดยไม่มีขอบเลย ทำให้ผู้รับนับได้สิบเอ็ด เทียบกับ Manchester ที่มีขอบกลางทุกบิต

นี่คือปัญหาที่ใหญ่ที่สุดของชั้นนี้ และเป็นปัญหาที่คนส่วนใหญ่ไม่รู้ว่ามีอยู่

ในสายไม่มีเส้นนาฬิกา ผู้รับต้องเดาเองว่าขอบของแต่ละบิตอยู่ตรงไหน ถ้าส่งแบบ ตรงไปตรงมาคือหนึ่งเป็นไฟสูง ศูนย์เป็นไฟต่ำ ซึ่งเรียกว่า NRZ แล้วบังเอิญข้อมูล มีศูนย์ติดกันยาว ๆ สัญญาณจะแบนราบไม่มีขอบให้จับเลย

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

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

Manchester — จ่ายเต็มราคา

10BASE-T แก้ด้วยวิธีที่ตรงที่สุด ทุกบิตต้องมีขอบตรงกลางเสมอ ขอบขึ้นแปลว่า อย่างหนึ่ง ขอบลงแปลว่าอีกอย่างหนึ่ง

รับประกันได้ร้อยเปอร์เซ็นต์ว่าไม่มีทางแบนราบ แต่ราคาก็ร้อยเปอร์เซ็นต์เช่นกัน

  ข้อมูล 10 Mbit/s -> ต้องสลับ 20 ล้านครั้งต่อวินาที

สายที่จะพา 10BASE-T ได้จึงต้องรองรับความถี่ราว 20 MHz ทั้งที่ข้อมูลจริงมีแค่ 10 Mbit/s

4B/5B — จ่ายหนึ่งในสี่

100BASE-TX ไม่ยอมจ่ายเท่านั้น มันใช้วิธีที่ฉลาดกว่า แปลงข้อมูลทีละ 4 บิต เป็นรหัส 5 บิต โดยเลือกเฉพาะรหัส 5 บิตที่รับประกันว่าจะไม่มีศูนย์ติดกันยาว เกินไป

  4 บิตข้อมูล -> 5 บิตบนสาย
  100 Mbit/s x 5/4 = 125 Mbaud

แล้วยังไม่พอ 125 Mbaud บนสาย Cat 5 ยังสูงเกินไป จึงมีอีกชั้นชื่อ MLT-3 ที่ใช้ สามระดับแรงดันแทนสองระดับ ผลคือความถี่พื้นฐานลดลงสี่เท่า

  125 Mbaud / 4 = 31.25 MHz

เลข 31.25 MHz นี่แหละที่ทำให้ Cat 5 พา 100 Mbit/s ได้ ถ้าไม่มี MLT-3 ต้องใช้ สายที่ดีกว่านั้นมาก

8B/10B และ 64B/66B — ราคาลดลงสามสิบสองเท่า

เทียบสัดส่วนบิตที่ต้องส่งจริงต่อบิตข้อมูลหนึ่งบิต ตั้งแต่ Manchester ที่บวกร้อยเปอร์เซ็นต์ จนถึง 64B/66B ที่บวกสามจุดหนึ่งสองห้า

1000BASE-X ซึ่งเป็นกิกะบิตบนไฟเบอร์ใช้ 8B/10B คือแปลง 8 บิตเป็น 10 บิต โสหุ้ยยังเป็น 25% เท่าเดิม จึงต้องส่งจริงที่ 1.25 GBd เพื่อให้ได้ข้อมูล 1 Gbit/s

พอถึง 10 กิกะบิต 25% แพงเกินจะยอม 10GBASE-R จึงเปลี่ยนแนวคิด แทนที่จะรับประกัน ทุกบิต ให้รับประกันแค่ว่ามีขอบอย่างน้อยหนึ่งครั้งต่อ 66 บิต โดยเติมหัว 2 บิต แล้วสลับข้อมูลที่เหลือด้วยตัวสร้างเลขสุ่มเทียมเพื่อไม่ให้มีรูปแบบซ้ำยาว ๆ

  Manchester    1 bit  -> 2 bits     +100%
  4B/5B         4 bits -> 5 bits      +25%
  8B/10B        8 bits -> 10 bits     +25%
  64B/66B      64 bits -> 66 bits   +3.125%
  10 Gbit/s x 66/64 = 10.3125 Gbit/s บนสายจริง

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

สายเส้นเดียวกัน แต่ใช้กันคนละแบบ

100BASE-TX ใช้สองคู่แยกทิศทางกัน ส่วน 1000BASE-T ใช้ทั้งสี่คู่ส่งและรับพร้อมกันบนคู่เดียวกัน จึงต้องมีฝั่ง master ที่จ่ายนาฬิกา

สาย UTP หนึ่งเส้นมีสี่คู่ 100BASE-TX ใช้แค่สองคู่ คู่หนึ่งส่ง อีกคู่หนึ่งรับ อีกสองคู่ไม่ได้ใช้เลย

1000BASE-T ใช้ทั้งสี่คู่ และใช้แบบที่ต่างออกไปโดยสิ้นเชิง — ทุกคู่ส่งและรับ พร้อมกันบนคู่เดียวกัน

  1000 Mbit/s / 4 pairs         =  250 Mbit/s ต่อคู่
  PAM-5 carries 2 bits/symbol   -> 125 Mbaud ต่อคู่

125 Mbaud คือตัวเลขเดียวกับ 100BASE-TX เป๊ะ ๆ นั่นคือเหตุผลที่สาย Cat 5 ที่ ปูไว้แล้วพากิกะบิตได้ทั้งที่ไม่ได้ออกแบบมาเพื่อมัน กิกะบิตไม่ได้ดันความถี่ขึ้น มันเอาความถี่เดิมไปกระจายลงสี่คู่แล้วอัดข้อมูลต่อสัญลักษณ์ให้มากขึ้นแทน

การส่งสองทางบนคู่เดียวกันสร้างปัญหาใหม่สองข้อ

ข้อแรก ผู้รับได้ยินเสียงตัวเอง สัญญาณที่ตัวเองส่งออกไปสะท้อนกลับมาปนกับ สัญญาณของอีกฝั่ง ต้องหักเสียงของตัวเองออกก่อนถึงจะอ่านของอีกฝั่งได้

ข้อสอง ต้องมีคนจ่ายนาฬิกา เมื่อทั้งสองฝั่งพูดพร้อมกันบนตัวกลางเดียวกัน จะให้ ต่างคนต่างใช้นาฬิกาตัวเองไม่ได้ 1000BASE-T จึงต้องตกลงกันก่อนว่าใครเป็น master ที่จ่ายนาฬิกา อีกฝั่งเป็น slave ที่ตามอย่างเดียว การตกลงนี้ล้มเหลวได้ และมี สถานะรายงานไว้โดยเฉพาะ

ปัญหาที่สอง — สายเป็นของอนาล็อก

สายคู่ขนานได้รับสัญญาณรบกวนไม่เท่ากันจึงหักล้างไม่หมด ส่วนสายบิดเกลียวสลับตำแหน่งตลอดเส้นจึงโดนเท่ากันและหักล้างได้

ทำไมต้องบิดเกลียว

คำตอบสั้น ๆ คือ ผู้รับไม่ได้วัดแรงดันเทียบกราวด์ มันวัดผลต่างของสองเส้น

ถ้าเสียงรบกวนจากภายนอกเข้ามาที่ทั้งสองเส้นเท่ากัน มันจะหายไปเองในการลบ

  (A + n) - (B + n) = A - B

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

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

นี่คือเหตุผลที่การคลายเกลียวออกยาว ๆ ตอนเข้าหัวเป็นความผิดพลาดที่มีผลจริง ไม่ใช่เรื่องความสวยงาม

ความสูญเสียขึ้นกับความถี่ ไม่ใช่ความยาวอย่างเดียว

สายทองแดงกินความถี่สูงมากกว่าความถี่ต่ำเสมอ ค่านี้วัดเป็นเดซิเบลและเรียกว่า insertion loss

มาตรฐาน TIA-568.2-D กำหนดค่าสูงสุดไว้ทุกความถี่ของแต่ละหมวดสาย ตัวอย่างที่ เห็นภาพคือ ช่องสัญญาณ Cat 6A ที่ 500 MHz ต้องเสียไม่เกิน 39.1 dB

ตัวเลขนี้อธิบายอาการที่หลายคนเคยเจอ — สายที่ยาวเกินไปหรือคุณภาพต่ำเกินไปจะ ไม่ได้เสียทั้งหมด แต่จะเสียเฉพาะความถี่สูง ซึ่งแปลว่ามันยังทำงานได้ที่ความเร็ว ต่ำ และพังเมื่อเร่งความเร็วขึ้น

ครอสทอล์ค — เพื่อนบ้านที่อยู่ในสายเส้นเดียวกัน

คู่สายสี่คู่อยู่ในปลอกเดียวกัน แต่ละคู่จึงเป็นแหล่งรบกวนของคู่ที่เหลือ เรียกว่าครอสทอล์ค และวัดกันสองแบบ คือวัดที่ปลายเดียวกับผู้ส่ง กับวัดที่ปลาย อีกด้าน

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

พอมาถึง 1000BASE-T ที่ทุกคู่ส่งพร้อมกันทั้งสองทิศทาง ครอสทอล์คกลายเป็นข้อจำกัด หลักแทนความสูญเสีย และนั่นคือเหตุผลที่สายที่ผ่านการทดสอบสำหรับ 100 Mbit/s อาจ ไม่ผ่านสำหรับกิกะบิตทั้งที่ยาวเท่าเดิม

ทำไมต้องหยุดที่หนึ่งร้อยเมตร

งบระยะหนึ่งร้อยเมตรแบ่งเป็นสายแกนเดี่ยวในผนัง 90 เมตร กับ patch อีกฝั่งละ 5 เมตร และตารางที่แสดงว่าระยะคงที่ตลอดทุกยุคขณะที่แบนด์วิดท์เพิ่มขึ้น

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

แบบจำลองช่องสัญญาณของ 802.3 แบ่งไว้ชัดเจน

  90 m   สายแกนเดี่ยวเดินในผนัง
  10 m   สาย patch แบบตีเกลียว ฝั่งละ 5 m
  ----
  100 m

สายสองแบบนี้ไม่เหมือนกัน สาย patch ใช้ตัวนำแบบตีเกลียวเพื่อให้ดัดงอได้ ซึ่งแลก มาด้วยความสูญเสียที่สูงกว่าต่อเมตร นั่นคือเหตุผลที่งบ 10 เมตรนั้นแยกออกมา

สิ่งที่น่าสนใจกว่าคือสิ่งที่ไม่เปลี่ยน จาก Cat 3 ที่รับรองไว้ถึง 16 MHz สำหรับ 10 Mbit/s มาจนถึง Cat 6A ที่รับรองถึง 500 MHz สำหรับ 10 Gbit/s

  cable bandwidth    16 MHz  -> 500 MHz    x 31
  data rate          10 Mb/s -> 10 Gb/s    x 1000
  distance          100 m    -> 100 m      เท่าเดิม

ส่วนต่างระหว่าง 31 เท่ากับ 1000 เท่า คือผลงานของการเข้ารหัสล้วน ๆ สายดีขึ้น สามสิบเท่า แต่พาข้อมูลได้มากขึ้นพันเท่า ที่เหลืออีกสามสิบเท่ามาจากการใช้หลายคู่ หลายระดับแรงดัน และการเข้ารหัสที่ประหยัดขึ้น

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

ปัญหาที่สาม — สองฝั่งต้องตกลงกันก่อนว่าจะพูดอะไร

โครงสร้าง base page ขนาด 16 บิตของ auto-negotiation ที่มีบิตความสามารถอยู่เพียงห้าบิตและไม่มีบิตของกิกะบิตอยู่เลย

พอร์ตหนึ่งพูดได้หลายภาษาอย่างที่เห็นในรายการ supported media ข้างบน คำถามคือ สองฝั่งจะตกลงกันอย่างไรในเมื่อยังคุยกันไม่ได้

คำตอบคือ auto-negotiation ซึ่งสร้างขึ้นบนสิ่งที่มีอยู่แล้ว — 10BASE-T ส่งพัลส์ สั้น ๆ ออกมาเป็นระยะเพื่อบอกว่ายังมีชีวิตอยู่ auto-negotiation เปลี่ยนพัลส์เดี่ยว นั้นให้เป็นชุดของพัลส์ที่เข้ารหัสข้อมูลไว้ อุปกรณ์เก่าที่ไม่รู้จักจะเห็นเป็น พัลส์บอกว่ามีชีวิตอยู่เหมือนเดิม จึงเข้ากันได้ย้อนหลังโดยไม่ต้องแก้อะไร

และโครงสร้างของชุดพัลส์นั้นอธิบายว่าทำไม base page ถึงกว้าง 16 บิตพอดี

  33   ตำแหน่งพัลส์ต่อหนึ่งชุด
  17   ตำแหน่งคี่ พาสัญญาณนาฬิกา
  16   ตำแหน่งคู่ พาข้อมูล

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

base page มีอะไรอยู่บ้าง

ข้อมูลที่แลกกันคือรีจิสเตอร์ขนาด 16 บิต ตรวจได้จากซอร์สจริงที่ include/uapi/linux/mii.h ในเคอร์เนล Linux

  bit   name           meaning
  15    NPAGE          ยังมีหน้าถัดไป
  14    LPACK          ตอบรับว่าได้ยินของอีกฝั่ง
  13    RFAULT         แจ้งว่าฝั่งนี้มีปัญหา
  12    XNP            extended next page
  11    PAUSE_ASYM     flow control แบบไม่สมมาตร
  10    PAUSE_CAP      flow control
   9    100BASE-T4     มาตรฐานที่ตายไปแล้ว
   8    100FULL
   7    100HALF
   6    10FULL
   5    10HALF
  4-0   SLCT           บอกว่านี่คือตระกูล 802.3

ความสามารถทั้งหมดที่ประกาศได้มีอยู่ห้าบิต คือบิต 9 ถึง 5 และในห้าบิตนั้นมี หนึ่งบิตที่เป็นมาตรฐานที่ตายไปแล้ว

ไม่มีบิตของกิกะบิตอยู่ในนี้เลย เพราะตอนออกแบบยังไม่มีกิกะบิต กิกะบิตถูกเพิ่ม ทีหลังในรีจิสเตอร์คนละใบคือ 0x09 ซึ่งในซอร์สเดียวกันคือ

  ADVERTISE_1000FULL   0x0200   ในรีจิสเตอร์ 0x09
  ADVERTISE_1000HALF   0x0100   ในรีจิสเตอร์ 0x09

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

บิตตำแหน่งเดียวกัน ความหมายคนละอย่าง

จุดที่ทำให้คนอ่านโค้ดสะดุดคือบรรทัดพวกนี้ในไฟล์เดียวกัน

  ADVERTISE_10HALF      0x0020
  ADVERTISE_1000XFULL   0x0020

  ADVERTISE_10FULL      0x0040
  ADVERTISE_1000XHALF   0x0040

ไม่ใช่ความผิดพลาด บิตตำแหน่งเดียวกันแปลความหมายคนละอย่างขึ้นกับว่าพอร์ตนั้น เป็นทองแดงหรือเป็นไฟเบอร์ 1000BASE-X เพราะสองอย่างนี้ใช้กลไก negotiation คนละ ฉบับ แต่ใช้รีจิสเตอร์ตำแหน่งเดียวกัน

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

duplex mismatch — ความผิดพลาดที่เงียบที่สุด

auto-negotiation ล้มเหลวได้แบบที่แย่ที่สุดคือ ล้มเหลวแล้วลิงก์ยังขึ้น

ถ้าฝั่งหนึ่งถูกตั้งค่าตายตัวไว้ว่า 100 full ฝั่งนั้นจะเลิกส่งชุดพัลส์ negotiation ออกไป อีกฝั่งที่ยังพยายามเจรจาอยู่จึงไม่ได้ยินอะไรเลย

มาตรฐานเตรียมทางออกไว้ให้แล้ว ชื่อ parallel detection คือให้ดูจากตัวสัญญาณเอง ว่าอีกฝั่งกำลังพูดแบบไหน วิธีนี้บอกความเร็วได้ เพราะ 10BASE-T กับ 100BASE-TX ใช้สัญญาณคนละหน้าตากันชัดเจน

แต่มันบอก duplex ไม่ได้ เพราะตัวสัญญาณไม่ได้พกข้อมูลนั้นมาด้วยเลย เมื่อรู้ไม่ได้ ก็ต้องเลือกข้างที่ปลอดภัยกว่า ซึ่งคือ half duplex

ผลคือฝั่งหนึ่งเป็น full อีกฝั่งเป็น half บนสายเส้นเดียวกัน

  • ฝั่ง full ส่งเมื่อไรก็ได้ ไม่ฟังก่อน
  • ฝั่ง half ฟังก่อนส่ง และถ้าเจอชนกลางคันจะยกเลิกเฟรมนั้น

ฝั่ง half จึงเห็น late collision ส่วนฝั่ง full เห็นเฟรมที่ถูกยกเลิกกลางคันเป็น เฟรมเสีย นับเป็น CRC error

และลิงก์ยังขึ้นอยู่ ยังใช้งานได้ ยังปิงผ่าน แค่ช้าลงมากเมื่อโหลดสูง ซึ่งเป็น อาการที่คนมักไปโทษที่อื่นก่อนเสมอ

ปัญหาที่สี่ — สัญญาณใช้เวลาเดินทาง

สัญญาณไฟฟ้าในสายทองแดงไม่ได้เดินทางด้วยความเร็วแสงในสุญญากาศ อัตราส่วนนี้เรียกว่า NVP มีค่าราว 0.6 ถึง 0.9 และเครื่องมือทดสอบมักตั้งค่าตั้งต้นไว้ที่ 0.7 สำหรับ สายคู่บิดเกลียว และ 0.82 สำหรับสายโคแอ็กซ์

ที่ราว 67% ของความเร็วแสง ตัวเลขที่จำง่ายคือประมาณ 20 เซนติเมตรต่อนาโนวินาที

  light in vacuum        30 cm/ns
  copper at NVP 0.67     20 cm/ns
  1 m                     5 ns
  100 m                 500 ns   ทางเดียว

ตัวเลขนี้มีผลจริงสองเรื่อง

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

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

ปัญหาที่ห้า — ที่ความเร็วสูง ความผิดพลาดเป็นเรื่องแน่นอน

ที่ความเร็วต่ำ บิตผิดเป็นเรื่องนาน ๆ ครั้ง ตรวจเจอด้วย FCS แล้วทิ้งเฟรมนั้นไป ให้ชั้นบนส่งใหม่ ก็เพียงพอ

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

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

เอกสารของคณะทำงาน IEEE 802.3 ระบุรหัสที่ใช้ไว้ เช่นงานของ 802.3bj อ้างถึงรหัส Reed-Solomon แบบ RS(528, 514) ร่วมกับการแปลง 256B/257B ส่วน 802.3bz ที่ทำ 2.5G กับ 5GBASE-T ใช้ LDPC

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

สังเกตว่า 2.5GBASE-T กับ 5GBASE-T ที่อยู่ในรายการของเครื่องข้างบนนั้น ไม่ได้ถูกออกแบบใหม่ทั้งหมด มาตรฐาน 802.3bz ซึ่งผ่านการรับรองเมื่อวันที่ 23 กันยายน 2016 เอา 10GBASE-T มาลดอัตราสัญญาณลงเหลือหนึ่งในสี่และหนึ่งในสอง เพื่อให้วิ่งบนสาย Cat 5e และ Cat 6 ที่ปูไว้แล้วได้ครบ 100 เมตร

นั่นคือแนวคิดเดียวกับที่ตรึงระยะ 100 เมตรไว้ — ออกแบบให้ของที่อยู่ในผนังแล้ว ยังใช้ได้

แสง — เมื่อทองแดงไปไม่ถึง

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

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

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

ซิงเกิลโหมด แก้ด้วยการทำแกนให้เล็กลงเหลือ 8 ถึง 10 ไมครอน เล็กจนเหลือ เส้นทางเดียว ปัญหานี้จึงหายไปทั้งข้อ

ความสูญเสียก็ต่างกันมาก

  multimode    at  850 nm    ~3    dB/km
  singlemode   at 1310 nm    ~0.4  dB/km

3 dB คือการเสียครึ่งหนึ่ง แปลว่าที่ 850 nm แสงหายไปครึ่งหนึ่งในระยะหนึ่งกิโลเมตร

มัลติโหมดใช้ชื่อ OM1 ถึง OM5 ส่วนซิงเกิลโหมดใช้ OS1 กับ OS2 และการเลือกไม่ได้ ขึ้นกับระยะอย่างเดียว มัลติโหมดใช้แหล่งกำเนิดแสงที่ถูกกว่าและจัดแนวง่ายกว่า จึงยังคุ้มในระยะสั้น

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

"ไฟลิงก์ติด แปลว่าสายดี" ไม่ใช่ ไฟลิงก์บอกแค่ว่าตัว PHY ได้ยินสัญญาณจากอีก ฝั่งพอที่จะประกาศว่ามีลิงก์ มันไม่ได้บอกอะไรเลยเกี่ยวกับอัตราความผิดพลาด สายที่ ทำให้เฟรมเสียหนึ่งในร้อยก็ยังทำให้ไฟติดสวยงาม

"ถ้า auto-negotiation มีปัญหา ก็ล็อกความเร็วเอา" นี่คือคำแนะนำที่สร้าง duplex mismatch มากที่สุด การล็อกฝั่งเดียวทำให้อีกฝั่งไม่ได้ยินอะไรและต้องเดา ซึ่งจะเดาเป็น half เสมอ ถ้าจะล็อกต้องล็อกทั้งสองฝั่ง

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

"กิกะบิตก็ใช้สองคู่เหมือน 100 เมกะบิต" ไม่ใช่ กิกะบิตต้องใช้ครบทั้งสี่คู่ สายที่มีคู่หนึ่งขาดจึงทำงานที่ 100 ได้สบาย แล้วต่อกิกะบิตไม่ขึ้น

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

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

กรณีที่ 1 — ช้าเฉพาะตอนโหลดสูง แต่ปิงผ่านตลอด

ปิงไม่เคยหาย แต่คัดลอกไฟล์ใหญ่ได้ช้ากว่าที่ควรมาก

อ่านอย่างไร ดูตัวนับทั้งสองฝั่ง ข้อมูลอยู่ที่ความไม่สมมาตร ไม่ได้อยู่ที่ ฝั่งใดฝั่งหนึ่ง

switchA# show interface Gi1/0/7 | include duplex|coll|CRC
  Full-duplex, 100Mb/s, media type is 10/100/1000BaseTX
     0 late collision, 0 deferred
     2841 input errors, 2841 CRC, 0 frame, 0 overrun
switchB# show interface Fa0/7 | include duplex|coll|CRC
  Half-duplex, 100Mb/s
     1174 late collision, 293 deferred
     0 input errors, 0 CRC, 0 frame, 0 overrun

ฝั่งหนึ่ง full อีกฝั่ง half และรูปแบบของตัวนับตรงกับที่อธิบายไว้ข้างบนพอดี — ฝั่ง half เห็น late collision ฝั่ง full เห็น CRC และไม่มีฝั่งไหนเห็นทั้งสองอย่าง

ถ้าเป็นสายเสีย ทั้งสองฝั่งจะเห็น CRC พอ ๆ กัน ความไม่สมมาตรนี่แหละที่แยกสองกรณี ออกจากกัน

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

กรณีที่ 2 — ต่อกิกะบิตไม่ขึ้น แต่ร้อยเมกะบิตทำงานปกติ

พอร์ตรองรับกิกะบิต อุปกรณ์ปลายทางรองรับกิกะบิต แต่ลิงก์ขึ้นมาที่ 100

อ่านอย่างไร ยืนยันก่อนว่ามันเจรจาลงมาเองจริง ไม่ได้ถูกล็อกไว้

switch# show interface Gi1/0/22 status
  Port      Name    Status      Vlan  Duplex  Speed Type
  Gi1/0/22          connected   10    a-full  a-100 10/100/1000BaseTX

a- ข้างหน้าแปลว่ามาจากการเจรจา ไม่ได้ถูกตั้งตายตัว แปลว่าทั้งสองฝั่งตกลงกัน แล้วว่ากิกะบิตไม่ไหว

จากนั้นถามสายตรง ๆ ด้วย TDR

switch# show cable-diagnostics tdr interface Gi1/0/22
  Pair  Length        Remote Pair  Status
  1-2   32 m +/- 4 m  Pair 3-6     Normal
  3-6   32 m +/- 4 m  Pair 1-2     Normal
  4-5    1 m +/- 4 m  N/A          Open
  7-8   32 m +/- 4 m  Pair 7-8     Normal

คู่ 4-5 ขาดที่ระยะราวหนึ่งเมตร ส่วนอีกสามคู่ยาว 32 เมตรครบ

อ่านรวมกับหัวข้อเรื่องคู่สายข้างบนแล้วจบทันที — 100BASE-TX ใช้แค่คู่ 1-2 กับ 3-6 ซึ่งยังดีอยู่ทั้งคู่ จึงทำงานได้ ส่วน 1000BASE-T ต้องใช้ครบสี่คู่ จึงไม่ขึ้น

ระยะหนึ่งเมตรบอกด้วยว่าน่าจะอยู่แถวหัวหรือปลั๊กที่ผนัง ไม่ใช่กลางทาง

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

กรณีที่ 3 — CRC ที่ย้ายตามสาย ไม่ได้อยู่กับพอร์ต

พอร์ตหนึ่งมี CRC error สะสมเรื่อย ๆ ยังไม่รู้ว่าปัญหาอยู่ที่พอร์ต สาย หรือ อุปกรณ์ปลายทาง

อ่านอย่างไร ทำการทดลองที่แยกตัวแปรได้ทีละตัว ล้างตัวนับ วัดฐาน แล้วสลับ ทีละอย่าง

switch# clear counters interface Gi1/0/15
switch# show interface Gi1/0/15 | include CRC
     0 input errors, 0 CRC, 0 frame, 0 overrun

รอสิบห้านาทีแล้วอ่านใหม่ ได้ 412 CRC จากนั้นย้ายสายเส้นเดิมไปพอร์ตอื่น ล้างตัวนับ รออีกสิบห้านาที

ถ้า CRC ตามไปด้วย ปัญหาอยู่ที่สายหรือปลายทาง ถ้าไม่ตามไป ปัญหาอยู่ที่พอร์ตเดิม

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

กรณีที่ 4 — ไฟเบอร์เส้นสั้นที่ใช้งานไม่ได้

โมดูลใหม่ สายใหม่ ระยะสามเมตรในตู้เดียวกัน แต่มี error ตลอดเวลา

อ่านอย่างไร อ่านค่ากำลังแสงจริงจากโมดูล

switch# show interface transceiver detail
                        Optical    Optical
                        Tx Power   Rx Power
  Port                  (dBm)      (dBm)
  Te1/1/1               -2.1       -1.8

รับได้ -1.8 dBm ซึ่งแทบไม่ต่างจากที่ส่งออกไปเลย เพราะสายยาวแค่สามเมตร

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

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

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

อ้างอิง

มาตรฐาน

  • IEEE 802.3 เป็นเจ้าของทุกอย่างในหน้านี้ แต่ละแบบมีข้อของตัวเอง — 10BASE-T · 100BASE-TX · 1000BASE-T · 1000BASE-X · 10GBASE-R
  • IEEE 802.3bz-2016 ผ่านการรับรอง 23 กันยายน 2016 เพิ่ม 2.5GBASE-T และ 5GBASE-T โดยลดอัตราสัญญาณของ 10GBASE-T ลงเหลือหนึ่งในสี่และหนึ่งในสอง
  • IEEE 802.3 ข้อ 28 เป็นเจ้าของ auto-negotiation ทั้งหมด — ชุดพัลส์ FLP ที่สร้างทับพัลส์บอกสถานะลิงก์ของ 10BASE-T ตำแหน่งพัลส์ 33 ตำแหน่งต่อชุด และกลไก parallel detection สำหรับคู่สนทนาที่ไม่รองรับการเจรจา
  • TIA-568.2-D กำหนดค่าสูงสุดของ insertion loss ทุกความถี่ของแต่ละหมวดสาย เช่นช่องสัญญาณ Cat 6A ที่ 500 MHz ต้องไม่เกิน 39.1 dB
  • เอกสารคณะทำงาน IEEE 802.3 เรื่อง FEC และ PAM4 กับการเข้ารหัสของ 802.3bj

ของจริงบนเครื่อง

  • ifconfig -m en5 บน macOS — รายการ supported media ที่แสดงว่าพอร์ตเดียว รองรับมาตรฐานคนละฉบับกี่แบบ
  • include/uapi/linux/mii.h ในเคอร์เนล Linux — โครงสร้าง base page 16 บิต ทั้งใบ รวมทั้งบิตกิกะบิตที่อยู่ในรีจิสเตอร์ 0x09 คนละใบกัน และบิตตำแหน่ง เดียวกันที่แปลความหมายคนละอย่างระหว่างทองแดงกับ 1000BASE-X

สาย แสง และการวัด

อ่านต่อในชุดนี้

  • อีเทอร์เน็ต — เฟรมที่วิ่งอยู่บนทุกอย่างในหน้านี้ และที่มาของเฟรมต่ำสุด 64 ไบต์ซึ่งคำนวณจากเวลาเดินทางล้วน ๆ
  • MAC address — สิ่งที่อยู่ชั้นถัดขึ้นไป
  • Spanning Tree — สิ่งที่ต้องสร้างขึ้นเพราะเฟรมไม่มีฟิลด์อายุ

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

← กลับไปหน้าความรู้พื้นฐาน