Przypadek 500-milowego e-maila

Posted on Fri 11 September 2020 in Historia komputerów • 5 min read

Poniżej moje tłumaczenie, kalekie zapewne, jednej z przepysznych anegdot z historii komputerów. To lubię. Oryginał wciąż dostępny http://www.acme.com/jef/netgems/500miles.html**. Wymagana podstawowa znajomość systemów z rodziny Unices oraz spolszczonego slangu. **

Subject: Przypadek 500-milowego e-maila.

Date: Tue, 26 Nov 2002 14:57:40 -0800
From: Trey Harris To: 0xdeadbeef@petting-zoo.net

Oto przypadek, który brzmiał niewarygodnie; właściwie żałuję, że opowiadanie udostępniłem szerokiemu gronu, bo to świetnia dykteryjka na konferencyjne posiedzenia w barze. ;-) Historia została lekko podrasowana aby ochronić winnych, pominąć nudne lub nieistotne szczegóły oraz uczynić ją bardziej wciągającą.

Pracowałem wtedy przy obsłudze uniwersyteckiego systemu poczty elektronicznej. Było to parę lat temu. Pewnego dnia zadzwonił do mnie szef działu statystycznego.

  • Mamy kłopot z wysyłaniem e-maili.
  • Co się dzieje? - spytałem.
  • Nie możemy wysłać poczty dalej niż 500 mil.

Zakrztusiłem się kawą: - Słucham!?

  • Nie możemy wysłać żadnego e-maila dalej niż 500 mil stąd. - powtórzył - Konkretnie to ciut dalej, powiedzmy 520 mil. Ale nie dalej.
  • Eee... E-maile tak nie działają, proszę pana - powiedziałem, próbując nie panikować. Nie powinno się okazywać paniki podczas rozmowy z szefem działu, nawet jeśli jest to szef działu tak niewiele znaczącego jak statystyka. - Dlaczego uważa pan, że wasze e-maile nie dochodzą dalej niż 500 mil?
  • Proszę pana, ja nie *uważam*, ja wiem. - odparł szef - Widzi pan, gdy po raz pierwszy to zauważyliśmy czyli kilka dni temu...
  • Kilka dni?! Czekaliście z tym kilka dni?! - przerwałem mu - I przez cały ten czas nie mogliście wysyłać poczty?
  • Mogliśmy. Tyle, że nie dalej niż...
  • 500 mil, tak, tak. - znowu mu przerwałem - Rozumiem. Ale czemu nie zadzwoniliście wcześniej?
  • Prawdę mówiąc, nie mieliśmy dostatecznej ilości danych, żeby upewnić się w czym rzecz. Aż do dzisiaj...

"No tak, przecież to szef STATYSTYKI."

  • W każdym razie, poprosiłem jedną z geostatystyczek, żeby się temu przyjrzała...
  • Geostatystyczek!?
  • Tak. I przygotowała mapę z zaznaczonym okręgiem, w zasięgu którego nasze e-maile docierają. W promieniu nieco ponad 500 mil jest kilka miejsc do których nie docieramy lub dobijamy się sporadycznie, jednak poza ten okrąg wyjść nie możemy.
  • Rozumiem. - powiedziałem i złapałem się za głowę - Kiedy to się zaczęło? Powiedział pan, że kilka dni temu, ale czy w międzyczasie nic się nie zmieniło w waszych systemach?
  • Był tu informatyk, zapaczował nasz serwer i zrestartował. Dzwoniłem do niego ale twierdzi, że do systemu pocztowego w ogóle się nie dotykał.
  • OK, zobaczę co się dzieje i zadzwonię do pana. - powiedziałem, próbując uwierzyć, że ktoś robi sobie ze mnie jaja. To nie był Prima Aprilis ale zastanawiałem się czy nie zalazłem komuś za skórę na tyle, żeby próbował się odegrać.

Zalogowałem się na serwer statystyków i wysłałem kilka testowych e-maili. Znajdowałem się w Trójkącie Naukowym w Północnej Karolinie i e-maile dotarły na moje konto bez problemu. Tak samo wysłane do Richmond, do Atlanty i Waszyngtonu. Inny, puszczony do Princeton (400 mil) też zadziałał.

Ale potem spróbowałem wysłać pocztę do Memphis (600 mil). Nie doszła. Boston, też nie doszła. Detroit, również porażka. Wziąłem książkę adresową i próbowałem zawęzić obszar. Nowy Jork (420 mil) działał ale Providence (580 mil) już nie.

