Автор
|
Тема: Вопрос по TCP/IP
|
Flex Ferrum |
опубликован 04-05-2001 15:53 MSK
Значит, ситуевина следующая. Я открываю соединение с каким либо веб-сервером и запрашиваю оттуда страницу. Предположим, что при этом страница имеет размер 512К. Из них я посредством функции recv читаю только половину (т.е. 256К). Вопрос в следующем: какой будет при этом входящий траффик на мой локальный хост?
|
OlegN
|
опубликован 04-05-2001 16:07 MSK
Вопрос конечно интерестный :-)) Скорее всего если соединение после recv не закрыто то winsock может получить остальные пакеты, если они вообще доберутся до хоста. А если соединение закрыто после recv то остальные пакеты до тебя не доберутся, это точно. |
Flex Ferrum
|
опубликован 04-05-2001 16:10 MSK
Как раз в том-то вся и фишка, что соединение закрывается не сразу. |
OlegN
|
опубликован 04-05-2001 17:09 MSK
Насколько я понимаю механизм, winsock получает пакеты, записывает их во входящую очередь (input queue), затем посылает нотификацию приложению что данные пришли, а функция recv копирует полученные пакеты из очерди в твой буффер. Исходя из этих соображений, если ты не закрываешь соединение то твой хост получит все данные, которые ты запрашиваешь по GET-у, если не произошло ошибки при передаче данных. Ведь в отличие от FTP протокола в HTTP нет возможности оборвать текущую команду, можно только закрыть соединение, в этом случае http сервер в свою очередь должен корректно обработать закрытие сокета и прервать передачу. |
Flex Ferrum
|
опубликован 04-05-2001 17:33 MSK
То есть получается так: если я запрашиваю страничку размером порядка 10-20 МБ, то winsock должен отвести у себя буфер соответсвующего объема под входящие пакеты? Не уверен, что подобная реализация протокола эффективна. А не может локальный хост посылать пакет обратно пакет, информирующий о том, что готов принять очередную порцию данных? Тогда, в принципи, локальный входящий траффик будет равен сумме уже прочитанного объема данных и размера внутреннего буффера winsock. |
OlegN
|
опубликован 04-05-2001 17:46 MSK
В такие тонкости я не вникал, но скорее всего если входящая очередь переполнена, то winsock выдаст нотификацию об ошибке, и не запишет новые данные в очередь. |
purpe
|
опубликован 04-05-2001 19:10 MSK
дествительно у винсока есть какой-то буфер определённого размера и по моим наблюдения порядка 20-30 кб наблюдения основываются на том, что когда через IE запрашиваешь файл со странички (через http) то высвечивается окошко - с каким именем сохранить ентот файл, ну и пока набираешь имя для файла, то проходит какое-то время. ТАК ВОТ ПОДМЕЧЕНО! если файлик размером до ~25кб то после нажатия на "OK" он сразу же оказывается на винте, если размер файла больше, то мопед начинает отправлять в сеть запросы на продолжение передачи файла.2Flex Ferrum думаю, что входящий трафик будет примерно: (помоему величина пакета 256 байт) 256Кб + размер заголовка пакета * кол-во пакетов) ну а кол-во пакетов вроде не трудно вычислить ... вопчим енто всё мои догадки и на доказательство теоремы не претендуют :)
|
server_mouse
|
опубликован 08-05-2001 10:09 MSK
Есть такая штука -- снифером зовётся.... ;-)) |