使用 UDP 模仿 TCP - 使用数据包而不是窗口大小'bytes'有什么问题吗?

Mimicing TCP with UDP - Anything wrong with using packets instead of 'bytes' for window size?

本文关键字:bytes 什么 问题 窗口大小 TCP 模仿 UDP 数据包 使用      更新时间:2023-10-16

我正在使用UDP套接字编写一个TCP实现。我的初始算法将基于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而不是设定字节数的情况下发送的"数据包"数量来调整滑动窗口——这有什么问题吗?这是一个非常简单的应用程序;没有什么东西需要在短期内移植或投入生产。

是。TCP是一种字节流协议。您可以一次发送一个字节,因此可以一次将接收窗口更改一个。因此,您不能用数据包来表示接收窗口。

如果数据包是字节大小,那么您只是在浪费带宽。