Zacząłem się martwić o swoje zdrowie psychiczne. Napisałem do kolegi mieszkającego w Północnej Karolinie, którego prowajder internetowy znajdował się w Seattle. Na szczęście, to nie zadziałało. Gdyby okazało się, że to ma coś wspólnego z położeniem geograficznym odbiorcy, a nie z jego serwerem pocztowym, pewnie rzuciłbym się z płaczem na podłogę.

Po ustaleniu, że choć to nieprawdopodobne, problem rzeczywiście istnieje i jest powtarzalny, rzuciłem okiem w plik sendmail.cf. Wyglądał dosyć normalnie. Wyglądał znajomo.

Porównałem go diffem 1 z kopią w moim katalogu domowym. Nikt go nie zmienił - to był ten sam plik, który stworzyłem. I byłem prawie pewny, że nie włączałem w nim opcji "FAIL_MAIL_OVER_500_MILES?". 2 Nie wiedząc co robić, telnetnąłem się na port SMTP. Serwer wyświetlił banner Sunowskiego sendmaila 3.

Chwila, moment! banner Sunowskiego sendmaila? W tym czasie, wraz ze swoim systemem Sun wciąż dostarczał Sendmaila 5, mimo że Sendmail 8 był już całkiem dojrzałym programem. Jako dobry administrator oparłem się właśnie na wersji 8. I również jako dobry administrator napisałem własnoręcznie sendmail.cf, używając w nim długich, opisowych dyrektyw dostępnych w Sendmailu 8, zamiast zagadkowych, pełnych znaków interpunkcyjnych dyrektyw z Sendmaila 5.

Wszystkie kawałki układanki znalazły się na miejscu, a ja zakrztusiłem się fusami wystygłej kawy! Podczas gdy informatyk paczował serwer najwyraźniej zapgrejdował SunOS-a, i jednocześnie *zdałngrejdował* Sendmaila. Uaktualnienie szczęśliwie pozostawiło sendmail.cf bez zmian ale obecnie w niewłaściwej wersji.

Najwidoczniej Sendmail 5 - lub wersja, którą rozprowadzał Sun - dawała sobie radę z sendmail.cf z wersji 8-ej bo większość dyrektyw pozostała niezmieniona. Nowe, długie dyrektywy konfiguracyjne Sendmail potraktował jako śmieci i odpuścił je sobie. A że, binarka Sendmaila nie ma wkompilowanych ustawień domyślnych dla większości z nich, nie znalazłszy ich w sendmail.cf poustawiała je na zero.

Jednym z wyzerowanych ustawień był timeout przy połączeniu do zdalnego serwera SMTP. Po paru eksperymentach okazało się, że dla tej konkretnej maszyny, przy jej typowym obciążeniu, zerowy timeout zamyka połączenie po upływie ciut więcej niż trzech milisekund.

Nasza sieć uniwersytecka miała w tym czasie dość dziwną cechę, mianowicie była w 100% przełączalna. Pakiet wychodzący nie powodował opóźnienia routera dopóki nie dotarł do POP-a 4, zawrócił i osiągnął router od drugiej strony. Czas na połączenie ze zdalnym, niezbyt obciążonym hostem był w w większym stopniu zależny od odległości mierzonej prędkością światła niż od opóźnień routera.

Czując lekkie zawroty głowy, wpisałem w shellu:

$ units 5
1311 units, 63 prefixes
You have: 3 millilightseconds
You want: miles
   * 558.84719
   / 0.0017893979

500 mil, konkretnie ciut dalej.

Trey Harris


W opowiadaniu ostatni akapit w wersji polskiej units wyglądałby tak:
$ units
1311 units, 63 prefixes
Masz: 3 milisekundy świetlne
Chcesz: mile
   * 558.84719
   / 0.0017893979
  1. diff (od differences - ang. różnice) program do porównywania plików i wyświetlania różnic między nimi. ↩︎
  2. "PORZUĆ_EMAIL_DALEJ_NIŻ_500_MIL?" - nie tłumaczę w tekście tej nieistniejącej opcji bo konfiguracja Sendmaila, z tego co wiem, dopuszcza jedynie ustalone, angielskie terminy. ↩︎
  3. Program do obsługi poczty, serwer w odróżnieniu od programów klienckich takich jak Pine czy Mutt. ↩︎
  4. Point Of Precence czyli Miesce Obecności czyli jakiś host lub urządzenie aktywne. ↩︎
  5. Dla tych co nie korzystali nigdy z programu units, jest to bardzo rozbudowany ale prosty w użyciu konwerter jednostek. Po ruchomieniu pyta You have: czyli co masz, należy wtedy wpisać liczbę oraz jednostki które chcemy przeliczyć, potem pyta You want: czyli czego chcesz, należy wpisać jednostki na które poprzednia wartość ma być przeliczona. Na koniec pojawia się wynik. ↩︎