2 คะแนน โดย GN⁺ 2023-09-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เมลเซิร์ฟเวอร์ของภาควิชาสถิติในมหาวิทยาลัยแห่งหนึ่ง อยู่ดี ๆ ก็ไม่สามารถส่งอีเมลไปยังปลายทางที่ไกลกว่า ประมาณ 500–520 ไมล์ ได้ และปัญหานี้ทำซ้ำได้ตามรัศมีทางภูมิศาสตร์
  • หัวหน้าภาควิชาเก็บข้อมูลอยู่หลายวันแล้วมอบหมายให้นักภูมิสถิติวิเคราะห์ พร้อมทำแผนที่ รัศมีที่ส่งถึงได้ และปลายทางข้อยกเว้นภายในรัศมีนั้น
  • จากการทดสอบของผู้ดูแลระบบ พบว่าจาก Research Triangle ใน North Carolina ส่งไป Richmond, Atlanta, Washington, Princeton, New York ได้สำเร็จ แต่ส่งไป Memphis, Boston, Detroit, Providence ล้มเหลว จึงเผยให้เห็นว่าเกณฑ์คือ ตำแหน่งของเมลเซิร์ฟเวอร์ ไม่ใช่ตำแหน่งของผู้รับ
  • สาเหตุคือระหว่างแพตช์เซิร์ฟเวอร์ SunOS ถูกอัปเกรด ทำให้ Sendmail 8 ถูกดาวน์เกรดในทางปฏิบัติเป็น Sendmail 5 และ Sendmail 5 เพิกเฉยต่อชื่อการตั้งค่ายาว ๆ ใน sendmail.cf เดิมที่เขียนสำหรับ Sendmail 8
  • ผลคือ timeout การเชื่อมต่อถูกตั้งเป็น 0 และบนเครื่องนั้นการเชื่อมต่อถูกตัดหลังผ่านไปประมาณ 3 มิลลิวินาที ซึ่งตรงกับค่าที่สังเกตได้จากการคำนวณด้วย units ที่ประมาณ 559 ไมล์

รายงานว่า “ส่งเมลไปไกลเกิน 500 ไมล์ไม่ได้”

  • ระหว่างดูแลระบบอีเมลของแคมปัส หัวหน้าภาควิชาสถิติติดต่อมาว่า “มีปัญหาในการส่งอีเมลออกนอกภาควิชา”
  • ประเด็นหลักของปัญหาคือ “จากที่นี่ส่งเมลไปยังที่ที่ไกลกว่า 500 ไมล์ ไม่ได้” และหัวหน้าภาควิชาเสริมว่าขอบเขตจริงคือ “ไกลกว่านั้นอีกเล็กน้อย ประมาณ 520 ไมล์
  • ผู้ดูแลระบบตอบว่าโดยทั่วไปอีเมลไม่ได้ทำงานแบบนั้น แต่หัวหน้าภาควิชาได้เก็บข้อมูลมาพอสมควรตลอดหลายวันก่อนติดต่อมาแล้ว
  • ภาควิชาสถิติให้ผู้เชี่ยวชาญด้านภูมิสถิติตรวจสอบ และทำแผนที่ที่แสดงว่าขอบเขตที่ส่งเมลได้เป็นรัศมีที่มากกว่า 500 ไมล์เล็กน้อย
    • แม้ภายในรัศมีก็มีปลายทางที่ส่งไม่ถึง หรือส่งถึงเป็นครั้งคราวเท่านั้น
    • นอกรัศมีนั้น อีเมลจะไม่ถูกส่งถึงเลย
  • ในช่วงเวลาเดียวกัน ที่ปรึกษาได้แพตช์และรีบูตเซิร์ฟเวอร์ แต่ระบุว่าไม่ได้แตะระบบเมล

การทดสอบซ้ำและขอบเขตทางภูมิศาสตร์

  • เมื่อผู้ดูแลระบบล็อกอินเข้าเซิร์ฟเวอร์ของภาควิชาและส่งเมลทดสอบ ก็พบว่าปัญหานี้ ทำซ้ำได้จริง
  • ตำแหน่งขณะนั้นคือ Research Triangle ใน North Carolina และปลายทางที่อยู่ใกล้ทำงานได้ตามปกติ
    • เมลทดสอบที่ส่งไปยังบัญชีของตนเองถูกส่งถึงตามปกติ
    • เมลที่ส่งไป Richmond, Atlanta, Washington ก็สำเร็จเช่นกัน
    • การทดสอบไปถึง Princeton ซึ่งอยู่ราว 400 ไมล์ ก็ผ่าน
  • ปลายทางที่ไกลกว่านั้นล้มเหลวต่อเนื่อง
    • Memphis ราว 600 ไมล์ ล้มเหลว
    • Boston ล้มเหลว
    • Detroit ล้มเหลว
    • New York ราว 420 ไมล์ สำเร็จ
    • Providence ราว 580 ไมล์ ล้มเหลว
  • เมลที่ส่งไปยังบัญชีของเพื่อนที่อาศัยอยู่ใน North Carolina ล้มเหลว เพราะ ISP ของบัญชีนั้นอยู่ที่ Seattle
    • จึงยืนยันได้ว่าปัญหาเกี่ยวข้องกับ ตำแหน่งทางภูมิศาสตร์ของเมลเซิร์ฟเวอร์ ไม่ใช่ตำแหน่งจริงของบุคคล

การตั้งค่า Sendmail ที่ดูเหมือนปกติ

  • ไฟล์ sendmail.cf โดยรวมดูเหมือนปกติ และเหมือนกับไฟล์ที่ผู้ดูแลระบบเคยเขียนไว้
  • ผู้ดูแลระบบสรุปว่าตนไม่ได้เปิดตัวเลือกอย่าง FAIL_MAIL_OVER_500_MILES ไว้แน่นอน
  • เมื่อต่อเข้าพอร์ต SMTP ด้วย telnet เซิร์ฟเวอร์ตอบกลับเป็น แบนเนอร์ SunOS sendmail
  • ตอนนั้น Sun แจกจ่ายระบบปฏิบัติการโดยรวม Sendmail 5 มาด้วย ขณะที่ Sendmail 8 โตเต็มที่แล้ว
  • ผู้ดูแลระบบได้ทำให้ระบบเป็นมาตรฐานด้วย Sendmail 8 และใช้งาน sendmail.cf ที่เขียนขึ้นโดยใช้ชื่อตัวเลือกและชื่อตัวแปรแบบยาวที่อธิบายตัวเองของ Sendmail 8
    • Sendmail 5 ใช้โค้ดการตั้งค่าแบบเก่ากว่า คล้ายรหัสลับที่เน้นเครื่องหมายวรรคตอน

การอัปเกรดที่ทำให้เกิดการดาวน์เกรด

  • เมื่อที่ปรึกษา “แพตช์” เซิร์ฟเวอร์ ก็ได้อัปเวอร์ชัน SunOS และในกระบวนการนั้น Sendmail ถูกลดลงเป็น Sendmail 5
  • การอัปเกรดระบบปฏิบัติการปล่อย sendmail.cf เดิมไว้ตามเดิม แต่ไฟล์นั้นไม่ตรงกับเวอร์ชัน Sendmail ที่กำลังรันอยู่อีกต่อไป
  • Sendmail 5 เวอร์ชันที่ Sun แจกจ่ายสามารถประมวลผลกฎจำนวนมากใน sendmail.cf สำหรับ Sendmail 8 ได้
    • กฎส่วนใหญ่ในตอนนั้นยังไม่ได้เปลี่ยนไปมากนัก
  • ปัญหาอยู่ที่ตัวเลือกการตั้งค่ายาว ๆ ของ Sendmail 8 ซึ่ง Sendmail 5 มองเป็นค่าขยะแล้วข้ามไป
  • ในไบนารีของ Sendmail ไม่ได้คอมไพล์ค่าเริ่มต้นของตัวเลือกเหล่านี้ส่วนใหญ่ไว้ และเมื่อหาไม่พบในไฟล์ตั้งค่า ผลลัพธ์จึงถูก ตั้งเป็น 0

