개발 과정에서 컴퓨터 간에 네트워크를 통해 정확히 무엇이 전송되는지 조사하는 것이 유용할 때가 많습니다. 이는 문제의 원인을 찾거나 단순히 대화를 이해하는 것과 같은 작업을 수행하는 데 도움이 됩니다. 대개 대화는 HTTP와 같이 잘 알려진 프로토콜을 사용합니다. 그러나 Couchbase Mobile 2.0 이상에서는 다음과 같은 동기화 프로토콜을 사용하여 대화가 이루어집니다. BLIP웹 소켓을 통해 전송됩니다. 이로 인해 대화가 완전히 불투명해진다고 생각할 수 있지만 실제로는 다음과 같습니다. 와이어샤크 는 BLIP 메시지를 분석할 수 있습니다. 이를 수행하는 방법을 간단히 살펴보겠습니다.
하지만 이에 대해 알아보기 전에 한 가지 고지할 것이 있습니다. 이 정보는 순전히 교육 목적으로만 제공됩니다. 이 형식이 항상 동일할 것이라고 믿어서는 안 됩니다. 카우치베이스는 소비자와 이와 관련하여 어떠한 계약도 맺지 않았으며 변경될 수 있습니다. 그러나 때로는 무슨 일이 일어나고 있는지 확인할 수 있는 것이 좋습니다.
BLIP에서 필터링
이 글에서는 와이어샤크 사용법에 대한 기본 사항을 알고 있다고 가정합니다. 3.0.0 이상 버전은 모두 사용할 수 있지만 이전 버전에는 대용량 압축 메시지에서 충돌을 일으킬 수 있는 버그가 있으므로 3.2.7+/3.0.14+ 버전을 사용하는 것이 좋습니다. 네트워크 캡처를 시작하는 방법에 대해 잘 알고 있어야 합니다. 이 글은 이미 네트워크 캡처를 해보셨다고 가정하고 시작합니다. 캡처를 열어 살펴보면 다음 이미지와 같은 내용이 표시될 수 있습니다.
아직 필터를 설정하지 않았기 때문입니다. 현재 모든 유형의 모든 패킷이 표시됩니다. 상단 근처에 "표시 필터 적용"이라는 힌트 텍스트가 있는 텍스트 상자가 있는 것을 보시면 알 수 있습니다. BLIP은 지원되는 패킷 형식이며, BLIP 메시지만 표시하도록 필터를 설정할 수 있습니다.
한 가지 주의할 점은 BLIP은 웹 소켓을 사용하기 때문에 전체 대화가 존재하지 않으면 디코딩할 수 없다는 것입니다. 즉, 웹 소켓에 대한 초기 HTTP 요청이 존재해야 합니다. 예를 들어 필터를 blip || http
를 입력하면 이 대화에서 첫 번째 HTTP 메시지를 볼 수 있습니다.
메시지 세부 정보
이제 BLIP 대화가 시작되었으니 BLIP 메시지에는 어떤 내용이 담겨 있을까요? 이 질문에 답하기 위해 일반적인 BLIP 메시지의 내용을 살펴보겠습니다:
위에서부터 아래까지 다음과 같은 항목이 있습니다:
- 메시지 번호 - 기본적으로 참조되는 메시지의 ID입니다. 다음 섹션에서 중요한 정보입니다.
- 프레임 플래그 - 메시지에 대한 일부 메타데이터 정보(이 예에서는 본문이 압축되어 있고 긴급한 상태임). 이는 순서대로 처리되지 않음을 의미합니다.)
- 속성 길이 - 메시지의 속성 길이입니다(속성은 길이 항목으로 인코딩되고 그 뒤에 지정된 길이의 데이터가 이어집니다).
- 속성 - 메시지의 속성(키 값 쌍의 모음)
- 메시지 본문 - 메시지의 실제 내용입니다. 마지막 4바이트를 제외한 나머지 메시지 전체를 차지합니다.
- 체크섬 - 메시지가 전송된 순서대로 수신되고 패킷 내용이 잘못되지 않았는지 확인하기 위해 체크섬 값이 기록됩니다.
패킷 목록에 표시되는 방식에 따라 6가지 유형의 메시지를 보낼 수 있습니다:
- MSG - 새 메시지
- RPY - 수신된 메시지에 대한 [일반] 답장
- ERR - 수신된 메시지에 대한 오류 회신
- ACKMSG - 긴 멀티 패킷 메시지 수신에 대한 진행률 확인
- ACKRPY - 긴 멀티패킷 응답 수신에 대한 진행 확인
대화 팔로우하기
특정 대화를 추적할 때 고려해야 할 중요한 사항은 양쪽 모두 메시지를 시작할 수 있다는 것입니다. 이 경우 와이어샤크의 메시지 목록에 다음과 같이 표시됩니다. MSG#{NUM}
. 어느 쪽에서 메시지를 보냈는지 확인하는 방법은 소스 및 대상 IP 주소를 보면 알 수 있습니다. 예를 들어, 위의 두 다이어그램에서 다음을 볼 수 있습니다. MSG#2
를 목록의 세 번째 메시지로 표시합니다. 또한 다음을 볼 수도 있습니다. MSG#2
를 목록의 두 번째에서 마지막 메시지로 표시합니다. 차이점은 첫 번째 항목의 소스 IP가 192.168.33.1이고 대상 IP가 192.168.33.11이며 후자는 반대로 되어 있다는 것입니다. 이는 내 설정에서 동기화 게이트웨이 인스턴스가 192.168.33.11에서 실행되고 있기 때문에 첫 번째 메시지는 Couchbase Lite가 동기화 게이트웨이로 보낸 메시지임을 나타냅니다. 두 번째 메시지는 그 반대이며, 동기화 게이트웨이가 Couchbase Lite에 보낸 메시지입니다.
메시지를 받으면 다음 세 가지 중 한 가지가 발생합니다:
- 메시지가 수신되고 실행되어 정상적으로 완료됩니다. 이 경우 수신된 메시지와 동일한 메시지 번호로 답장 메시지가 전송됩니다. 예를 들어
MSG#2
는RPY#2
(소스 및 대상 IP가 반전된 상태). - 메시지는 수신되었지만 정상적으로 완료할 수 없습니다. 이 경우 #1과 동일한 조건으로 오류 메시지가 전송됩니다.
- 메시지에는
NoReply
플래그를 입력합니다. 이 경우 응답이 전송되지 않습니다.
위의 내용을 사용하면 메시지 목록에서 첫 번째 메시지 바로 뒤에 있는 메시지 MSG#2
는 RPY#2
로 표시되므로 메시지에 대한 응답이 됩니다. 마찬가지로 첫 번째 MSG#1
에는 ERR#1
답장을 보내면 오류로 종료되었음을 나타냅니다. 이 방법은 대화의 양쪽 모두에 적용할 수 있으므로 주어진 BLIP 대화에서 앞뒤 메시지를 쉽게 추적할 수 있습니다.