BSR 연결 중개
개요
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 상태로 전환 Acceptor: 원격 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에 연결할 수 없다. |