- เกิดอาการผิดปกติที่ เมลเซิร์ฟเวอร์ของภาควิชาสถิติ ในมหาวิทยาลัยแห่งหนึ่งของสหรัฐฯ ไม่สามารถส่งอีเมลไปยังปลายทางที่อยู่ไกลเกิน 500 ไมล์ได้
- จากการตรวจสอบพบว่า สาเหตุคือ ระหว่างการอัปเดต SunOS เวอร์ชันของ Sendmail ถูกดาวน์เกรด ทำให้ไฟล์ตั้งค่าไม่เข้ากัน
- เนื่องจาก Sendmail 5 ไม่รู้จักชื่อตัวเลือกแบบยาวในไฟล์ตั้งค่าของ Sendmail 8 ทำให้ค่าปริยายหลายรายการถูกตั้งเป็น 0
- ในจำนวนนั้น ค่า timeout ของการเชื่อมต่อ SMTP ถูกตั้งเป็น 0 ทำให้การเชื่อมต่อระยะไกลที่ใช้เวลามากกว่าประมาณ 3 มิลลิวินาทีล้มเหลวทั้งหมด
- เมื่อความหน่วงของเครือข่ายเพิ่มขึ้นตามระยะทาง จึงเกิดปรากฏการณ์ที่ดูเหมือนว่า การส่งเมลไปยังเซิร์ฟเวอร์ที่อยู่ไกลเกิน 500 ไมล์ถูกปิดกั้น
จุดเริ่มต้นของปัญหา
- ภาควิชาสถิติแจ้งปัญหาว่า “ส่งเมลไปยังที่ที่อยู่ไกลเกิน 500 ไมล์ไม่ได้”
- ส่งได้ถึงราว 520 ไมล์ แต่ไกลกว่านั้นจะล้มเหลว
- หัวหน้าภาคถึงกับให้ผู้เชี่ยวชาญด้านภูมิสถิติมาช่วย ทำแผนที่รัศมีที่เมลส่งไปถึงได้ และพบว่ารัศมีอยู่ที่ประมาณ 500 ไมล์
- ผู้ดูแลระบบลองส่งเมลทดสอบไปยังหลายพื้นที่เพื่อจำลองปัญหา
- Princeton ที่อยู่ห่าง 400 ไมล์ ส่งสำเร็จ แต่ Memphis ที่อยู่ห่าง 600 ไมล์ ส่งล้มเหลว
- New York (420 ไมล์) ส่งสำเร็จ แต่ Providence (580 ไมล์) ส่งล้มเหลว
การวิเคราะห์สาเหตุ
- ไฟล์ตั้งค่า sendmail.cf ของเซิร์ฟเวอร์ดูปกติดี และเป็นไฟล์ตั้งค่าสำหรับ Sendmail 8 ที่ผู้เขียนทำขึ้นเอง
- แต่เมื่อตรวจสอบแบนเนอร์ของพอร์ต SMTP กลับพบว่ากำลังรัน SunOS Sendmail 5 อยู่
- ระหว่างการแพตช์เซิร์ฟเวอร์ ระบบปฏิบัติการถูกอัปเกรดและทำให้ Sendmail ถูกดาวน์เกรดจาก 8 ลงมาเป็น 5
- แม้ไฟล์ตั้งค่าเดิมจะยังคงอยู่ แต่ Sendmail 5 ไม่รู้จักชื่อตัวเลือกแบบยาวของ Sendmail 8
- ตัวเลือกที่ไม่รู้จักจึงถูกมองข้าม และค่าปริยายของรายการเหล่านั้นถูก รีเซ็ตเป็น 0
- โดยเฉพาะ ค่า timeout สำหรับการเชื่อมต่อไปยังเซิร์ฟเวอร์ SMTP ปลายทางถูกตั้งเป็น 0 ทำให้ความพยายามเชื่อมต่อถูกยกเลิกหลังผ่านไปราว 3 มิลลิวินาที
ความสัมพันธ์ระหว่างระยะทางกับความเร็ว
- ในเวลานั้นเครือข่ายของแคมปัสเป็น โครงสร้างแบบสวิตช์ 100% จึงแทบไม่มีความหน่วงจากเราเตอร์
- ดังนั้นเวลาเชื่อมต่อจึงถูกกำหนดโดย ระยะทางทางกายภาพ (ความเร็วแสง)
- เมื่อนำมาคำนวณ 3 มิลลิวินาทีจะเทียบได้กับระยะทางประมาณ 558 ไมล์
- ซึ่งสอดคล้องกับอาการที่รายงานว่า “500 ไมล์หรือมากกว่านั้นเล็กน้อย”
บทสรุป
- ต้นตอของปัญหาคือ ข้อผิดพลาดในการพาร์สค่าตั้งค่าจากความไม่ตรงกันของเวอร์ชัน Sendmail
- เมื่อค่า timeout ถูกตั้งเป็น 0 จึงเกิด ปรากฏการณ์ทางเครือข่ายที่ดูเหมือนมีข้อจำกัดตามระยะทางทางกายภาพ
- กรณีนี้จึงกลายเป็นเกร็ดคลาสสิกที่แสดงให้เห็นถึง ความสำคัญของความเข้ากันได้ของเวอร์ชันและการตรวจสอบไฟล์ตั้งค่า ในงานดูแลระบบ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ช่วงกลางทศวรรษ 1990 มีปัญหาแปลก ๆ ที่พีซีในออฟฟิศบูตไม่ขึ้นทุกเช้า
สุดท้ายพบว่าทุกหน้าหนาวจะมีหนูตัวเล็กมุดเข้ามาทางช่องใส่ฮาร์ดไดรฟ์เพื่ออาศัยความอบอุ่น แล้วปัสสาวะจนวงจรลัดวงจร
พอคอมพิวเตอร์เปิดทิ้งไว้สักพักจนเกิดความร้อน มันก็แห้งและบูตได้
หลังจากนั้นก็ซื้อถาดไดรฟ์เปล่ามาปิดไว้ และปัญหาก็หายไปอย่างสิ้นเชิง
ไม่ว่าจะเป็นเรื่องจริงไหม กระบวนการไล่หาต้นตอของปัญหาแบบนี้ก็น่าสนใจ
ลิงก์ที่เกี่ยวข้อง
เมื่อก่อนเคยมีค้างคาวมาเกาะสาย CATของฉันด้วย
ถ้าเปิดหน้าต่างตอนกลางคืนไว้ อาจกระทบแบนด์วิดท์ได้เหมือนกัน
ถ้าเป็นนักพัฒนา ก็ควรเตรียมรับมือสถานการณ์ชวนงงอย่าง "Frog on Keyboard error" ด้วย
บทความที่เกี่ยวข้อง
ดูเหมือนในบทความต้นฉบับจะยังให้เครดิตประธานที่ช่วยรวบรวมข้อมูลที่จำเป็นต่อการแก้ปัญหานี้ไม่มากพอ
ถ้าไม่มีข้อมูลนั้น ผู้เขียนคงจะเสียเวลาไล่หาปัญหาที่เซิร์ฟเวอร์ผิดตัวไปอีกนาน
ถ้าเอาแต่บอกว่า “อีเมลไม่ได้ทำงานแบบนั้น” ครั้งหน้าก็จะไม่มีใครให้ข้อมูล หรือไม่ก็จะได้แต่การคาดเดาผิด ๆ
บทความนี้เป็นโพสต์คลาสสิกที่กลับมาได้รับความนิยมซ้ำ ๆ บน HN มาหลายปี
ถูกนำกลับมาพูดถึงอีกครั้งในหลายช่วง เช่น 2023, 2020, 2015
เวอร์ชัน 2023, เวอร์ชัน 2020, เวอร์ชัน 2015
โชคดีที่รอบนี้ไม่พลาด และมันก็เตือนใจว่าอย่าสูญเสียความถ่อมตน
บน HN ถ้าผ่านไปสักปีหนึ่ง การรีโพสต์ก็ถือว่าโอเค และงานคลาสสิกก็ควรถูกหยิบกลับมาให้ผู้ใช้ใหม่ได้อ่าน
ดู HN FAQ
ฉันยังรวบรวมลิงก์ของเวอร์ชันอื่น ๆ ที่เกี่ยวข้องไว้ด้วย
ตอนนั้นเราอาจได้นั่งหัวเราะไปกับการดีบักความผิดพลาดของ AI
เมื่อคืนฉันเปิดตอนหนึ่งของซีรีส์ทีวีด้วย VLC แต่พอผ่านไปประมาณ 30 วินาที เครื่องก็ดับ
มันดับตรงจุดเดิมถึงสามครั้ง เลยรู้สึกแปลก ๆ และเริ่มสงสัยว่าอาจเป็นเพราะตัววิดีโอเอง
มันทำให้นึกถึงกรณีที่วิดีโอของ Janet Jackson ทำให้ฮาร์ดไดรฟ์พัง
แถมตอนนั้นยังเป็น Black Mirror S7E01 อีก เลยยิ่งแปลกเข้าไปใหญ่
ลิงก์อ้างอิง
ถ้าเป็นอย่างหลัง มีโอกาสสูงว่าจะเป็นปัญหาความร้อน
โค้ดแต่ละตัวมีภาระในการถอดรหัสต่างกัน จึงอาจทำให้ระบบร้อนเกินในบางช่วงได้
แนะนำให้ลองเล่นจากจุดอื่น หรือข้ามช่วงนั้นไปเพื่อทดสอบ
ลองเปลี่ยนพาวเวอร์ซัพพลายหรือแปลง codec ดูก็น่าจะดี
หรืออาจเป็นไฟล์ที่ถูกดัดแปลงโดยไม่หวังดี จึงควรตรวจสอบแหล่งที่มา
เรื่องนี้เหมือนเวอร์ชันแฮ็กเกอร์ของเกร็ดเล่าเรื่องเช็กความเร็วของ SR-71 Blackbird
เป็นงานคลาสสิกที่อ่านกี่ครั้งก็ยังอยากอ่านอีก
ลิงก์ที่เกี่ยวข้อง
ทำให้นึกถึงเรื่องคลาสสิกที่ว่า “ถ้าซื้อไอศกรีมวานิลลา รถจะสตาร์ตติด แต่ถ้าซื้อสตรอว์เบอร์รีจะสตาร์ตไม่ติด”
ลิงก์เรื่องเล่า
ลิงก์ที่เกี่ยวข้อง
เรื่องอย่าง “Stalking the Wiley Hacker” คือสิ่งที่พาฉันเข้าสู่โลกคอมพิวเตอร์
แต่พอมาทำงานในอุตสาหกรรมนี้จริง ๆ ก็รู้สึกเสียดายที่ความสนุกอันบริสุทธิ์ในตอนนั้นหายไป
ลิงก์ต้นฉบับ
เขาไปบรรยายในงานสมาคมควิลต์ และแม้จะไม่เกี่ยวกับหัวข้อหลักเลย เขาก็ยังเป็นคนที่เปี่ยมพลังและมีเสน่ห์มาก
ฉันประทับใจในพลังงานและความอยากรู้อยากเห็นของเขาแบบเต็ม ๆ
ทำให้นึกถึงมุก “งั้นก็ลองส่งเมลให้ไกลออกไปอีก 500 ไมล์สิ”
ประโยค “You had me at EHLO” ก็ทำให้ฉันขำเหมือนกัน
ตอนนั้นจำคำสั่งได้หมด แต่ตอนนี้ไม่มั่นใจแล้ว
เมื่อก่อนคอมพิวเตอร์ที่ฉันใช้มีปัญหาดับทุกครั้งที่ฉันลุกจากโต๊ะ
สุดท้ายพบว่าสาเหตุคือพื้นไม้ที่หลวมในอาคารเก่า
แรงสั่นตอนลุกขึ้นทำให้แหล่งจ่ายไฟที่เสียอยู่แล้วลัดวงจร
พออ่านบทความจบ ฉันก็รัน
apt install unitsทันที เป็นเครื่องมือที่ยอดเยี่ยมจริง ๆถ้าใช้คำสั่ง
unitsผลการคำนวณจะออกมากลับด้านตัวอย่าง: 1 mile → 1.609 km ถูกต้อง แต่ถ้า 1 unit → 1.609 units มันจะคำนวณกลับทาง