Тайм-ауты и повторные передачи TCP


Кнопка прерывания клиента



Кнопка прерывания клиента

Давайте рассмотрим еще один пример, в котором TCP использует режим срочности, когда поток данных остановлен с помощью символа прерывания. В этом примере сведены вместе несколько алгоритмов TCP, которые мы обсуждали ранее: режим срочности, предотвращение "глупого" окна, управление потоком данных с помощью окон и устойчивого таймера. Мы стартовали клиента на хосте sun. Затем зашли терминалом на bsdi, вывели на терминал большой текстовый файл, а затем остановили вывод, нажав Control-S. Когда вывод остановлен, мы нажали клавишу прерывания (DELETE), чтобы завершить работу программы:


sun % rlogin bsdi
приветствие от операционной системы
bsdi % cat /usr/share/misc/termcap вывод большого файла на терминал
большой вывод на терминал
мы печатаем Control-S, чтобы остановить вывод,
и ожидаем до тех пор, пока вывод не остановится

^? вводим символ прерывания, он отображается эхом
bsdi % затем появляется приглашение

Ниже описаны состояния клиента, сервера и соединения.

  1. Вывод на терминал остановлен путем ввода Control-S.
  2. Rlogin клиент приостановил вывод на терминал, однако выходной буфер терминала будет заполнен.
  3. Rlogin клиент не может читать из сети, так как приемный буфер TCP клиента полон.
  4. TCP клиент объявляет размер окна равный 0, чтобы остановить отправителя (TCP модуль Rlogin сервера), когда приемный буфер полон.
  5. TCP модуль сервера отправляет сообщение о заполнении буфера, когда его вывод остановлен сообщением от клиента о том, что размер окна равен 0.
  6. Сервер Rlogin остановлен, так как отправляющий буфер полон. Таким образом, сервер Rlogin не может читать данные от приложения, которое запущено на сервере (cat).
  7. Приложение cat останавливается, когда его выходной буфер наполняется.
  8. Затем мы вводим символ прерывания, чтобы остановить работу приложения cat на сервере. Это отправляется от TCP клиента к TCP серверу, потому что поток данных в этом направлении не остановлен с помощью контроля потока данных.
  9. Приложение cat получает символ прерывания и прекращает свою работу. При этом его выходной буфер (из которого читал сервер Rlogin) очищается, после чего "просыпается" сервер Rlogin. Сервер Rlogin входит в режим срочности и посылает клиенту команду "очистить вывод" (0x02).

На рисунке 26.6 показан поток данных от сервера к клиенту. (Номера последовательности взяты из временной диаграммы, которую мы покажем чуть ниже.)









Начало  Назад  Вперед