falanger, спасибо, практически исчёрпывающе.
Собственно, хочется поднять опять тему эмуляции сети УКНЦ.
Мысль у меня следующая: сделать такую эмуляцию, в которой участники сами образуют кольцо, при этом имеется центральное звено -- "арбитр сети", организующий это кольцо и управляющий его само-восстановлением.
Арбитр держит открытым для подключения определённый порт. Каждый участник -- это эмулятор УКНЦ, который знает имя/порт арбитра, свой входной порт и свой номер. Арбитр и участники могут быть запущены на одной машине и/или располагаться на нескольких машинах.
Все участники сети сначала связываются с арбитром, а после получения информации о связи работают самостоятельно, без участия арбитра. В случае потери связи участник вновь обращается к арбитру.
Каждый участник слушает свой входной порт и подключается ко входному порту следующего участника, полученному от арбитра -- тем самым, образуется кольцо. Данные двигаются только в одном направлении -- со входного порта в эмулятор, из эмулятора на входной порт следующего участника.
Подключение участника к сети
Участник знает имя и порт арбитра.
Участник подключается к порту арбирта по TCP.
Участник высылает посылку-запрос на подключение к кольцу, сообщая номер своего входного порта.
Арбитр возвращает ответ-разрешение, с именем/портом следующего участника либо
арбитр возвращает ответ-отвержение и закрывает соединение.
В случае получения разрешения от арбитра, участник высылает посылку-подтверждение, соединение закрывается.
Далее участник пытается установить TCP-соединение со следующим участником по имени/порту, полученным от арбитра.
В случае отвержения от арбитра, попытка соединения повторяется через несколько секунд.
Восстановление связности
Если участник видит что соединение со следующим участником разорвалось или произошёл таймаут пересылки, то участник закрывает соединение и начинает процесс восстановления:
Участник подключается к порту арбирта по TCP.
Участник высылает посылку-запрос на восстановление.
Арбитр возвращает ответ-разрешение, с именем/портом следующего участника либо
арбитр возвращает ответ-отвержение и закрывает соединение.
В случае получения разрешения от арбитра, участник высылает посылку-подтверждение, соединение закрывается.
Далее участник пытается установить TCP-соединение со следующим участником по имени/порту, полученным от арбитра.
В случае отвержения от арбитра, попытка восстановления повторяется через несколько секунд.
По идее конечно можно было бы объединить РМП и арбитра. Но мне хотелось бы разделить: арбитр получается независимым и довольно простым компонентом, связанным только с сетью. Можно отладить работу такой "сетевой инфраструктуры" независимо от всего остального, а затем мониторить состояние сети с помощью программы-арбитра.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
