Эффективное программирование TCP-IP

       

Разберитесь с аккуратным размыканием TCP-соединений


| | |

Как вы уже видели, в работе TCP-соединения есть три фазы:

1. Установления соединения.

2. Передачи данных.

3. Разрыва соединения.

В этом разделе будет рассмотрен переход от фазы передачи данных к фазе раз­рыва соединения. Точнее, как узнать, что хост на другом конце завершил фазу пе­редачи данных и готов к разрыву соединения, и как он может сообщить об этом партнеру.

Вы увидите, что один хост может прекратить отправку данных и сигнализиро­вать партнеру об этом, не отказываясь, однако, от приема данных. Это возможно, поскольку TCP-соединения полнодуплексные, потоки данных в разных направле­ниях не зависят друг от друга.

Например, клиент может соединиться с сервером, отправить серию запросов, а затем закрыть свою половину соединения, предоставив тем самым серверу информацию, что больше запросов не будет. Серверу для ответа клиенту, возможно, понадобится выполнить большой объем работы и даже связаться с другими серве­рами, так что он продолжает посылать данные уже после того, как клиент прекра­тил отправлять запросы. С другой стороны, сервер может послать в ответ сколько угодно данных, так что клиент не определяет заранее, когда ответ закончится. Поэтому сервер, вероятно, как и клиент, закроет свой конец соединения, сигнализи­руя о конце передачи.

После того как ответ на последний запрос клиента отправлен и сервер закрыл свой конец соединения, TCP завершает фазу разрыва. Обратите внимание, что за­крытие соединения рассматривается как естественный способ известить партнера о прекращении передачи данных. По сути, посылается признак конца файла EOF.



Содержание раздела