LINUX.ORG.RU

tcp соединение


0

1

Вот такой практическо-теоретический вопрос.

Есть tcp соединение с окном 31127.
Пишу в сокет:
send(1440 байт)
send(1140 байт)
send(1440 байт)
send(1140 байт)
и так далее

wireshark показывает, что приходит 2 пакета. потом ack.

Вопрос, как делать так что-бы ack приходил реже? Почему окно не выбирается полностью?

Интересное дело что netcat дает точно такие-же результаты:
dd if=/dev/urandom of=./test.jpg bs=1M count=1000
nc 192.168.1.164 1234 < test.jpg
на сервере соответственно nc -l 1234

Так вот, получаю 2 пакета, ack, 2 пакета, асk.
# cat /proc/sys/net/ipv4/tcp_wmem
4096 16384 4194304
# cat /proc/sys/net/ipv4/tcp_rmem
4096 87380 4194304

Почему оно так происходит?



Последнее исправление: sn1ln (всего исправлений: 2)

во-первых, сколько ты сисколов сенд делаешь - это пофигу, если они подряд. Для особо умных есть TCP_CORK (man 7 tcp).

Играй с размерами буфферов - SO_RCVBUF (man 7 socket). Делай recv большими порциями.

В чём состоит проблема с ацк ? или просто, дело принцыпа?

mmarkk
()
Ответ на: комментарий от mmarkk

UDP пока не рассматриваю, так как как там есть еще свои заморочки. Посмотрел netcat вроде принимает по 8192 сейчас попробуем ловить побольше. Всякие SO_RCVBUF и SO_SBDBUF я конечно же увеличивал. Так что единственное что пока приходит на ум это принимать большими кусками.

sn1ln
() автор топика
Ответ на: комментарий от mmarkk

Подправил netcat, с большим приемным буфером и тестом на loopback он начинает разгонятся и передавать большими пачками. Примерно по 15 пакетов. Если буфер на recv дефолтный 8192 - то разгона особого нет (2-3 пакета и ack).

sn1ln
() автор топика
Ответ на: комментарий от sn1ln

на лупбеке - вообще ни разу не правильный тест. возми два компа для теста. ну или хоть виртуалки на бридже.

mmarkk
()
Ответ на: комментарий от anonymous

установка TCP_CORK на клиенте и сервере не помогла. На реальном интерфейсе получается что 2 seq, 1 ack, 2 seq, 1 ack и т.д. На loopback оно работало намного лучше.

sn1ln
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.