2017-01-11 5 views
0

Я написал простой tcp-сервер в java (Socket) и подключился к нему через telnet. Все работает правильно. Я просто хочу прояснить одну вещь о протоколе tcp. Если я остановлю свой сервер ненадлежащим образом (просто нажмите на остановку в IntelligIdea во время выполнения), я вижу сообщение в подсказке клиента: соединение было потеряно. Итак, возникает вопрос: передает ли сервер какой-либо информации клиенту до его сбоя? Или telnet и сервер все время посылают некоторую информацию, которую я не знаю друг другу, чтобы убедиться, что соединение существует, даже если я ничего не посылаю? Или это связано с протоколом tcp? Вкратце: как клиент знает, что сервер разбился? Я новичок в этом, поэтому решил расчистить его здесь. Заранее спасибо!Как telnet закрывает соединение tcp?

ответ

0

Соединение выполняется через TCP. Протокол TCP определяет, как соединение закрывается.

  1. ОС закрывающей стороны (сервер) обнаруживает, что процесс закончился без закрытия сокета и инициирует процесс закрытия сокета.
  2. Сервер отправляет клиенту FIN пакет
  3. Стек протокола клиента получает FIN и уведомляет пользователя сокета (telnet), что соединение закрывается, и отправляет ACK на сервер.
  4. Сервер получает ACK и переходит в состояние, ожидающее отправки клиентом FIN.
  5. Когда клиентская программа (telnet) подтверждает закрытие ОС, стек протокола клиента отправляет на сервер пакет FIN.
  6. Сервер получает FIN и завершает и очищает свою сторону соединения и отвечает ACK.
  7. Клиент получает ACK и завершает и очищает свою сторону соединения.

Все это происходит на уровне операционной системы, ниже JVM или клиентской программы, и кроме уведомления клиента телнет, что сокет закрытия, невидим. Вы можете найти гораздо больше информации о TCP-протоколе в Интернете во многих местах.

+0

# 2 и большая часть остального его не происходит в Windows: вместо этого выдается RST. # 5 должно быть «когда клиентская программа (Telnet) закрывает сокет». «Уведомление клиента о закрытии сокета» должно быть «уведомлением клиента о том, что соединение было закрыто сверстником». Клиент закрывает свой собственный сокет. – EJP

Смежные вопросы