Russian Qt Forum

Qt => Работа с сетью => Тема начата: merke от Сентябрь 30, 2010, 16:35



Название: Вопрос по передачи файлов по сети
Отправлено: merke от Сентябрь 30, 2010, 16:35
Всем привет!

В общем есть клиент есть сервер! Они друг другу могут слать файлы. Шлю файлы паками по 1024 * 64 байта.

Подскажите оптимальный ли это размер куска передаваемого за один раз? Или следует увеличить размер передаваемых кусков? Если да, то подскажите размер.

Буду рад помощи!


Название: Re: Вопрос по передачи файлов по сети
Отправлено: crossly от Сентябрь 30, 2010, 19:08
что значит 1024*64... где это задается??


Название: Re: Вопрос по передачи файлов по сети
Отправлено: merke от Октябрь 01, 2010, 03:45
Это размер куска, который считываеся с файла и передается по сокету принимающей стороне.


Название: Re: Вопрос по передачи файлов по сети
Отправлено: navrocky от Октябрь 01, 2010, 10:02
Мне кажется оптимальный размер можно выяснить только экспериментальным путем, и он скорее всего будет зависеть от оборудования/ОС. Не имеет смысла делать меньше ethernet frame 1500байт )

Возможные варианты:
1) потестить самому выявить некую константу и забить ее гвоздем
2) дать возможность пользователю покрутить эту настройку
3) сделать автоподбор опимального значения


Название: Re: Вопрос по передачи файлов по сети
Отправлено: p166 от Октябрь 01, 2010, 12:24
Мне кажется оптимальный размер можно выяснить только экспериментальным путем, и он скорее всего будет зависеть от оборудования/ОС. Не имеет смысла делать меньше ethernet frame 1500байт )

Возможные варианты:
1) потестить самому выявить некую константу и забить ее гвоздем
2) дать возможность пользователю покрутить эту настройку
3) сделать автоподбор опимального значения

ethernet frame на самом деле называется MTU (http://ru.wikipedia.org/wiki/MTU (http://ru.wikipedia.org/wiki/MTU)). На разных сетевых картах это значение может быть разным, но обычно оно равно 1500. Точное значение можно посмотреть в диспетчере устройств или через ifconfig. Максимальное значение определить можно только экспериментально, хотя если чтение идет в локальной гигабитной сети, то можно читать и мегабайтами без ущерба производительности.


Название: Re: Вопрос по передачи файлов по сети
Отправлено: Barmaglodd от Октябрь 01, 2010, 12:48
TCP или UDP? или ещё что?


Название: Re: Вопрос по передачи файлов по сети
Отправлено: crossly от Октябрь 01, 2010, 13:54
а для чего вообще файл резать на куски... ??


Название: Re: Вопрос по передачи файлов по сети
Отправлено: merke от Октябрь 01, 2010, 13:56
TCP! Потому что отослать файл размером 700 мб. нельзя за один раз!


Название: Re: Вопрос по передачи файлов по сети
Отправлено: k06a от Октябрь 02, 2010, 13:29
Отправлять по 64*1024 врядли получится . . .
Ведь поле размера данных внутри заголовка IP занимает 2 байта
и может принимать значения от 0 до (64*1024-1), а заголовки
TCP имеет размер от 20 до 60 байт,
UDP имеет размер 8 байт (включает 2 порта, размер и контрольную сумму)

Таким образом:
1. При передаче по TCP можно рассчитывать на: (64*1024 - 1) - 60 = 65 475 байт
2. При передаче по UDP можно рассчитывать на: (64*1024 - 1) - 20 = 65 515 байт

Я использую либо 63*1024, либо 64000.


Название: Re: Вопрос по передачи файлов по сети
Отправлено: navrocky от Октябрь 03, 2010, 00:34
К чему такое стремление к 64Кб не могу понять, TCP всё равно порежет хз как.


Название: Re: Вопрос по передачи файлов по сети
Отправлено: alexcpp от Октябрь 03, 2010, 01:57
90% ответов - ни о чем.
к примеру:
Цитировать
но обычно оно равно 1500
Вряд-ли автор понимает, что 1500 - это не байты ;)

Александр, прочтите это (http://en.wikipedia.org/wiki/Transmission_Control_Protocol). Все вопросы отпадут.


Название: Re: Вопрос по передачи файлов по сети
Отправлено: navrocky от Октябрь 03, 2010, 13:14
Что же это тогда если не байты - граммы чтоли? да и tcp тут причем когда речь шла об ethernet...

Цитировать
90% ответов - ни о чем.

это да, слишком много факторов (пропускная способность канала, нагруженность, латентность, тип канала, скорость диска, скорость компа и т.д.), просчитать оптимальный объем имхо не получится, только подбор..

И еще добавлю что все эти оптимизации дадут едва заметный на глаз прирост в скорости, я бы не парился..