Топик для тех, кто хочет поднапрячь свой мозг. Собственно, я предлагаю мысленно решить задачу двух генералов.
Для тех, кто не в теме, суть™:
Две армии, каждая руководимая своим генералом, готовятся к штурму города. Лагеря обеих армий располагаются на двух холмах, разделённых долиной. Единственным способом связи между генералами является отправка посыльных с сообщениями через долину. Но долина занята противником и любой из посыльных может быть перехвачен. Проблема заключается в том, что, несмотря на принятое решение штурмовать город, генералы не согласовали между собой время начала штурма (время Ч).
Для успешного штурма генералы должны атаковать город одновременно. Штурм, предпринятый только одной армией, приведет к катастрофическим последствиям для атакующих. Требуется найти алгоритм обмена сообщениями, который бы позволил каждому из генералов сказать:
«Да, мы оба атакуем в указанное время.»
Отметим, что достичь такого соглашения очень просто — достаточно одного сообщения с временем начала штурма и одного сообщения, подтверждающего получение первого. Сложность задачи заключается в невозможности разработать алгоритм гарантированного обмена этими сообщениями.
Для тех, кто еще не понял:
Есть долина, на дне долины - враг. По разные стороны - два дурака-генерала. Необходимо, чтобы оба генерала договорились о времени атаки, а именно: Первый генерал получил от второго следующее сообщение: «Мужиг, мы отакуем в 15:05». Второй генерал получил от первого следующее сообщение: «Ога! В 15:05 Чмоки чмоки!» Проблема в том, что любой посыльный может быть перехвачен с вероятностью N.
Один из способов решения - послать сотню посыльных с одной и с другой стороны. Но это не Ъ, поскольку до конца не решает проблему.
К слову, эта задача идеально иллюстрирует протокол TCP.
Ну что, где тут аналитики?