2013-05-10 2 views
3

Я занимаюсь исследовательским проектом, которому необходимо разделить tcp-соединение. поэтому у меня есть некоторые вопросы, которые могут возникнуть в моем развитии. Проблема заключается в понимании согласования TCP SACK. Я читаю RFC и не могу найти ответ.Вариант заголовка TCP: разрешение SACK-разрешено (выборочное подтверждение)

Для 3-стороннего tcp рукопожатия между двумя программами tcp: A и B. если A отправляет TCP SYN в B с разрешенным SACK, то B обязательно ответит пакет SYN/ACK с разрешенным SACK? если B отвечает TCP SYN/ACK без разрешения SACK, означает ли это

1) SACK-permmited разрешен только на A. A может выборочно распознавать tcp-пакеты от A, но A не может выборочно распознавать tcp-пакеты из В.

или

2) SACK-permmited не включена как а и в

если а посылает TCP SYN, чтобы B без SACK-разрешено, может реагировать B в/ACK пакет SYN с разрешением SACK?

кроме того, почему разрешено или запрещено разрешено SACK? это зависит от операционной системы или настройки ядра или чего-то еще? можно ли это контролировать? благодаря!

ответ

1

Следующие должны помочь вам: TCP Selective Acknowledgements

Чтобы ответить на ваш вопрос, хотя (возможно контролировать его), все зависит от того, «что у вас есть контроль над». Например, для Windows вы МОЖЕТЕ управлять им, однако вы должны включить его. Поэтому, если вы контролируете оба конца сеанса TCP, ответ да. Очевидно, что если вы не контролируете другой конец, вы ничего не сможете сделать. Итак, представьте, что вы включили его на своем конце (контролируемом), но пункт назначения (скажем, веб-сайт) не выполняет SACK, он в конечном итоге становится пустой тратой времени.

Большинство операционных систем позволяют вам включать и выключать. На FreeBSD (мой текущий рабочий стол) он включен по умолчанию, в большинстве вариантов Linux он тоже включен по умолчанию.