URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1606
[ Назад ]

Исходное сообщение
"Работа с сокетами"

Отправлено Drap , 14-Апр-03 19:23 
дано:
есть 2 проги (клиент, сервер) исзодников нет. Клиент крнектится на сервер и передает 6 байт данных, сервер интерпретирует и з по своему и отображает. я tcpdump'ом посмотрел как они это делают
вот что увидел:
14:26:07.115651 192.168.0.3.3014 > lab2.1234: P 1615:1621(6) ack 2153
win 30615 (DF)
0x0000   4500 002e 019c 4000 8006 77d8 c0a8 0003        E.....@...w.....
0x0010   c0a8 0002 0bc6 04d2 ea4a 24ee 8117 1790        .........J$.....
0x0020   5018 7797 48be 0000 0200 0100 b2a2             P.w.H.........
14:26:07.115842 lab2.1234 > 192.168.0.3.3014: P 2153:2161(8) ack 1621
win 5840 (DF)
0x0000   4500 0030 ce4c 4000 4006 eb25 c0a8 0002        E..0.L@.@..%....
0x0010   c0a8 0003 04d2 0bc6 8117 1790 ea4a 24f4        .............J$.
0x0020   5018 16d0 5f20 0000 0000 0000 0000 0000        P..._...........

и в томже духе
вобщем он ему передает 0200 0100 b2a2

пытаюсь написать свой клиент и отдать серверу тоже
6 байт и вот что получается
16:48:19.792942 lab2.37667 > 192.168.0.3.1234: P 1:7(6) ack 1 win 5840 <nop,nop,timestamp 28624968 0> (DF)
0x0000   4500 003a 8814 4000 4006 3154 c0a8 0002        E..:..@.@.1T....
0x0010   c0a8 0003 9323 04d2 99d9 405b e76e 5479        .....#....@[.nTy
0x0020   8018 16d0 637a 0000 0101 080a 01b4 c848        ....cz.........H
0x0030   0000 0000 0200 0100 0000                       ..........

т.е. я отдаю 0200 0100 0000  но блин длины пакетов разные
я все перепробовал то больше (для SOCK_STREAM) то
меньще для (SOCK_RAW) что за настройки использует этот говнюк?
я так понимаю что то с длиной пакета а где это крутить?

люди ПАМАГИТЕ!


Содержание

Сообщения в этом обсуждении
"Работа с сокетами"
Отправлено scum , 16-Апр-03 16:59 
Попробуем разобраться по порядку.

В первом и втором пакете видим вот такую строчку
0x0020   5018
здесь 5 означает длину TCP заголовка, выраженную в 32 битных словах, т.е. общая длина заголовка равна 5*4 или 20 байт. Это самый что ни на есть типичный заголовок.

В третьем пакете видим
0x0020   8018
теперь длина заголовка стала 32 байта за счет полей "TCP Options" (0101 080a 01b4 c848 0000 0000) которые сам tcpdump и показывает в виде <nop,nop,timestamp 28624968 0>      

Так что говнодав этот, напротив, никаких настроек не использует, а шлет простые стандартные TCP пакеты длиной 20 байт, без опций. Вот и все.
А вот как включать/выключать этот мехнизм, не помню. Если я не ошибаюсь, это уже привилегия сетевого стека системы и настраивается эта фича в самой системе, по крайней мере я не нашел такого параметра для setsockopt(). Может SO_BSDCOMPAT поможет?