Я написал простой 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-протоколе в Интернете во многих местах.
Смежные вопросы
- 1. Telnet не закрывает соединение
- 2. SOCAT не закрывает соединение TCP
- 3. RabbitMq, клиент закрывает TCP-соединение внезапно
- 4. Chrome закрывает TCP-соединение после ответа
- 5. PHP принудительно закрывает соединение
- 6. Telnet Blocking C# TCP Server
- 7. Telnet-соединение с SQL Server
- 8. серверного поток прерываний, когда клиент закрывает соединение TCP
- 9. Nodejs HTTPS клиент тайм-аут не закрывает соединение TCP
- 10. AS3 AIR - Клиент закрывает соединение
- 11. Клиент JAX-WS закрывает соединение tcp с FIN, ACK
- 12. Весна интеграции tcp-connection-factory закрывает клиентское соединение до ответа
- 13. WCF: Закрывает() действительно близкое соединение?
- 14. PHP Telnet соединение сообщение
- 15. TCP-соединение с клиентом
- 16. Socket/Telnet-соединение/BufferedReader
- 17. Ts3 telnet соединение с C#
- 18. SSH через соединение Telnet
- 19. Telnet-соединение отказано
- 20. Кто закрывает соединение сокета
- 21. TcpClient.Close не закрывает соединение
- 22. SubSonic: MySqlDataReader закрывает соединение
- 23. Всегда соединение отказалось от использования telnet
- 24. Telnet-сессия против TCP-сессии
- 25. выборки() закрывает соединение Mysqli
- 26. NginX не закрывает соединение
- 27. Bio_free не закрывает соединение
- 28. Mono ServiceStack преждевременно закрывает соединения tcp
- 29. Как отлаживать TCP-соединение?
- 30. Solr закрывает соединение с Zookeeper
# 2 и большая часть остального его не происходит в Windows: вместо этого выдается RST. # 5 должно быть «когда клиентская программа (Telnet) закрывает сокет». «Уведомление клиента о закрытии сокета» должно быть «уведомлением клиента о том, что соединение было закрыто сверстником». Клиент закрывает свой собственный сокет. – EJP