BSR 연결 중개
- 1 개요
- 2 연결 구조
- 3 접속 상태
- 3.1 일반적인 상태변화 순서
- 3.2 상태값에 따른 동작 상황 분석
개요
BSR은 하나의 리소스에 대해 두 개의 채널로 동작합니다. 각 채널은 연결 방향이 서로 반대로 수립되어, 서버/클라이언트로 구분할 수 없는 P2P구조로 동작합니다.
BSR의 통신을 중계하기 위해서 DRX도 두 개의 채널을 사용하는데, DRX간 연결 과정이 더해지면 연결이 총 6개로 늘어납니다.
로컬 DRX에서는 원격 DRX와 원격 BSR의 연결 상태를 제외한 4개의 연결만 확인 할 수 있습니다.
연결 구조
drx-ctl connections all
-------------------------------------------------------------------------------------------
Name Type local-bsr-ip State local-drx-ip State remote-drx-ip
-------------------------------------------------------------------------------------------
r0-node2-node1 data (local-bsr) -established-> (local-drx) <-bridged----- (remote-drx)
r0-node2-node1 meta (local-bsr) <-established- (local-drx) -----bridged-> (remote-drx)
-------------------------------------------------------------------------------------------
All connections : 2, Established : 2각각의 리소스는 완전히 독립되어 작동하며, 하나의 리소스는 두개의 채널로 구성됩니다. 위의 출력에서 첫번째 채널이 Acceptor, 두번째 채널이 Connector에 해당합니다.
하나의 채널은 두 개의 연결(로컬 BSR, 원격 DRX)을 관리합니다.
각 채널의 연결을 원격 BSR까지 통합하여 표현하면 다음과 같습니다.
Acceptor
리소스 파일의 outside IP/Port를 통해 원격 DRX의 접속을 받는다.
리소스 파일의 inside IP/Port를 통해 로컬 BSR의 접속을 받는다.
Connector
원격 DRX의 outside IP/Port로 접속한다.
로컬 BSR에 접속한다.
각각의 채널은 DRX간 연결시 채널 유형(meta/data)이 정해지지 않은 상태이며, BSR과의 연결이 수립되면 BSR로부터 채널 유형을 받습니다..
접속 상태
분류 | 상태 값 | 채널 | 설명 | 동작 |
|---|---|---|---|---|
준비 중 | allocating | 전체 | BAB 메모리 할당 중 | 메모리 할당이 완료되면 bridging 상태로 전환 |
DRX간 연결 | bridging | 전체 | 원격 DRX와 연결 시도 중 | 연결이 완료되면 bridged 상태로 전환 |
bridged | 전체 | 원격 DRX와 연결됨 | 상태 변경 후 즉시 waiting/connecting 상태로 전환 | |
BSR과의 연결 | waiting | Acceptor | BSR의 연결을 기다리는 중 | BSR과 연결되면 connected 상태로 전환 |
connecting | Connector | BSR로 연결 중 | 원격 DRX로부터 채널 유형을 받아 BSR에 접속 | |
connected | Acceptor | BSR와 연결됨 | BSR로부터 채널 유형을 받아 원격 DRX에 전달하고 establishing 상태로 전환 | |
establishing | 전체 | 연결 수립중 | Connector: 원격 DRX로 연결 수립 이벤트를 전달하고 established 상태로 전환 | |
established | 전체 | 연결이 수립됨 | BSR의 통신 데이터를 중계한다 | |
연결 중지 | close_pending | 전체 | 연결을 닫기 전의 정리 단계 | BAB에 남아있는 데이터를 전달하고 stopping 상태로 전환 |
stopping | 전체 | 연결 닫는 중 | 현재 연결을 닫고 stopped 상태로 전환 | |
stopped | 전체 | 연결이 닫힘 | 재 연결을 준비하고 bridging 상태로 전환 |
일반적인 상태변화 순서
정상적인 연결시 채널별 상태 변화는 다음과 같습니다.
연결이 끊길 경우의 상태 변화:
로컬 BSR과의 연결이 끊긴 경우
연결 종료를 위해 두 채널 모두 stopping 상태로 전환된다. (data 채널은 BAB를 비우기 위해 먼저 close pending 상태를 거치게 된다.)
연결을 종료하는 작업이 완료되면 stopped 상태로 전환된다.
로컬 BSR과의 재 연결을 위해 connecting / waiting 상태로 전환된다.
원격 BSR과 원격 DRX 사이의 연결이 끊긴 경우
위의 로컬 BSR과의 연결이 끊긴 경우의 상황이 원격 DRX에서 발생하면서, 로컬 DRX도 같은 순서로 stopping, stopped를 거쳐 connecting / waiting 상태로 전환된다.
로컬 BSR은 재 연결이 가능하므로 즉시 BSR로부터 접속이 이루어진다.
Acceptor에 BSR이 연결되어 connected를 거쳐 establishing 상태로 전환된다.
Connector는 원격 DRX가 원격 BSR과 연결되지 않았으므로 connecting 상태로 유지된다.
원격 DRX와의 연결이 끊기는 경우
연결 종료를 위해 두 채널 모두 stopping 상태로 전환된다. (data 채널은 BAB를 비우기 위해 먼저 close pending 상태를 거치게 된다.)
연결을 종료하는 작업이 완료되면 stopped 상태로 전환된다.
원격 DRX와의 재 연결을 위해 bridging 상태로 전환된다.
상태값에 따른 동작 상황 분석
Acceptor 채널 | Connector 채널 | 상황 분석 |
|---|---|---|
allocating | allocating | TX BAB의 크기가 매우 크거나 가상 메모리에 할당되어 속도가 느린 경우 볼 수 있다. |
bridging | bridging | 원격 DRX가 종료되었거나, 로컬 DRX와 원격 DRX가 서로에게 접속할 수 없다. |
bridging | connecting | 로컬 DRX에 원격 DRX가 접속할 수 없다. |
waiting | bridging | 원격 DRX에 접속할 수 없다. |
waiting | connecting | 로컬 BSR의 리소스가 연결중 상태가 아니거나 로컬 DRX에 접속할 수 없다. |
establishing | connecting | 로컬 BSR은 연결되나 원격 DRX가 원격 BSR에 연결할 수 없다. |
established | connecting | 로컬 BSR에서 로컬 DRX에는 연결이 되지만 로컬 DRX가 로컬 BSR에 연결할 수 없다. |
establishing | established | 원격 BSR에서 원격 DRX에는 연결이 되지만 원격 DRX가 원격 BSR에 연결할 수 없다. |
waiting | established | 로컬 DRX에서 로컬 BSR로 연결은 되지만 로컬 BSR이 로컬 DRX에 연결할 수 없다. |
established | connecting | 원격 DRX에서 원격 BSR로 연결은 되지만 원격 BSR가 원격 DRX에 연결할 수 없다. |