Миналата седмица се сблъсках с много интересен проблем. Всичко започна тривиално. Трябваше да осигуря ftp достъп за клиент. Имам си изграден навик да проверявам дали всичко работи след като създам акаунта, защото ми се е случвало да забравям по нещо (я права на директория, я нещо друго). Логнах се с акаунта на клиента, upload-нах няколко pdf-а, които ми бяха под ръка – всичко бе наред. Не знам защо този път реших да upload-на и някой по-голям файл, по стечение на обстоятелствата бях в / и тръгнах да upload-вам rhinstall-stage2.img. В началото всичко изглеждаше наред, но след 18MB скоростта започна да пада прогресивно, и в края последва connection timed out. Първоначално помислих, че е имало някакъв проблем по трасето, но след повторен опит, нещата бяха същите. И така започнах да отмятам възможни проблеми един по един.
Топологията от моята страна, която в случая е client е следната:
client side: LAN –> linux gateway –> Cisco Router
Топологията от среща:
ISP –> linux gateway –> servers (public IPs) (static routing)
Какво проверих:
client side:
- смяна на ftp client-a – Тествах upload с ncftp, curl, netcat – без никаква промяна, проблема беше налице
- active / passive ftp – всеки, който е пускал FTP server и е имал клиенти зад NAT, знае че това е един от най-често срещаните проблеми – Но моят проблем, не зависеше от това
- upload от друга машина с публично IP, която не е зад локалния linux gateway (за да избегна NAT-a) – проблемът все още си е налице
- upload със спрян SACK – Петър Пенчев направи добро предложение в twitter – но и това не помогна
- upload с промяна на keepalive – търсене в Google за подобни проблеми ме доводе до този пост в serverfault и съответно си поиграх с tcp keepalives – но отново без успех
- upload при по-ниско MTU – друг често срещан проблем с MTU / PMTU-D – промяна на стойностите от моя страна отново не доведе до успех
- upload от мрежи на други доставчици, до които имам достъп – мина без проблеми. На по-късен етап се оказа, че съм се заблудил (ще опиша защо малко по-надолу)
- download на файл от сървъра – без проблеми
- upload от самия cisco router – единственото у-во, което не бях проверил от моя страна бе cisco router-а, за това пробвах upload и от него – успешно upload-нах IOS файла.
Едновременно с това, накарах няколко приятели и познати администратори да тестват и от техни мрежи. Някои успяха да upload-нат файл, други не. Така че, въпреки успеха от рутера, нямаше логика проблема да е в него. Хората, които също не успяха да upload-нат файлове на FTP сървъра нямаха в мрежите си Cisco рутери. Освен това upload до други 10 ftp server-а от моя страна протичаха без никакъв проблем.
server side:
- смяна на ftp server-a (pure-ftpd, vsftpd) – проблемът си остана
- firewall – passive / active проблеми от страна на сървъра, спиране на филтрация по IP, отваряне на портове за passive mode и т.н., дори спиране на firewall-а – не доведе до никаква промяна
- промяна на idle time и timeout на връзките на ftp server-а също не доведе до никаква промяна.
- upload директно до машината която играе ролята на gateway за другите зад нея – проблемът беше налице и там
- пускане на ftp server-а на друг порт – без промяна
- на мрежовите интерфейси няма грешки или колизии
- download на същия файл обратно, т.е. сървъра е клиент – без проблеми, така че проблемът бе само и единствено с upload-а
Същевременно с това, всичко с други протоколи си бе наред – icmp, smtp, ssh (файлът се upload-ваше по scp без никакъв проблем). Реших да направя tcpdump да видя какво става. На пръв поглед нещата изглеждаха нормално, макар че личеше, че има проблем. Нещата протичаха по следния начин:
Last Fragment Lost –> TCP Dup –> TCP Fast Retransmission –> TCP Dup –> TCP Fast Retransmission –> TCP Out of Order –> TCP Tetransmission –> TCP Window Full –> Connection Timed Out
С оглед на всичко това, в крайна сметка нещата сочеха за проблем с мрежово устройство по пътя, който се проявява само за FTP. След като бях проверил всичко при мен, оставаше да звънна на доставчика. Преди това обаче реших да попитам и други хора, работещи в областта на мрежите. И така, колегите от HWBG ме насочиха към евентуален проблем с media converter.
Всичко изглеждаше логично, но ме глождеше едно, как така от някои мрежи успявам да upload-на файл. Ако проблемът в конвертора, то няма логика да работи избирателно. Това можеше да значи, че проблемът не е със самия конвертор на място, а някъде по пътя между мен и него, нормално от други мрежи пътя е друг и upload-а върви. Реших да направя няколко последни теста и установих, че по-рано съм направил грешно предположение. За съжаление не винаги ползвах един и същи тестов файл ( това би ми спестило един ден „блъскане“), но късметът не е бил на моя страна. Естествено, бях се сетил, че проблемът всъщност може да е във файла, но това че други хора също не успяваха да качат големи файлове, значеше, че проблемът не е в самия файл. Оказа се обаче, че проблемът съществува само за точно определени файлове/разширения:
- с големи .avi .zip .rar – всичко бе ОК
- с големи .iso .img .eps – проблемът бе налице
Това, а и факта, че upload-а спираше винаги на точно едно и също място, значеше че конверторите имат проблем с точно определени символи, вероятно заради data stuffing. Ето hexdump за отделните файлове.
Remote write failed after 18808832 bytes had been sent: Connection timed out.
hexdump -C -s 18808800 -n 128 -v rhinstall-stage2.img
011effe0 b3 d1 36 4c 4d 4d 7a 32 92 95 1c c4 93 8b 9f a2 |..6LMMz2........|
011efff0 6d 9b 9a 9c 4c e4 4e 76 f5 3e 7f 22 ff 9e d7 79 |m...L.Nv.>."...y|
011f0000 83 d7 a2 ed 9e 69 29 93 fd fd 7a 7e 3e e1 ff 78 |.....i)...z~>..x|
011f0010 3e a1 3e 9a 50 df 49 a8 ef 45 af 75 f3 bc 15 6d |>.>.P.I..E.u...m|
011f0020 33 d5 c7 92 5e 7d a3 eb fd ea d7 dc cd e7 bc 10 |3...^}..........|
011f0030 6d 6b e5 2f 45 db 96 a8 8d 68 3b ac a6 e3 97 ff |mk./E....h;.....|
011f0040 c4 eb 60 ad f9 36 71 17 ab d9 c8 6e 0e 71 98 63 |..`..6q....n.q.c|
011f0050 5c e0 21 5e e0 79 f6 f3 3a 9f 72 0b cb 58 ce 0a |\.!^.y..:.r..X..|
011f0060
hexdump -s 18808800 -n 128 -v rhinstall-stage2.img
11effe0 d1b3 4c36 4d4d 327a 9592 c41c 8b93 a29f
11efff0 9b6d 9c9a e44c 764e 3ef5 227f 9eff 79d7
11f0000 d783 eda2 699e 9329 fdfd 7e7a e13e 78ff
11f0010 a13e 9a3e df50 a849 45ef 75af bcf3 6d15
11f0020 d533 92c7 7d5e eba3 eafd dcd7 e7cd 10bc
11f0030 6b6d 2fe5 db45 a896 688d ac3b e3a6 ff97
11f0040 ebc4 ad60 36f9 1771 d9ab 6ec8 710e 6398
11f0050 e05c 5e21 79e0 f3f6 9f3a 0b72 58cb 0ace
11f0060
hexdump -C -s 26968000 -n 128 -v rhinstall-stage2.img
019b7fc0 2c 3d 2c 03 2c 23 2c 13 2c 33 2c 0b 2c 2b 2c 1b |,=,.,#,.,3,.,+,.|
019b7fd0 2c 3b 2c 07 2c 27 2c 17 2c 37 2c 0f 2c 2f 2c 1f |,;,.,',.,7,.,/,.|
019b7fe0 2c 3f ac 00 ac 20 ac 10 ac 30 ac 08 ac 28 ac 18 |,?... ...0...(..|
019b7ff0 ac 38 ac 04 ac 24 ac 14 ac 34 ac 0c ac 2c ac 1c |.8...$...4...,..|
019b8000 ac 3c ac 02 ac 22 ac 12 ac 32 ac 0a ac 2a ac 1a |.<..."...2...*..|
019b8010 ac 3a ac 06 ac 26 ac 16 ac 36 ac 0e ec 5f 58 5d |.:...&...6..._X]|
019b8020 58 3d 58 7d 58 03 58 43 58 23 58 63 58 13 58 53 |X=X}X.XCX#XcX.XS|
019b8030 58 33 58 73 58 0b 58 4b 58 2b 58 6b 58 1b 58 5b |X3XsX.XKX+XkX.X[|
019b8040
hexdump -s 18808800 -n 128 -v rhinstall-stage2.img
11effe0 d1b3 4c36 4d4d 327a 9592 c41c 8b93 a29f
11efff0 9b6d 9c9a e44c 764e 3ef5 227f 9eff 79d7
11f0000 d783 eda2 699e 9329 fdfd 7e7a e13e 78ff
11f0010 a13e 9a3e df50 a849 45ef 75af bcf3 6d15
11f0020 d533 92c7 7d5e eba3 eafd dcd7 e7cd 10bc
11f0030 6b6d 2fe5 db45 a896 688d ac3b e3a6 ff97
11f0040 ebc4 ad60 36f9 1771 d9ab 6ec8 710e 6398
11f0050 e05c 5e21 79e0 f3f6 9f3a 0b72 58cb 0ace
11f0060
hexdump -C -s 46497764 -n 128 -v BACB-Standard-170x230.eps
02c57fe4 f8 20 f8 f8 f8 20 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 |. ... ..........|
02c57ff4 f8 f8 f8 f8 f8 f8 f8 f8 f8 27 f8 f8 f8 27 f8 f8 |.........'...'..|
02c58004 f8 27 f8 f8 f8 20 f8 f8 f8 04 f8 f8 f8 26 f8 f8 |.'... .......&..|
02c58014 f8 26 f8 f8 f8 04 f8 f8 f8 05 f8 04 f8 27 f8 f8 |.&...........'..|
02c58024 f8 26 f8 f8 f8 05 f8 f8 f8 27 f8 f8 f8 27 f8 f8 |.&.......'...'..|
02c58034 f8 f8 f8 f8 f8 26 f8 04 f8 27 f8 f8 f8 04 f8 f8 |.....&...'......|
02c58044 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 |................|
02c58054 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 f8 |................|
02c58064
hexdump -s 46497764 -n 128 -v BAC-170x230.eps
2c57fe4 20f8 f8f8 20f8 f8f8 f8f8 f8f8 f8f8 f8f8
2c57ff4 f8f8 f8f8 f8f8 f8f8 27f8 f8f8 27f8 f8f8
2c58004 27f8 f8f8 20f8 f8f8 04f8 f8f8 26f8 f8f8
2c58014 26f8 f8f8 04f8 f8f8 05f8 04f8 27f8 f8f8
2c58024 26f8 f8f8 05f8 f8f8 27f8 f8f8 27f8 f8f8
2c58034 f8f8 f8f8 26f8 04f8 27f8 f8f8 04f8 f8f8
2c58044 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8
2c58054 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8 f8f8
2c58064
hexdump -C -s 163800 -n 128 -v ADRIANE-KNOPPIX_V6.2.1CD-2010-01-31-EN.iso
00027fd8 06 3a 66 27 c1 d2 6a 21 b9 6e fa 2f a1 70 24 79 |.:f'..j!.n./.p$y|
00027fe8 1e 35 01 a1 b5 99 04 e0 60 05 6a 05 0e 8c b6 1d |.5......`.j.....|
00027ff8 05 28 50 63 1b 45 48 6c 38 01 c1 8c 5d 26 0e aa |.(Pc.EHl8...]&..|
00028008 01 14 60 6e 64 23 06 a5 20 a9 3b 1e 9d 11 e9 10 |..`nd#.. .;.....|
00028018 b6 28 ec dc c0 59 0f 3d e8 c6 70 f7 26 20 5c 8d |.(...Y.=..p.& \.|
00028028 ff 03 2b e8 ab 17 86 58 08 b4 37 00 73 ac d1 40 |..+....X..7.s..@|
00028038 0b 1f 83 35 84 36 6d 68 41 56 d5 1f e8 fe f6 51 |...5.6mhAV.....Q|
00028048 8a ac 6c 7e 55 1d b7 ef 0e 26 7d c8 d0 16 cd be |..l~U....&}.....|
00028058
hexdump -s 163800 -n 128 -v ADRIANE-KNOPPIX_V6.2.1CD-2010-01-31-EN.iso
0027fd8 3a06 2766 d2c1 216a 6eb9 2ffa 70a1 7924
0027fe8 351e a101 99b5 e004 0560 056a 8c0e 1db6
0027ff8 2805 6350 451b 6c48 0138 8cc1 265d aa0e
0028008 1401 6e60 2364 a506 a920 1e3b 119d 10e9
0028018 28b6 dcec 59c0 3d0f c6e8 f770 2026 8d5c
0028028 03ff e82b 17ab 5886 b408 0037 ac73 40d1
0028038 1f0b 3583 3684 686d 5641 1fd5 fee8 51f6
0028048 ac8a 7e6c 1d55 efb7 260e c87d 16d0 becd
0028058
Вече беше 100% сигурно, че проблемът е в конвертор. Оставаше да намерим кой. След съдействие от страна на доставчика подменихме първо този на място. Разлика нямаше. След това дойде ред и на този преди него, и воала. Всичко вече работи както трябва.