Единственное, что гарантирует уровень TCP, - это то, что получатель получит:
- все байты, переданные отправителем
- в том же порядке
Нет никаких гарантий относительно того, как байты могут быть разделены на "пакеты". Все, что вы можете прочитать о MTU, фрагментации пакетов, максимальном размере сегмента или о чем-либо еще, находится ниже уровня сокетов TCP и не имеет значения. TCP предоставляет потоковую службу только .
Что касается вашего вопроса, это означает, что получатель может получить первые 500 байтов, а затем следующие 500 байтов позже. Или получатель может получать данные по одному байту за раз, если это то, что он запрашивает. По этой причине функция recv()
принимает параметр, который сообщает ей, сколько данных возвращает , вместо того, чтобы сообщать , насколько большой пакет .