Я начинаю изучать протокол TCP из Интернета и провожу некоторые эксперименты. После того, как я прочитал статью от http://www.diffen.com/difference/TCP_vs_UDP
«TCP более надежен, так как он управляет подтверждением сообщений и повторными передачами в случае потери частей. Таким образом, абсолютно нет пропущенных данных.»
Затем я делаю свой эксперимент, я пишу блок кода с сокетом TCP:
while( ! EOF (file))
{
data = read_from(file, 5KB); //read 5KB from file
write(data, socket); //write data to socket to send
}
Я думаю, что это хорошо, потому что "TCP надежен" и он "ретранслирует потерянные части" ... Но это совсем не хорошо. Небольшой файл в порядке, но когда дело доходит до 2 МБ, иногда это нормально, но не всегда ...
Теперь я попробую другой:
while( ! EOF (file))
{
wait_for_ACK();//or sleep 5 seconds
data = read_from(file, 5KB); //read 5KB from file
write(data, socket); //write data to socket to send
}
Теперь хорошо ...
Все, что я могу думать, это то, что 1-й сбой из-за:
1. переполнение буфера на отправителе, поскольку скорость отправки ниже, чем скорость записи программы (скорость отправки контролируется TCP)
2. Может быть, скорость отправки больше, чем скорость записи, но некоторые пакеты теряются (после некоторой повторной передачи все равно происходит сбой, а затем TCP сдается ...)
Есть идеи?
Спасибо.