Определить что пришло на сервер — пакет или сегмент (udp/tcp)?
Начнём с того, что есть сегмент - как единица данных на транспортном уровне, а есть сегмент в контексте протокола TCP - количество данных передаваемое за раз. В данном вопросе подразумевается именно последнее.
Есть клиент-серверный чат на сокетах - пишется на python. В момент подключения клиента - он (клиент) может выбрать способ передачи сообщения на сервер. Как со стороны сервера определить - тип пришедшего сообщения - его транспортный протокол и в зависимости от этого отвечать разным клиентам? Т.е. нужен своего рода сниффер пакетов (пакетов в общем понимании - а-ля -сообщений). Где можно почитать про подобное?
Валентин
@vvpoloskin Куратор тега Компьютерные сети
Инженер связи
Не понятно, зачем сниффер. Программно и под tcp, и под udp открываются разные сокетов и переводятся в состояние LISTEN. Какой конкретно из них выбрать для нового соединения решает операционная система исходя из приходящих пакетов (сетевой стек сам анализирует пакеты). А если все-таки надо дать больше гибкости, есть iptables.
Не нужно ничего сниффить, чтобы понять, TCP-пакет пришёл или UDP - он приедут в разные порты, соответственно - можно реализовать и отличающуюся обработку.
ну ок, но я думал, что порт независим от протокола и если верить Википедии: (https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D...) - один порт может обрабатывать оба протокола (и вообще, насколько я понимаю - порт это же просто числовой идентификатор для процесса (не сам PID процесса) которому нужно передать пришедшую информацию). Да, я говорю как раз про отличающуюся обработку. Вот есть у меня сервер и два клиента А и Б. С А - приходит tcp, с Б - UDP - пришли, естественно - на разные порты - условно порт 1 и 2 - как понять - что на каком порту? Или я не правильно понимаю?
BadCats, не надо привязываться к портам, это точно.
Я за прошедший год повидал трафик от нескольких десятков индустриальных протоколов.
Как TCP, так и UDP и на OSI уровнях выше.
Порты могут быть абсолютно произвольные.
Выше в несколько строчек легко определить наличие tcp/udp в пакете с помощью scapy.
но я думал, что порт независим от протокола и если верить Википедии
Вы не правильно интерпретировали вики. Порты как раз строго привязаны к протоколу (TCP или UDP).
Порты есть и у UDP и у TCP. Но это независимые множества портов. Ничего не мешает одной программе открыть порт с одним числовым номером как для UDP так и для TCP и это будут разные порты и разные открытые сокеты. Именно этот факт отражен в вики, где указано одно числовое значение порта для обоих протоколов. Вы можете делать точно так же.