Хобрук: Ваш путь к мастерству в программировании

как поддерживать неактивное TCP-соединение в Linux C?

если клиент TCP устанавливает соединение TCP с сервером TCP. Тогда клиент TCP никогда не отправляет пакеты на сервер.

Во-первых, я примерно знаю, что брандмауэры рядом с TCP-сервером могут отправлять ему RST. или есть тайм-аут проверки активности, который приводит к завершению TCP-соединения. Но я точно не знаю, что произойдет? Кто-нибудь может немного объяснить?

Во-вторых, возможно ли поддерживать это TCP-соединение, если я не хочу, чтобы оно закончилось?

Я просто надеюсь, что TCP-сервер сможет сохранить это TCP-соединение в своем стеке TCP. Но я не хочу, чтобы был задействован TCP-клиент, я не хочу, чтобы клиент отправлял сообщение KEEP-ALIVE. Я не хочу, чтобы в этом участвовала какая-либо третья сторона. Меня не волнует, потерял ли TCP-клиент соединение или нет. Я просто надеюсь, что когда я пишу исходные коды TCP-сервера, исходные коды смогут поддерживать TCP-соединение на сервере.

Примечание: мой язык программирования — LINUX C.

Благодарность!


  • Это странное использование TCP. Почему вам нужны соединения на сервере, и вам все равно, если клиенты отключены? Или я что-то упускаю? 30.05.2013
  • да, это странно. Я занимаюсь исследовательской работой и хочу разделить TCP. 30.05.2013
  • Итак, вы хотите, чтобы ваш сервер поддерживал TCP-соединения, даже если клиенты отключались? Возьмите ножницы и перережьте кабель. В противном случае FINs из-за умирающих клиентов или RSTs из-за тайм-аута промежуточных устройств из-за отсутствия потока убьют ваше исследование. 30.05.2013
  • FIN от умирающего клиента не проблема. Я могу справиться с этим хорошо. Я просто боюсь RST от узлов. Для RST я могу просто использовать iptables для фильтрации. Любые другие возможности, которые могут убить TCP-соединение? 31.05.2013
  • @misteryes В этом случае машина просто подумает, что соединение открыто. Если вы попытаетесь отправить что-либо на него, в конечном итоге время ожидания истечет из-за отсутствия подтверждений, и если брандмауэр или что-то подобное истечет время ожидания соединения, вы также ничего не получите от него. И вы не можете отличить RST от брандмауэра от RST от клиента. 31.05.2013

Ответы:


1

Если вы включите поддержку активности на своем конце, он будет отправлять периодические запросы, и, если на них не будет ответа, ваш конец сбросит соединение. Keepalive отключен по умолчанию, поэтому, если вы не включите его на своем конце, это не произойдет с вашего конца.

Однако одноранговый узел все еще может включить его на своем конце, и в этом случае его конец будет вести себя, как указано выше, и вы не сможете ни предотвратить, ни даже обнаружить это.

В остальном вопрос не имеет смысла. Клиент или брандмауэр могут отправить RST в любое время по любой из множества причин. Вы не можете предотвратить это, и вы не можете игнорировать это в коде. Если где-либо по какой-либо причине происходит сброс соединения, поддерживать соединение не нужно.

Если вам не нужен TCP, используйте что-то другое.

30.05.2013
  • если я не включу поддержку активности на tcp-сервере, что произойдет? 31.05.2013
  • если я включу поддержку активности, будет ли проверка активности включать порядковый номер и проверять порядковый номер? 31.05.2013
  • Если вы не включите поддержку активности на сервере, он не будет отправлять зонды, поэтому не будет ожидать ответов, поэтому не сбросит соединение в их отсутствие. Это логическое следствие того, что уже было сказано в моем ответе. Проверка активности состоит из ACK для уже полученного порядкового номера. 01.06.2013
  • Новые материалы

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...