timeout 3 มิลลิวินาที กับ 558 ไมล์

  • หนึ่งในค่าที่ถูกตั้งเป็น 0 คือ timeout การเชื่อมต่อ ที่ใช้เมื่อต่อไปยังเซิร์ฟเวอร์ SMTP ระยะไกล
  • จากการทดลอง ภายใต้เงื่อนไขโหลดทั่วไปของเครื่องนั้น ค่า timeout 0 ทำให้การเรียก connect ถูกยกเลิกหลังผ่านไป มากกว่า 3 มิลลิวินาทีเล็กน้อย
  • เครือข่ายแคมปัสในตอนนั้นเป็นแบบสวิตช์ 100%
    • แพ็กเก็ตที่ออกไปภายนอกไม่เจอดีเลย์จากเราเตอร์จนกว่าจะถึง POP และพบเราเตอร์ฝั่งตรงข้าม
    • เวลาที่ใช้เชื่อมต่อไปยังโฮสต์ระยะไกลบนเครือข่ายใกล้ ๆ ที่มีโหลดต่ำ ได้รับผลจาก ระยะทางตามความเร็วแสง มากกว่าดีเลย์จากเราเตอร์ประกอบ
  • เมื่อผู้ดูแลระบบแปลง 3 millilightseconds เป็น miles ใน units ผลลัพธ์คือ 558.84719 ไมล์
  • ค่าที่คำนวณได้แทบตรงกับข้อสังเกตของหัวหน้าภาควิชาที่ว่า “500 ไมล์ หรือมากกว่านั้นอีกเล็กน้อย”

