Пытаюсь установить tcp соединение между клиентом/сервером. Обе машины являются Mac и находятся в одной локальной сети. Приложение сервера прослушивает порт 12345. После получения «SYN, ACK» от сервера я отправляю «ACK», но затем мой клиент автоматически отправляет «FIN, ACK», за которым следует «RST, ACK». Таким образом, поток TCP выглядит следующим образом:
Клиент отправляет SYN. SVR отправляет SYN, ACK. Клиент отправляет ACK. Клиент отправляет FIN, ACK. Клиент отправляет RST, ACK. SVR отправляет ACK. SVR отправляет ACK. Клиент отправляет RST. Клиент отправляет RST.
Судя по другим сообщениям с похожими проблемами, это может происходить из-за того, что я пытаюсь вручную создать рукопожатие на уровне пользователя, а ядро Unix (работающее на системном уровне) видит «SYN, ACK» намного раньше, чем что-либо на уровень пользователя может ответить и перейти к закрытию соединения, считая его открытым без причины. Проблема, аналогичная той, с которой столкнулся этот пользователь Linux: Нежелательный TCP-пакет RST со Scapy
В то время как iptables работал для пользователя Linux, должен ли я использовать что-то вроде pf в Mac OS X, чтобы заблокировать / удалить сообщения FIN и RST? Мой клиент работает под управлением 10.9.5, а мой сервер - 10.10.3.
Вот блок-схема сервера связи tcp 10.0.100.5 и клиента 10.0.100.4: