2011-01-13 1 views

ответ

0

Это зависит от протокола прикладного уровня. - от http://www.tcpipguide.com/free/t_TCPConnectionTermination-2.htm.

TCP-соединение обычно терминатор с помощью специальной процедуры , где каждая сторона самостоятельно закрывает свой конец ссылки. Обычно он начинается с одного из приложений обрабатывает сигнализацию на своем уровне TCP , что сеанс больше не нужен. Это устройство отправляет сообщение FIN на , сообщив другому устройству, что оно хочет , завершите соединение, которое соответствует . Когда устройство ответа готово, оно также отправляет FIN , который подтвержден; после ожидания период времени для ACK будет получен, сессия закрыта.

На практике следует как правило, клиент, но нет никаких причин, почему это должно быть так.

9

FIN отправляется, когда приложение с этой стороны просит закрыть соединение. Это не должно произойти сразу после получения FIN с другой стороны: либо одна сторона может отправить FIN, а другую сторону, чтобы отправить еще несколько данных, прежде чем отправлять свои собственные FIN.

После того, как соединение TCP завершено, оно полностью симметрично - ни одна сторона не может быть различима как «сервер» или «клиент». Это означает, что обе стороны могут отправить первый FIN. Поскольку хост может отправлять больше данных о соединении после отправки FIN, обычно это сторона, которая сначала знает, что у нее больше нет данных для отправки, которые делают это.

Существует хорошая практическая причина для разработки сетевого протокола, так что клиент - это тот, который первым закрывает соединение. «Первый ближе» заканчивается в TIME_WAIT состоянии в два раза больше максимального срока службы сегмента, что составляет несколько минут , Это занимает небольшое количество ресурсов за эти минуты, но если это произойдет на стороне сервера, где сервер обрабатывает много сотен подключений, то эти сокеты TIME_WAIT быстро сойдутся. Лучше распределить это бремя среди клиентов.

+0

Подробнее о TIME_WAIT можно найти здесь: http://www.serverframework.com/asynchronousevents/2011/01/time-wait-and-its-design-implications-for-protocols-and-scalable-servers. html –

+0

@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

+2

@entropy: Нет, это не так. В любом случае, вы можете легко консультироваться с любой ссылкой, содержащей диаграмму состояний TCP, чтобы увидеть, что она ближе всего к TIME_WAIT. Второй ближе идет через 'CLOSE_WAIT' и' LAST_ACK'. – caf

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