1 ความคิดเห็น

 
GN⁺ 2023-09-20
ความคิดเห็นจาก Hacker News
  • ตอนปี 1998 ตอนที่ผมทำงานซัพพอร์ต IT ให้บริษัทเล็ก ๆ ในออสเตรเลีย พนักงานที่สำนักงานสาขาโทรมาบอกว่า “สกรีนเซฟเวอร์หล่นจากจอไปกดปุ่มบนคีย์บอร์ด แล้วเทอร์มินัลก็ล็อก”
    ตอนแรกคิดว่าเป็นไปไม่ได้ แต่ปรากฏว่าสิ่งที่เขาเรียกว่า “สกรีนเซฟเวอร์” คือ ฟิลเตอร์กันแสงสะท้อน CRT แบบกายภาพที่พบได้ทั่วไปในตอนนั้น และฟิลเตอร์นั้นหล่นลงไปกด Scroll Lock ค้างไว้
    https://dylbs6e8mhm2w.cloudfront.net/productimages/500x500/E...

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

    • Commodore 64 เริ่ม “พิมพ์” เอง เลยส่งซ่อมสองครั้ง แต่ที่ร้านซ่อมมันทำงานปกติเสมอ
      ภายหลังพบว่าเป็นเพราะเอาทีวีเครื่องใหญ่กว่ามาวางใกล้เกินไป ทำให้เกิด ไฟฟ้าสถิต สะสมจนเกิดผลแบบนั้น พอไปถึงร้านซ่อมก็คงคายประจุไปพอแล้ว เลยปกติอยู่พักหนึ่ง
    • นึกถึงผู้ใช้ “ต้องคำสาป” คนหนึ่งที่ผมเคยช่วยช่วงกลางยุค 90
      เราขายคอมพิวเตอร์ให้เขา แต่เขาบอกว่าใช้แล้วขึ้นจอฟ้า พอเอากลับมาทดสอบก็ไม่มีปัญหาอะไร และใช้ร่วมกันที่ออฟฟิศ 30 นาทีก็ยังปกติ
      แต่ทันทีที่คนนั้นแตะเมาส์ คอมพิวเตอร์ก็ขึ้นจอฟ้า และปัญหาหายไปเมื่อ เปลี่ยนเมาส์
    • ในห้องแล็บแห่งหนึ่ง คอมพิวเตอร์ทุกเครื่องมีเครื่องปรับแรงดันไฟฟ้าติดอยู่ แต่คุณภาพแย่มากจนมีแนวโน้มว่าจะให้โทษมากกว่าประโยชน์
      พอมีคนเปิดเครื่องปรับแรงดัน จอ CRT แถว ๆ นั้นจะบิดเบี้ยว กะพริบ และสีเพี้ยนไปชั่วครู่ โต๊ะริมผนังโดนน้อยกว่า แต่ปวดหัวหนักมาก และผมทนอยู่บริษัทนั้นได้แค่ 6 เดือน
    • นึกถึงสวิตช์ “magic” ของ MIT AI Lab: http://www.catb.org/jargon/html/magic-story.html
  • ส่วนที่ดีที่สุดของเรื่องนี้คือคอนซัลแทนต์ที่แพตช์เซิร์ฟเวอร์อยู่ใน Hacker News ด้วย
    เจ้าตัวมาเล่าส่วนที่เขารับผิดชอบไว้ในคอมเมนต์ที่นี่: https://news.ycombinator.com/item?id=23775404

    • ผมลืมเรื่องนั้นไปแล้ว ส่วนที่เกี่ยวข้องของเธรดนั้นเริ่มตรงนี้: https://news.ycombinator.com/item?id=23777700
      สำหรับคนที่สนใจ ผมใส่ไว้ใน /highlights ด้วย: https://news.ycombinator.com/highlights
    • ในบทความบอกว่าคอนซัลแทนต์แพตช์เซิร์ฟเวอร์และรีบูต แต่ไม่ได้แตะระบบเมล ส่วนในคอมเมนต์บอกว่า “ในเมื่อการล้างเครื่องแล้วติดตั้งใหม่ไม่เป็นที่ยอมรับ แน่นอนว่าจึงต้อง อัปเดต sendmail
      บางทีท่อนที่ว่า “เปลี่ยนเรื่องเล็กน้อยเพื่อปกป้องผู้กระทำผิด” น่าจะหมายถึงส่วนนี้
  • เรื่องนี้ถูกขุดขึ้นมาใหม่ทุก ๆ สองสามปี และทุกครั้งก็ทำให้ยิ้มได้

    • มันทำให้นึกถึงเรื่อง “พอซื้อ ไอศกรีมวานิลลา แล้วรถสตาร์ตไม่ติด” ไปด้วย
    • เรื่องนี้น่าจะดีกว่านี้ถ้ายังคงตัวเลขจริงไว้ ดูเหมือนภายหลังจะใส่ตัวเลขปลอมเข้าไป อาจไม่ได้จดไว้หรือจำตัวเลขจริงไม่ได้แล้ว
      3 มิลลิไลต์เซคันด์ ตอนท้ายเป็นระยะทางขาเดียว จึงไม่น่าจะถูกต้อง
    • คงมีใครสักคนตั้งเตือนรายปีไว้เพื่อเอาเรื่องนี้มาโพสต์เก็บคาร์มาได้ บางทีอาจมีคนทำอยู่จริงก็ได้
    • ดูเหมือนจะถึงเวลาเล่าเรื่องนี้ให้คนรุ่นถัดไปฟังอีกครั้งแล้ว
  • ในปี 2007 ตอนทำงานเป็นช่างซัพพอร์ตระดับ 2 ให้หลายบริการใน ISP รายใหญ่ ADSL ยังพบได้ทั่วไป และเพราะใช้สายทองแดง จึงมีระยะทางสูงสุดที่สามารถทำงานได้อย่างเสถียร
    ลูกค้าบางรายใช้แพ็กเกจพิเศษที่พยายามขยายระยะนั้นออกไปอีกประมาณ 2–3 กม. แต่ในทางปฏิบัติค่อนข้างไม่เสถียร และทำได้แค่พอท่องเว็บไหวเท่านั้น
    ฤดูร้อนปีหนึ่ง ลูกค้ารายหนึ่งติดต่อมาว่า IPTV หลุดช่วงกลางวันมาเกือบเดือนแล้ว และอินเทอร์เน็ตก็บางครั้งช้าราวกับธารน้ำแข็ง พอวัดดูพบว่าอยู่ไกลจากชุมสายโทรศัพท์ที่ใกล้ที่สุดมาก และสรุปว่าในช่วงกลางวันที่อากาศร้อน สายขยายตัวจนเกินขีดจำกัดระยะไปเล็กน้อย ทำให้ไม่เสถียร
    แทบไม่มีวิธีช่วยเลย และผมไม่คิดถึง เครือข่ายสายทองแดง เลย

    • ถ้า หุ้มฉนวน สายที่ลากจากเสาไฟเข้าบ้านให้ดีขึ้นจะเป็นยังไงนะ?
  • ราว 15–20 ปีก่อน ตอนทำงานที่ร้านซ่อม มีคนเอาทีวีมาบอกว่าทุกวันพอถึง 5 โมงเย็น ทีวีจะเปลี่ยนเป็นภาษาสเปน
    เขาดูทีวีภาคพื้นดินอยู่ และในการตั้งค่าทีวีมีแค่ภาษาเมนู แต่พอถึง 5 โมงเย็นจริง ๆ เสียงทีวีก็เปลี่ยนเป็นภาษาสเปน พอลองดูอีกหลายช่อง พบว่านอกจากหนึ่งหรือสองช่องแล้วทั้งหมดเป็นภาษาสเปน
    ปรากฏว่าสถานีบางแห่งส่งเสียงหลายภาษา และทีวีบางรุ่นสามารถเปลี่ยนภาษาที่ต้องการได้ น่าเสียดายที่ทีวีมือสองที่เขาซื้อมาเป็นเครื่องจาก ประเทศที่ใช้ภาษาสเปน จึงไม่มีวิธีเปลี่ยนค่าความชอบนั้น

    • ลำโพง Bluetooth ของผมใช้ไปหลายปีแล้วเปลี่ยนเป็นภาษาจีน ผมไม่รู้ว่ามันเกิดขึ้นได้อย่างไร หรือจะเปลี่ยนกลับอย่างไร และในคู่มือก็ไม่มีบอก
      ไม่กี่วันก่อนผมนำหุ่นยนต์ดูดฝุ่นที่ผลิตและซื้อในจีนเข้าบ้าน พอเปิดเครื่องครั้งแรกมันก็ชนเซิร์ฟเวอร์จนปลั๊กหลุด
      ดังนั้นจึงตัดความเป็นไปได้ของ การโจมตีไซเบอร์ที่มีรัฐหนุนหลัง ออกไม่ได้
    • สาเหตุที่มันเปลี่ยนตอน 5 โมงเย็นคืออะไรกันนะ?
  • เป็นตัวอย่างระดับแม่ของ abstraction ที่รั่ว อย่างแท้จริง
    ในจังหวะที่พยายามส่งอีเมล โปรโตคอลส่งข้อมูลระดับล่างที่แท้จริงของเอกภพเชิงสัมพัทธภาพก็เผยตัวออกมา

  • วันนี้ตอนมื้อเที่ยงบังเอิญคุยเรื่อง Sendmail ซึ่งผมรับประกันได้ว่าเป็นเรื่องค่อนข้างหายาก
    นึกถึงตอนตั้งค่า Sendmail ครั้งแรกในปี 1991 หรือ 1992 ตอนนั้นเปิด bat book แล้วแทบจะทึ้งผมตัวเองอยู่หนึ่งสัปดาห์ กว่าจะตั้งค่าครั้งแรกสำเร็จ
    ภายหลังผมเข้าใจการตั้งค่า m4 และเริ่มยอมรับมันได้ในระดับหนึ่ง แต่หลังจากย้ายไป qmail และ postfix ในช่วงกลางยุค 90 แล้ว ก็ไม่เคยหันกลับไปอีก

  • บทความแบบนี้น่าจะควรระบุว่าเป็นปี 1997 ไม่ใช่ปี 2002 อย่างไรก็ตาม ดูเหมือนว่า Trey เองก็จำไม่ได้เช่นกัน: https://www.ibiblio.org/harris/500milemail-faq.html

  • บทความที่เกี่ยวข้อง ยังมีอีกไหม?
    The case of the 500-mile email (2002) - https://news.ycombinator.com/item?id=29213064 - พ.ย. 2021 (93 ความเห็น)
    We can't send email more than 500 miles (2002) - https://news.ycombinator.com/item?id=23775404 - ก.ค. 2020 (135 ความเห็น)
    500 miles (2002) - https://news.ycombinator.com/item?id=18675375 - ธ.ค. 2018 (32 ความเห็น)
    The case of the 500-mile email (2002) - https://news.ycombinator.com/item?id=14676835 - ก.ค. 2017 (56 ความเห็น)
    The 500-mile email (2002) - https://news.ycombinator.com/item?id=9338708 - เม.ย. 2015 (139 ความเห็น)
    The case of the 500-mile email - https://news.ycombinator.com/item?id=2701063 - มิ.ย. 2011 (18 ความเห็น)
    The case of the 500-mile email - https://news.ycombinator.com/item?id=1293652 - เม.ย. 2010 (24 ความเห็น)
    The case of the 500-mile email - https://news.ycombinator.com/item?id=385068 - ธ.ค. 2008 (28 ความเห็น)
    The case of the 500-mile email - https://news.ycombinator.com/item?id=123489 - ก.พ. 2008 (7 ความเห็น)

    • ถ้าเป็นโพสต์ที่ส่งลิงก์เดียวกัน พอผ่านไปราว 1 ปีแล้วจะไม่ถูก “เชื่อมโยง” กันอีกหรือ?
    • มี สคริปต์ ที่ช่วยทำงานแบบนี้แทนไหม?