kuttiylajai Ответов: 1

Создание сетевого стека


У меня есть задача разработать сетевую систему обмена сообщениями с использованием winpcap. Я пытаюсь создать его с помощью шаблона декоратора. Допустим, существует буфер обертывания класса, называемый DataBuffer. Есть и другие классы, скажем EthernetPacket, IPPacket, TCPPacket/UdpPacket классы, которые являются DataPacket и имеют Datapacket*.

DataPackets класс
{
#pragma region MemberFunctions
общественный:
// функции публичных членов
DataPackets();
Пакеты данных( unsigned int length_i);
виртуальные ~пакеты данных();
void* GetInternalBuffer();
void SetInternalBuffer(Byte*& newBuffer, int buffer_length);
встроенный короткого целого без знака GetBufferLength();
virtual E_DATA_PACKET_TYPE GetDataPacketType() { return m_data_packet_type; }
пакетирование виртуальной пустоты();

защищенный:
// Защищенные функции-члены
virtual void AddHeader();

частный:
// Частные функции-члены

#pragma endregion

#pragma region DataMembers
общественный:
// Члены открытых данных

защищенный:
// Защищенные Элементы Данных
E_DATA_PACKET_TYPE m_data_packet_type;
Байт* m_pData;

частный:
// Частные члены данных
беззнаковое короткое m_nDataLength;
беззнаковое короткое m_packet_count;
#pragma endregion
};

Мое недоумение вот это
1. Является ли это правильным шаблоном, который я использую?
2. когда добавляется заголовок данных каждого слоя, то у меня есть несколько дополнительных байтов, например для TCPHeader 20 байтов, которые необходимо добавить в начале. Для этого мне нужно скопировать заголовок, а затем буфер во внутренний буфер для каждого слоя. Это кажется неэффективным. Есть ли лучший способ?
3. в IP-слое внутренний пакет будет разделен в зависимости от MTU сети. Таким образом,если буфер равен 65504 байтам, то будет 44 пакета IP - уровня. Как с этим справиться?

Что я уже пробовал:

1. В буферный слой данных, оставить заголовок пустым. А в TCP или UDP позже скопируйте заголовок. Здесь проблема заключается в том, что заголовок TCP составляет 20 байт, а заголовок слоя UDP-всего 8 байт. Как с этим справиться?

Я в замешательстве. Пожалуйста помочь

1 Ответов

Рейтинг:
6

Gerry Schmitz

Используйте поддержку TCP-UDP в .NET для вашего "управляемого" приложения C++ :

TCP-UDP | Microsoft Docs[^]


kuttiylajai

Я использую эту систему в высоконагруженной сети передачи данных в автомобиле. Поэтому, когда я использую сокеты, я получаю отбрасывания пакетов. Вот почему я планирую перейти на WinPCAP. Я проверил это, и частота падений резко снизилась.В этом случае я пытался создать сетевой стек из моего одного. Было бы здорово, если бы вы могли дать мне несколько советов о том, какой шаблон использовать для проектирования сетевого стека. Я подумал о декораторе, потому что мне нужно знать основную платежную нагрузку изначально, чтобы создать контрольную сумму в случае TCP - пакета и IP-пакета.