Я написал простой tcp-сервер в java (Socket) и подключился к нему через telnet. Все работает правильно. Я просто хочу прояснить одну вещь о протоколе tcp. Если я остановлю свой сервер ненадлежащим образом (просто нажмите на остановку в IntelligIdea во время выполнения), я вижу сообщение в подсказке клиента: соединение было потеряно. Итак, возникает вопрос: передает ли сервер какой-либо информации клиенту до его сбоя? Или telnet и сервер все время посылают некоторую информацию, которую я не знаю друг другу, чтобы убедиться, что соединение существует, даже если я ничего не посылаю? Или это связано с протоколом tcp? Вкратце: как клиент знает, что сервер разбился? Я новичок в этом, поэтому решил расчистить его здесь. Заранее спасибо!Как telnet закрывает соединение tcp?
0
A
ответ
0
Соединение выполняется через TCP. Протокол TCP определяет, как соединение закрывается.
- ОС закрывающей стороны (сервер) обнаруживает, что процесс закончился без закрытия сокета и инициирует процесс закрытия сокета.
- Сервер отправляет клиенту FIN пакет
- Стек протокола клиента получает FIN и уведомляет пользователя сокета (telnet), что соединение закрывается, и отправляет ACK на сервер.
- Сервер получает ACK и переходит в состояние, ожидающее отправки клиентом FIN.
- Когда клиентская программа (telnet) подтверждает закрытие ОС, стек протокола клиента отправляет на сервер пакет FIN.
- Сервер получает FIN и завершает и очищает свою сторону соединения и отвечает ACK.
- Клиент получает ACK и завершает и очищает свою сторону соединения.
Все это происходит на уровне операционной системы, ниже JVM или клиентской программы, и кроме уведомления клиента телнет, что сокет закрытия, невидим. Вы можете найти гораздо больше информации о TCP-протоколе в Интернете во многих местах.
# 2 и большая часть остального его не происходит в Windows: вместо этого выдается RST. # 5 должно быть «когда клиентская программа (Telnet) закрывает сокет». «Уведомление клиента о закрытии сокета» должно быть «уведомлением клиента о том, что соединение было закрыто сверстником». Клиент закрывает свой собственный сокет. – EJP