접속 수립 · 인증
피어 간 연결(Raft 포트 = 클라이언트 포트 + 1000)도 클라이언트 포트와 완전히 같은 순서로 수립됩니다. 프로토콜 안에 클라이언트/피어를 구분하는 절차는 없고, 역할은 포트로만 구분됩니다.
- TCP 접속 — 항상 부르는(dial) 쪽이 요청자가 됩니다
- 서버가 TLS를 켰다면 TLS 핸드셰이크
- 인증 핸드셰이크 1회 — 규격(challenge·digest·응답)은 클라이언트 포트와 바이트 단위로 동일합니다
- 이후 길이-프리픽스 RPC 교환
클라이언트 포트와 다른 점
| 항목 | 클라이언트 포트 | Raft 포트 |
|---|---|---|
| 검증 토큰 집합 | client_tokens | cluster_tokens |
| 보내는 쪽 토큰 | 클라이언트가 설정한 토큰 | cluster_tokens의 첫 번째 토큰 |
| 인증 이후 | \n 종결 프레임 | 길이-프리픽스 RPC |
- 받을 때는
cluster_tokens목록 전체로 검증하므로, 새·구 토큰을 함께 나열해 두고 순차 재기동하면 토큰을 무중단으로 교체할 수 있습니다 (설정 (환경변수)). - TLS가 켜져 있으면 Raft 포트도 같은 인증서를 씁니다. 피어를 부르는 쪽은 상대 인증서를
tls_ca(없으면 시스템 신뢰 저장소)로 검증하며,tls_skip_verify는 테스트 전용입니다. - 인증 실패 시
E auth_failed후 연결이 닫히는 것도 동일합니다.