Подражая TCP с UDP — Что-то не так с использованием пакетов вместо «байтов» для размера окна?

Я пишу реализацию TCP, используя сокеты UDP. Мой первоначальный алгоритм будет основан на TCP Reno. Мой вопрос заключается в том, что, поскольку пакеты в любом случае имеют размер в байтах, будут ли какие-либо существенные недостатки в реализации скользящего окна с использованием maxNum Packets скорее, чем maxNum Bytes? Разве это не одно и то же?

Для некоторого примера кода я в настоящее время делаю mmap() на моих данных, а затем упаковать его в map:

int
ReliableSender::Packetize(char* data, int numBytes)
{
int seqNum = 1;
int offset = 0;
char* payload = NULL;
unsigned int length = sizeof(struct sockaddr_in);

bool dataRemaining = true;
while(dataRemaining)
{
size_t packetSize;
(numBytes > MTU) ? packetSize = MTU : packetSize = numBytes;
memcpy(payload, data, packetSize);
Packet pac = {seqNum, 0, payload};

dataMap.insert(make_pair(seqNum, pac));

if(numBytes > MTU)
payload = &data[offset];
else
dataRemaining = false;

offset += MTU;
numBytes -= MTU;
seqNum++;
}

return 0;
}

struct Packet
{
int seqNum;
int ackNum;
char* payload;
};

Я думал, что могу просто настроить скользящее окно, увеличив количество «пакетов», которые я отправляю без ACK а не заданное количество байтов — что-то не так с этим? Это для очень простого приложения; ничего, что должно быть портативным или запущено в производство в ближайшее время.

0

Решение

Да. TCP является протоколом потока байтов. Вы можете отправлять один байт за раз, поэтому вы можете изменять окно приема по одному за раз. Поэтому вы не можете выразить окно приема в пакетах.

Если пакеты имеют размер в байтах, вы просто теряете пропускную способность.

1

Другие решения


По вопросам рекламы [email protected]