Кому должен быть установлен флаг TCP FIN. Сервер, по завершении отправки данных или Клиент, при получении полных данных?, который сначала устанавливает флаг tcp FIN в подключении клиент-сервер
Отношения
Кому должен быть установлен флаг TCP FIN. Сервер, по завершении отправки данных или Клиент, при получении полных данных?, который сначала устанавливает флаг tcp FIN в подключении клиент-сервер
Отношения
Это зависит от протокола прикладного уровня. - от http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm.
TCP-соединение обычно терминатор с помощью специальной процедуры , где каждая сторона самостоятельно закрывает свой конец ссылки. Обычно он начинается с одного из приложений обрабатывает сигнализацию на своем уровне TCP , что сеанс больше не нужен. Это устройство отправляет сообщение FIN на , сообщив другому устройству, что оно хочет , завершите соединение, которое соответствует . Когда устройство ответа готово, оно также отправляет FIN , который подтвержден; после ожидания период времени для ACK будет получен, сессия закрыта.
На практике следует как правило, клиент, но нет никаких причин, почему это должно быть так.
Поиск google для «Диаграмма состояний TCP». Вот хорошая ссылка для начала: http://www.jxos.org/Projects/TCP/tcpstate.html
FIN
отправляется, когда приложение с этой стороны просит закрыть соединение. Это не должно произойти сразу после получения FIN
с другой стороны: либо одна сторона может отправить FIN
, а другую сторону, чтобы отправить еще несколько данных, прежде чем отправлять свои собственные FIN
.
После того, как соединение TCP завершено, оно полностью симметрично - ни одна сторона не может быть различима как «сервер» или «клиент». Это означает, что обе стороны могут отправить первый FIN
. Поскольку хост может отправлять больше данных о соединении после отправки FIN
, обычно это сторона, которая сначала знает, что у нее больше нет данных для отправки, которые делают это.
Существует хорошая практическая причина для разработки сетевого протокола, так что клиент - это тот, который первым закрывает соединение. «Первый ближе» заканчивается в TIME_WAIT
состоянии в два раза больше максимального срока службы сегмента, что составляет несколько минут , Это занимает небольшое количество ресурсов за эти минуты, но если это произойдет на стороне сервера, где сервер обрабатывает много сотен подключений, то эти сокеты TIME_WAIT
быстро сойдутся. Лучше распределить это бремя среди клиентов.
Подробнее о TIME_WAIT можно найти здесь: http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers. html –
@caf См. http://blogs.technet.com/b/networking/archive/2009/08/12/where-do-resets-come-from-no-the-stork-does-not-bring- they.aspx говорят, что обе стороны страдают от TIME_WAIT – onmyway133
@entropy: Нет, это не так. В любом случае, вы можете легко консультироваться с любой ссылкой, содержащей диаграмму состояний TCP, чтобы увидеть, что она ближе всего к TIME_WAIT. Второй ближе идет через 'CLOSE_WAIT' и' LAST_ACK'. – caf