[[PageOutline(2-5,Содержание:)]] = Канальное окончание R422 = Канальное окончание R422 предназначено для работы с модулем R422, установленным в плате VE-02 (блоке MC04-DSL-VIP). Модуль R422 позволяет подключить к плате VE-02 (блоку MC04-DSL-VIP) две линии (две сигнальные пары проводов) RS-422 (TIA/EIA-422) - одна выходная и одна входная. Канальное окончание R422 предназначено для передачи данных интерфейсов RS-422 через сеть IP. //Строго говоря, R422 в плате VE-02 (блоке MC04-DSL-VIP) не работает с каналами TDM, поэтому не является канальным окончанием в том же смысле, что и другие канальные окончания, например FXS или FXO. Окончание R422 по сути является просто конвертером интерфейса. Однако для простоты и единообразия мы будем называть его канальным окончанием.// == Описание работы канального окончания == Канальное окончание R422 транслирует данные, приходящие через интерфейс RS-422, в сеть IP по протоколу TCP, а данные, приходящие из сети по протоколу TCP, передает в интерфейс RS-422. Линии интерфейса RS-422 работают на скорости 9600 бит/с. Канальное окончание работает в одном из двух режимов - "клиент" или "сервер". Эти режимы определяют, как канальное окончание устанавливает соединение TCP. В режиме "сервер" канальное окончание ожидает установки входящего соединения от другого хоста в сети, в режиме "клиент" канальное окончание само делает попытки подключения к удаленному хосту. === Установка соединения в режиме Сервер === При работе в режиме "сервер" канальное окончание R422 создает TCP сокет, привязывает его к порту TCP, номер которого установлен конфигурационный параметром "Порт", переходит в состояние `Listen` и ожидает входящее соединение от клиента. В данном состоянии обмен данными по линиям RS-422 не производится: данные на выходную пару линий не передаются, а данные, принимаемые по входной паре, игнорируются (отбрасываются). При установке соединения с клиентом канальное окончание закрывает ранее открытый сокет и переходит в состояние `Connected`. В этом состоянии канальное окончание не принимает новые входящие соединения, пока уже установленное соединение не будет разорвано. В состоянии `Connected` канальное окончание R422 передает данные данными между линиями RS-422 и удаленным хостом. Подробно этот процесс описан в разделе "Передача данных через установленное соединение" ниже. При разрыве соединения TCP канальное окончание снова создает серверный сокет, переходит в состояние `Listen` и ожидает новое входящее соединение, как это было описано выше. === Установка соединения в режиме Клиент === При работе в режиме "клиент" канальное окончание R422 само устанавливает соединение TCP с удаленным сервером, имя (адрес) и номер порта которого заданы конфигурационными параметрами "Сервер" и "Порт" соответственно. Установка соединения начинается с перехода канального окончания в состояние `Resolving`. В этом состоянии канальное окончание резолвит имя сервера, указанное в конфигурационном параметре "Сервер", в адреса IP. При успешном резолвинге канальное окончание создает сокет TCP, начинает процесс подключения к серверу и переходит в состояние `Connecting`. При успешном подключении канальное окончание переходит в состояние `Connected`. В состоянии `Connected` канальное окончание R422 передает данные данными между линиями RS-422 и удаленным хостом. Подробно этот процесс описан в разделе "Передача данных через установленное соединение" ниже. В случае, если установка соединения не удалась, и у сервера имеются другие IP адреса, канальное окончание пытается установить соединение с другим адресом. В случае, если попытки установки соединения со всеми имеющимися адресами IP сервера закончились ошибками, или ошибка возникла при резолвинге имени сервера, канальное окончание переходит в состояние `Error`. В состоянии `Error` канальное окончание выдерживает паузу 30 секунд, после чего описанный выше процесс подключения начинается с начала (с резолвинга имени сервера). В случае, если по любым причинам разрывается уже успешно установленное соединение TCP (то есть канальное окончание находится в состоянии `Connected`), канальное окончание сразу приступает к повторной установке соединения (начиная с резолвинга имени сервера). === Передача данных через установленное соединение === В состоянии `Connected` канальное окончание осуществляет обмен данными между линиями (парами) интерфейса RS-422 и удаленным хостом через установленное соединение TCP. Данные, поступающие от удаленного хоста, передаются на выходную пару интерфейса RS-422. Данные, принимаемые по входной паре интерфейса RS-422, передаются удаленному хосту. Алгоритм этой передачи зависит от значения конфигурационного параметра "Таймаут передачи". При нулевом значении параметра принятые из интерфейса RS-422 данные немедленно передаются в сеть удаленному хосту (записываются в сокет). При ненулевом значении параметра при приеме из интерфейса RS-422 первого октета данных принятый октет помещается во временный буфер, при этом запускается таймер передачи на значение таймаута, установленное конфигурационным параметром. До истечения заданного таймаута все принимаемые из интерфейса RS-422 данные дописываются во временный буфер. При истечении заданного таймаута все накопленные во временном буфере данные передаются в сеть удаленному хосту. Таким образом, установка ненулевого значения таймаута передачи позволяет снизить частоту передаваемых через соединение TCP сегментов данных и тем самым сократить накладные расходы и уменьшить общий объем данных, передаваемых по сети, ценой некоторого увеличения задержки передачи. Это может быть полезно, например, в случае передачи через широкополосный канал с оплатой по объему трафика. //Обратите внимание, что установка нулевого значения конфигурационного параметра "Таймаут передачи" не гарантирует, что принятые из интерфейса RS-422 данные будут немедленно отправлены в сеть. Отправка сегмента данных может быть задержана алгоритмами протокола TCP, например при наличии потерь из-за узкой полосы или низкого качества канала связи.// При накоплении во временном буфере большого количества принятых из интерфейса RS-422 данных (около 1200 байт) накопленные данные будут отправлены канальным окончанием в сеть не дожидаясь истечения таймаута передачи, так как при дальнейшем накоплении данных накопленные данные не поместятся в один пакет TCP и будут разбиты на несколько, и, таким образом, дальнейшее накопление не имеет смысла. === TCP keep-alive и таймаут неактивности === Функции TCP keep-alive и таймаут неактивности позволяют канальному окончанию распознавать "мертвые" соединения TCP. Примером мертвого соединения может быть соединение, в котором пакеты IP проходят через один или несколько маршрутизаторов с функцией NAT (трансляцией сетевых адресов). Трансляция адресов требует хранения таблицы трансляции. Для освобождения ресурсов маршрутизатор может периодически "чистить" таблицу, удаляя из нее записи о старых соединениях. Если через установленное соединение TCP ничего не передается в течение длительного времени, запись об этом соединении может оказаться удаленной из таблицы трансляции адресов, в результате чего последующие пакеты TCP перестанут проходить от одного хоста к другому. Другим примером "мертвого" соединения TCP может быть соединение клиента с сервером, после установления которого на стороне сервера было отключено питание устройства. После включения питания на стороне сервера соединение TCP отсутствует, однако клиент будет по-прежнему считать, что соединение установлено, так как не получал от сервера пакетов, свидетельствующих о разрыве соединения. Одним из способов предотвращения "умирания" соединений TCP является TCP keep-alive. При установке ненулевого значения конфигурационного параметра "TCP keep-alive" при неактивности соединения TCP в течение заданного параметром времени канальное окончание передает удаленной стороне TCP ACK пакет и ожидает ответный ACK. Таким образом, при установке ненулевого значения параметра "TCP keep-alive" пакеты TCP соединения передаются не реже заданного параметром значения времени, что позволяет, например, предотвратить удаление записи об этом соединении из таблицы NAT. При отсутствии ответа TCP АСK передается повторно с интервалом 2 секунды. Если после передачи четырех таких пакетов ответ так и не был получен, канальное окончание разрывает TCP соединение. При нулевом значении параметра "TCP keep-alive" пакеты keep-alive не отправляются. Если TCP соединение предполагает регулярное получение данных от удаленной стороны, для контроля целостности соединения может использоваться таймаут неактивности. Если конфигурационный параметр "Таймаут неактивности" имеет ненулевое значение, то при отсутствии данных от удаленной стороны в течение установленного параметром времени канальное окончание разрывает соединение TCP. == Параметры конфигурации канального окончания == Пример конфигурации канального окончания R422: [[Image(ss1.jpg)]] Контроль четности:: Параметр определяет наличие и значение бита четности/нечетности в символах интерфейса RS-422. Допустимые значения: "нет" (бит четности/нечетности отсутствует), "четность" (передается бит четности), "нечетность" (передается бит нечетности). Число стоповых бит:: Параметр определяет число стоповых бит в символах интерфейса RS-422. Допустимые значения: 1 (один стоповый бит), 2 (два стоповых бита). Режим работы:: Параметр определяет режим работы канального окончания. Допустимые значения: "клиент" (канальное окончание устанавливает соединение с удаленным сервером), "сервер" (канальное окончание ожидает подключения от удаленного клиента). Сервер:: Параметр устанавливает имя или адрес IP сервера, с которым будет устанавливать соединение канальное окончание, работающее в режиме "клиент". При работе канального окончания в режиме "сервер" данный параметр не используется. Порт:: Параметр устанавливает номер порта TCP, на который канальное окончание R422 будет принимать соединение в режиме "сервер" или на который канальное окончание R422 будет устанавливать соединение в режиме "клиент". Таймаут неактивности:: Параметр устанавливает время, при отсутствии в течение которого данных, принимаемых из соединения TCP, канальное окончание разрывает соединение. Значение 0 означает отключение функции разъединения по таймауту. TCP keep-alive:: Параметр устанавливает время, при отсутствии в течение которого активности соединения канальное окончание отправляет TCP ACK. Значение 0 означает отключение функции TCP keep-alive. Таймаут передачи:: Параметр устанавливает время, в течение которого принимаемые из интерфейса RS-422 данные накапливаются во временном буфере. При установке значения 0 накопление данных во временном буфере не производится. == Состояния канального окончания == Далее описаны состояния, в которых может находиться канальное окончание R422, и их краткое описание. Initial:: Начальное состояние канального окончания. Listen:: Канальное окончание ожидает входящее соединение. Resolving:: Канальное окончание резолвит имя сервера. Connecting:: Канальное окончание подключается к серверу. Connected:: Соединение TCP установлено. Error:: Ошибка соединения. {{{#!plantuml @startuml title Упрощенная диаграмма состояний канального окончания R422 Initial: Начальное состояние Listen: Ожидание входящего\nсоединения Resolving: резолвинг\nимени сервера Connecting: подключение\nк серверу Connected: соединение установлено Error: ошибка соединения Initial --> Listen Listen --> Connected: входящее\nсоединение Connected --> Listen: разъединение Initial --> Resolving Resolving --> Connecting: IP адрес\nполучен Connecting --> Connected: успешное\nподключение Connected --> Resolving: разъединение Resolving --> Error: ошибка резолвинга Connecting --> Error: IP адреса\nисчерпаны Error --> Resolving: таймаут 30 сек. @enduml }}} == См. также == [wiki:EndpointR232 окончание R232], [wiki:EndpointR485 окончание R485].