Модераторы: marykone
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос прос SYN, SYN/ACK и ACK 
V
    Опции темы
Nookie
Дата 26.11.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



пишу прогрмму, которая создает соединение с помощью ROW сокетов, то есть SYN, SYN/ACK и ACK.
В общем написал ее и начал тестировать, разобрался с SEQ_NUM, вроде все правильно.. вот только соедниение не создается, а мне в ответ сразу прилетает RST пакет, типа ты неправильно сделал что-то.... вот не пойму в чем неправильность. МОжет кто подскажет в чем еще ньюансы есть, кроме как SEQ_NUM и ACK_NUM?? Жду ответа.

Еще проанализировал пакеты, например если создает соединение другая прога
Код

#клиент посылает пакет SYN  ##################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:23:69:71
MAC source            :00:0c:29:0f:63:d0
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :60
ID                    :32691
Fragment offset       :0x4000
MF                    :0
DF                    :1
TTL                   :64
Protocol              :6
IP source             :192.168.171.135
IP destination        :192.168.171.136
==TCP_HEADER=================================
Port source         :3284
Port destination    :80
Sequence number     :25982
Ack number          :0
Data offset         :10
FIN:0,SYN:1,RST:0,PSH:0,ACK:0,URG:0,ECE:0,CWR:0
Window              :5840
Urgent pointer      :0
####сервер отвечает нам #####################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:0f:63:d0
MAC source            :00:0c:29:23:69:71
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :60
ID                    :0
Fragment offset       :0x4000
MF                    :0
DF                    :1
TTL                   :64
Protocol              :6
IP source             :192.168.171.136
IP destination        :192.168.171.135
==TCP_HEADER=================================
Port source         :80
Port destination    :3284
Sequence number     :26492
Ack number          :25982
Data offset         :10
FIN:0,SYN:1,RST:0,PSH:0,ACK:1,URG:0,ECE:0,CWR:0
Window              :5792
Urgent pointer      :0
####мы отправляем ack########################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:23:69:71
MAC source            :00:0c:29:0f:63:d0
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :52
ID                    :32692
Fragment offset       :0x4000
MF                    :0
DF                    :1
TTL                   :64
Protocol              :6
IP source             :192.168.171.135
IP destination        :192.168.171.136
==TCP_HEADER=================================
Port source         :3284
Port destination    :80
Sequence number     :25982
Ack number          :26492
Data offset         :8
FIN:0,SYN:0,RST:0,PSH:0,ACK:1,URG:0,ECE:0,CWR:0
Window              :730
Urgent pointer      :0
#############################################


Это то что получилось например с Оперой, при подключении к Серверу. А вот что выдает моя программа
Код

#клиент посылает пакет SYN  ##################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:23:69:71
MAC source            :00:0c:29:0f:63:d0
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :40
ID                    :256
Fragment offset       :0
MF                    :0
DF                    :0
TTL                   :255
Protocol              :6
IP source             :192.168.171.135
IP destination        :192.168.171.136
==TCP_HEADER=================================
Port source         :1555
Port destination    :80
Sequence number     :3448
Ack number          :3448
Data offset         :5
FIN:0,SYN:1,RST:0,PSH:0,ACK:0,URG:0,ECE:0,CWR:0
Window              :65535
Urgent pointer      :0
####сервер отвечает нам #####################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:0f:63:d0
MAC source            :00:0c:29:23:69:71
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :44
ID                    :0
Fragment offset       :0x4000
MF                    :0
DF                    :1
TTL                   :64
Protocol              :6
IP source             :192.168.171.136
IP destination        :192.168.171.135
==TCP_HEADER=================================
Port source         :80
Port destination    :1555
Sequence number     :29917
Ack number          :3448
Data offset         :6
FIN:0,SYN:1,RST:0,PSH:0,ACK:1,URG:0,ECE:0,CWR:0
Window              :5840
Urgent pointer      :0
####мы отправляем ack########################
==ETHERNET_HEADER============================
MAC destination       :00:0c:29:23:69:71
MAC source            :00:0c:29:0f:63:d0
Packet type ID field  :0x800
==IP_HEADER==================================
IP version            :4
IP header length      :5
TOS                   :0
Total length          :40
ID                    :256
Fragment offset       :0
MF                    :0
DF                    :0
TTL                   :255
Protocol              :6
IP source             :192.168.171.135
IP destination        :192.168.171.136
==TCP_HEADER=================================
Port source         :1555
Port destination    :80
Sequence number     :3448
Ack number          :29917
Data offset         :5
FIN:0,SYN:0,RST:0,PSH:0,ACK:1,URG:0,ECE:0,CWR:0
Window              :65535
Urgent pointer      :0
#############################################

Но на это все в итоге получаю RST пакет о разрыве соединения...
Жду помощи, очень хочется разобраться в этом.
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Nookie
Дата 26.11.2008, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



Это все я экспериментировал на полигоне, который построил на VMwere. Попробывал на внешнем IP, соединение создается.. а вот что за фигня с моей сетью не пойму....
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Олег2005
Дата 26.11.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Опера шлет окно размером
Window              :5840 = 1460*4 (MSS=1460 для эзернета)
Вы шлете:
Window              :65535
При этом в Опере есть опция MSS  - (длина TCP-хедера 40 байт) и еще какие-то
а у вас его в SYN-сегменте нет - длина TCP-хедера 20 байт. - а значит MSS по умолчанию - 576 байт, а окно - огого.....
Вот сервер и считает наверно это дело непонятным - и рвет соединение. 

Это сообщение отредактировал(а) Олег2005 - 26.11.2008, 15:40
PM MAIL WWW MSN   Вверх
Nookie
Дата 26.11.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



попробывал tcpdump проверить что я шлю и что браузер... в итоге отличается на вот это 

Код

<mss 1460,sackOK,timestamp 1348338 0,nop,wscale 7>


ты не в курсе как добавить это програмно? или хотябы что почитать по этому поводу. В инете мало чего можно найти про реализацию соединения на основе RAW сокетах.
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Олег2005
Дата 26.11.2008, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Все правильно - в SYN-сегменте всегда шлем MSS - ну а остальное уж по установкам в регистрах - например SACK и время и тд
Просто в TCP-хедере надо прописать все эти опциии - тогда и офсет будет другой - хедер то увеличится..

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TCP_options.zip 14,43 Kb
PM MAIL WWW MSN   Вверх
Nookie
Дата 26.11.2008, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



не пойму.. а почему это не кажется странным внешниму айпи? а только для моей машинки ВМВаре?
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Олег2005
Дата 26.11.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Сказать трудно
Может у ВМ какой-то свой вариант модулей TCP IP?
Или она эмулирует стек?
Или использует оригинальным каким-то образом?
Сие науке неизвестно........а мне и подавно smile 
Видимо причина в ВМ
PM MAIL WWW MSN   Вверх
Nookie
Дата 26.11.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



Вообще спасибо за ответы, очень помогли ;) можно закрыть тему ;) Всему виной ВМваре ;)
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Nookie
Дата 28.11.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



Все таки не пойму.. ка кна программном уровне делать что-то с MSS??/

Добавлено через 1 минуту и 8 секунд
И еще вопрос такой, когда отправляю последний ACK, то уже в нем присеть мой запрос? ну например запрос GET для HTTP?
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Олег2005
Дата 28.11.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Цитата(Nookie @  28.11.2008,  13:08 Найти цитируемый пост)
Все таки не пойму.. ка кна программном уровне делать что-то с MSS??/

Когда формируете первый TCP-SYN сегмент с запросом на рукопожатие, добавляете после 20-го байта опцию с MSS и дополняете поле до размера слова

Цитата
Добавлено через 1 минуту и 8 секунд
И еще вопрос такой, когда отправляю последний ACK, то уже в нем присеть мой запрос? ну например запрос GET для HTTP? 

Нет, там ничего не "присеть" - те никаких данных
Данные пойдут по новому сокету, который создать сервер с промощью accept() - вот на этот серверный сокет и пойдет запрос и все остальное. На прослушивающий сокет данные никак не идут!!!



Это сообщение отредактировал(а) Олег2005 - 28.11.2008, 14:22
PM MAIL WWW MSN   Вверх
Nookie
Дата 28.11.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



Ну вот к примеру заголовок TCP
Код

typedef struct TCP_HEADER
{
  u_short source;
  u_short dest;
  u_int seq;
  u_int ack_seq;
  u_short res : 4, headlen : 4, cwr : 1, ece : 1, urg : 1, ack : 1, psh : 1, rst : 1, syn : 1, fin : 1;
  u_short window;
  u_short check;
  u_short urg_ptr;
}


Как сюда впихнеть MSS? я просто чуток не понимаю...

Добавлено @ 15:10
заполняем так

Код

...
struct TCP_HEADER *tcp_hdr;
/* заполняем */
  tcp_hdr->source = htons(sport);
  tcp_hdr->dest = htons(dport);
  tcp_hdr->seq = htons(getpid());
  tcp_hdr->ack_seq = 0;
  tcp_hdr->res1 = 0;
  tcp_hdr->doff = 5;
  tcp_hdr->fin = 0;
  tcp_hdr->syn = 1;
  tcp_hdr->rst = 0;
  tcp_hdr->psh = 0;
  tcp_hdr->ack = 0;
  tcp_hdr->urg = 0;
  tcp_hdr->ece = 0;
  tcp_hdr->cwr = 0;
  tcp_hdr->window = htons(128);
  tcp_hdr->check = 0;
  tcp_hdr->urg_ptr = 0;
...



Может надо структура по-новому определить?

Это сообщение отредактировал(а) Nookie - 28.11.2008, 15:10
--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Nookie
Дата 28.11.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 4.7.2005
Где: Россия, Москва

Репутация: нет
Всего: нет



Можно наверное и так определить 

Код

struct Tcphdr 
{ 
    uchar    sport[2]; 
    uchar    dport[2]; 
    uchar    seq[4]; 
    uchar    ack[4]; 
    uchar    flag[2]; 
    uchar    win[2]; 
    uchar    cksum[2]; 
    uchar    urg[2]; 
    /* Options segment */ 
    uchar    opt[2]; 
    uchar    mss[2]; 
}; 

--------------------
Хочу знать все!!!
PM MAIL ICQ Skype   Вверх
Олег2005
Дата 30.11.2008, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 1
Всего: 11



Цитата(Nookie @  28.11.2008,  13:58 Найти цитируемый пост)
Может надо структура по-новому определить?

Конечно структура будет другая - увеличится на поле для MSS и поле для дополнения с помощью nop
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Сетевые технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0517 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.