дано:
есть 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) что за настройки использует этот говнюк?
я так понимаю что то с длиной пакета а где это крутить?люди ПАМАГИТЕ!
Попробуем разобраться по порядку.В первом и втором пакете видим вот такую строчку
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 поможет?