Как узнать какой сетевой протокол используется? Например, есть поток байт, как выяснить по этим байтам что, например, передается протокол TCP? Какая то зарезервированная последовательность есть или что?
Уточнить вопрос. Нужно определить протокол на каком уровне, физическом, канальном, сетевом или транспортном?
Мы просто имеем провод, из которого льются данные или все же мы перехватываем IP пакеты с каким то там данными?
Вообще мне нужно определить что передается протокол прикладного уровня, например HTTP, инкапсулированный в TCP. И затем брать номер порта из сообщения TCP и парсить некоторые поля из HTTP.
Да, просто провод из которого льются данные. Хотя если бы дали ответ и для перехвата IP пакетов было бы очень-очень здорово.
IP пакет и TCP/UDP сессии - это пакеты разного уровня.
Я просто могу сказать так. "Изучайте модель оси" и разбирайте, как формируются данные на каждом из уровне и обратно.
В вашем случае надо изучить формирование кадров, "Как формируется кадр".
Потом формирование пакетов. Пример IPv4 пакета https://ru.wikipedia.org/wiki/IPv4
Потом заголовки TCP, UDP и т.п. Пример TCP заголовка. https://ru.wikipedia.org/wiki/TCP
А просто взять провод и по первым десяти битам сходу определить что там, TCP/UDP, а то и вообще протокол прикладного уровня не выйдет. Конечно если вы воткнули в устройство провод.
Вопрос практический или теоретический? Если практический, то что у вас есть (ноутбук со снифеером, какое-то специфичное устройство, подключенное к сети или .pcap-файл с дампом трафика), и что должно получиться на выходе?