| Alexander Pevzner ( @ 2008-05-23 22:27:00 |
Хозяйке на заметку
Представьте себе, у Вас есть 2 компутера, на них 2 программы, A и B, и они общаются между собой по TCP. Представили?
Теперь представьте себе, что один из этих компутеров - лабтоп, и ему закрыли крышку. Вместе с находящейся внутри программой.
Другой компутер рано или поздно заметит, что ему больше не с кем разговаривать, и бросит соединение. Но под крышкой-то все спят, и об этом не в курсе.
Теперь, скажем, прошла неделя и лабтоп открыли. А там внутри программа, а у нее - TCP соединение. Она, наверное, подергается и попробует туда чего-нибудь попосылать. Ну, там keepalive или данные, не суть важно.
Граждане, которые придумали TCP, они, между прочим, не напрасно решили, чтобы когда TCP стек получает TCP пакет, про который он не может понять, к кому он относится, он должен в ответ послать TCP RST. Вот именно для таких случаев, хотя в те времена и лабтопов-то не было. Гении, одним словом, на 20 лет вперед все предусмотрели.
Только это вот было до 11-го сентября. А после 11-го сентября у всех случилась коллективная паранойя и все обложились злобными фаирволами, чтобы там пакет плохой или боинг случайно не залетел. Несекурно в общем стало на непонятные пакеты отвечать ресетом. И отвечать ресетом на них перестали.
Поэтому никто на эти keepalive ресетом отвечать не будет. И вообще никак не будут, будут молчать в трубку. А TCP, он довольно цепкий протокол. Он может неделю слать keepalive и не расстраиваться на тему отсутствия ответов. Поэтому программа, та, которая была под крышкой, она так и не узнает, что ей больше не с кем разговаривать. Долго не узнает - достаточно, чтобы Вам позвонил заказчик и поинтересовался, что за ботва.
А говорят, TCP - надежный протокол...
Представьте себе, у Вас есть 2 компутера, на них 2 программы, A и B, и они общаются между собой по TCP. Представили?
Теперь представьте себе, что один из этих компутеров - лабтоп, и ему закрыли крышку. Вместе с находящейся внутри программой.
Другой компутер рано или поздно заметит, что ему больше не с кем разговаривать, и бросит соединение. Но под крышкой-то все спят, и об этом не в курсе.
Теперь, скажем, прошла неделя и лабтоп открыли. А там внутри программа, а у нее - TCP соединение. Она, наверное, подергается и попробует туда чего-нибудь попосылать. Ну, там keepalive или данные, не суть важно.
Граждане, которые придумали TCP, они, между прочим, не напрасно решили, чтобы когда TCP стек получает TCP пакет, про который он не может понять, к кому он относится, он должен в ответ послать TCP RST. Вот именно для таких случаев, хотя в те времена и лабтопов-то не было. Гении, одним словом, на 20 лет вперед все предусмотрели.
Только это вот было до 11-го сентября. А после 11-го сентября у всех случилась коллективная паранойя и все обложились злобными фаирволами, чтобы там пакет плохой или боинг случайно не залетел. Несекурно в общем стало на непонятные пакеты отвечать ресетом. И отвечать ресетом на них перестали.
Поэтому никто на эти keepalive ресетом отвечать не будет. И вообще никак не будут, будут молчать в трубку. А TCP, он довольно цепкий протокол. Он может неделю слать keepalive и не расстраиваться на тему отсутствия ответов. Поэтому программа, та, которая была под крышкой, она так и не узнает, что ей больше не с кем разговаривать. Долго не узнает - достаточно, чтобы Вам позвонил заказчик и поинтересовался, что за ботва.
А говорят, TCP - надежный протокол...