1

У нас есть виртуальная система под управлением Windows Server 2008 R2, и она отвечает на порт TCP 7 (эхо). (То есть, в ответ на SYN он отправляет ACK, RST, чего достаточно, чтобы InetAddress # isReachable () вернул true .)

Однако эта система не имеет «Simple / TCP IP - услуг» функция включена. И проверяя netstat -a , ничего не слушает порт 7.

Так кто же отвечает на эхо-запросы TCP?

Обратите внимание, что физическая система Windows 7 , в которой также не включены «простые службы TCP/IP», не отвечает (как и ожидалось). А включение этой функции и запуск соответствующей службы Windows заставляет netstat -a показывать

  TCP    0.0.0.0:7              WINDOWS7HOSTNAME:0      LISTENING

(снова: как и ожидалось).

Насколько мы сейчас видим, наши системы Windows Server 2008/2008 R2 (которые все являются виртуальными) реагируют неожиданно, а системы Windows 7 (которые являются физическими и не имеют включенных «простых служб TCP/IP») не отвечайте, как ожидалось.

Мой вопрос: почему виртуальная система под управлением Windows Server отвечает на эхо-порт TCP 7 без включенных «простых служб TCP/IP»?

Может ли это быть вызвано программным обеспечением для виртуализации (которое я считаю VMware ESX)? Или это функция в выпусках Windows Server? Какая еще причина может быть?

1 ответ1

1

Это совершенно нормально и ожидаемо. Когда вы пытаетесь подключиться к TCP-порту, на котором ничего не прослушивается , сервер всегда отвечает пакетом "reset" (с флагом RST ). Это задокументировано в RFC 793, стр. 65 , Протокол управления передачей: спецификация протокола:

SEGMENT ARRIVES

    If the state is CLOSED (i.e., TCB does not exist) then

      all data in the incoming segment is discarded.  An incoming
      segment containing a RST is discarded.  An incoming segment not
      containing a RST causes a RST to be sent in response.  The
      acknowledgment and sequence field values are selected to make the
      reset sequence acceptable to the TCP that sent the offending
      segment.

      If the ACK bit is off, sequence number zero is used,

        <SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>

      If the ACK bit is on,

        <SEQ=SEG.ACK><CTL=RST>

      Return.

Однако многие брандмауэры, включая тот, который поставляется с Windows, настроены на удаление всех пакетов, которые брандмауэр не распознает - так называемый "скрытый режим". Таким образом, брандмауэр Win7 сбрасывает ваш запрос на подключение еще до того, как он достигнет драйвера TCP, так как у него нет правила для принятия соединений через порт TCP 7.

(Что самое раздражающее, могу добавить? Вместо простого «ничего здесь, уходи» это приводит к долгим, раздражающим тайм-аутам.)

На вашем Windows Server TCP отвечает так, как задумано, поскольку брандмауэр либо неактивен, либо не настроен на блокировку этого порта.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .