Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> tcp dnat epoll 
V
    Опции темы
MAKCim
Дата 31.10.2009, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



ситуация следующая
есть удаленный клиент (я) и сервер (сервер)
сервер находится в удаленной локалке, но прозрачно виден извне через роутер (linux), расположенный там же в локалке и имеющий внешний IP
перенаправление осуществляется через DNAT в iptables
на сервере запущена программа, слушающая порт 57999
после передачи первого пакета с данными от меня  сервер возвращает два пакета с  ACK и FIN флагами, что означает пассивное закрытие соединения
программа, работающая на сервере, юзает epoll и из логов видно, что после получения пакета с данными от меня epoll_wait возвращает одно событие с флагами 0x2005 => EPOLLRDHUP | EPOLLIN | EPOLLOUT
EPOLLRDHUP в свою очередь возвращается, если удалення сторона закрывает соединение
из лога tcpdump на моей стороне видно, что в пакете с данными только PUSH флаг установлен
вопрос, возможно ли, что DNAT каким-то непонятным образом изменяет пакет?
до того как начались траблы, программа на сервере успешно неделю работала

Код

IPv4 (0x0800), length 74: (tos 0x0, ttl 64, id 52480, offset 0, flags [DF], proto TCP (6), length 60) <Я>.40771 > <сервер>.57999: S, cksum 0x385c (correct), 2920155311:2920155311(0) win 5840 <mss 1460,sackOK,timestamp 2606511 0,nop,wscale 7>

IPv4 (0x0800), length 74: (tos 0x0, ttl 57, id 0, offset 0, flags [DF], proto TCP (6), length 60) <сервер>.57999 > <я>.40771: S, cksum 0x87f6 (correct), 3846884468:3846884468(0) ack 2920155312 win 5792 <mss 1380,sackOK,timestamp 516874310 2606511,nop,wscale 7>

IPv4 (0x0800), length 66: (tos 0x0, ttl 64, id 52481, offset 0, flags [DF], proto TCP (6), length 52) <я>.40771 > <сервер>.57999: ., cksum 0xccc4 (correct), 1:1(0) ack 1 win 46 <nop,nop,timestamp 2606543 516874310>

IPv4 (0x0800), length 687: (tos 0x0, ttl 64, id 52482, offset 0, flags [DF], proto TCP (6), length 673) <я>.40771 > <сервер>.57999: P 1:622(621) ack 1 win 46 <nop,nop,timestamp 2606543 516874310>

IPv4 (0x0800), length 66: (tos 0x0, ttl 57, id 40926, offset 0, flags [DF], proto TCP (6), length 52) <сервер>.57999 > <я>.40770: ., cksum 0x862f (correct), 1:1(0) ack 623 win 55 <nop,nop,timestamp 516874348 2606511>

IPv4 (0x0800), length 66: (tos 0x0, ttl 57, id 40927, offset 0, flags [DF], proto TCP (6), length 52) <сервер>.57999 > <я>.40770: F, cksum 0x85c6 (correct), 1:1(0) ack 623 win 55 <nop,nop,timestamp 516874452 2606511>



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 1.11.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



совсем не понятно...
грубо говоря на сервере netstat показывает валидное соединение с клиентом (присоединенный сокет в состоянии ESTABLISHED)
однако в серверном процессе отсутствует соответствующий файловый дескриптор
есть только дескриптор LISTEN сокета  smile 
такое чувство, что где-то в ядре был инкремент счетчика ссылок, а декремента не было
при завершении процесса соединение сбрасывается, что наталкивает на мысль с траблами на LISTEN сокете


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bilbobagginz
Дата 2.11.2009, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



Цитата(MAKCim @  1.11.2009,  12:56 Найти цитируемый пост)
такое чувство

как именно настраивается  dnat и epoll ?
(желательно выложить команды с фейкнутыми ай-пишниками)




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 2.11.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



bilbobagginz, 
похоже, вопрос решен
все оказалось тривиально
после срабатывания epoll нужно дергать accept до EAGAIN
в моем случае он вызывался единожды, т. е. при повышенной нагрузке в backlog очереди могли быть еще установленные соединения
они и были видны в netstat

при работе сервере в некоторый момент в очереди оказывалось 2 установленных соединения
но т. к. epoll события на сервере edge triggered, то второй epoll_wait уже не возвращал EPOLLIN на серверном сокете
в свою очеред на клиенте по таймауту соединения рвались => я получал EPOLLRDHUP сразу после accept'а

в общем простая ошибка с нетривиальным проявлением


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
bilbobagginz
Дата 2.11.2009, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

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



я понял что я всё ещё не понял, но хорошо что ты всё разрулил.


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 3.11.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

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



Цитата(bilbobagginz @  2.11.2009,  12:50 Найти цитируемый пост)
я понял что я всё ещё не понял, но хорошо что ты всё разрулил. 

можно и подробнее ;) что не понятно?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




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


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

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