와이어샤크를 통한 카우치베이스 라이트 동기화 프로토콜 검사

개발 과정에서 컴퓨터 간에 네트워크를 통해 정확히 무엇이 전송되는지 조사하는 것이 유용할 때가 많습니다. 이는 문제의 원인을 찾거나 단순히 대화를 이해하는 것과 같은 작업을 수행하는 데 도움이 됩니다. 대개 대화는 HTTP와 같이 잘 알려진 프로토콜을 사용합니다. 그러나 Couchbase Mobile 2.0 이상에서는 다음과 같은 동기화 프로토콜을 사용하여 대화가 이루어집니다. BLIP웹 소켓을 통해 전송됩니다. 이로 인해 대화가 완전히 불투명해진다고 생각할 수 있지만 실제로는 다음과 같습니다. 와이어샤크 는 BLIP 메시지를 분석할 수 있습니다. 이를 수행하는 방법을 간단히 살펴보겠습니다.

하지만 이에 대해 알아보기 전에 한 가지 고지할 것이 있습니다. 이 정보는 순전히 교육 목적으로만 제공됩니다. 이 형식이 항상 동일할 것이라고 믿어서는 안 됩니다. 카우치베이스는 소비자와 이와 관련하여 어떠한 계약도 맺지 않았으며 변경될 수 있습니다. 그러나 때로는 무슨 일이 일어나고 있는지 확인할 수 있는 것이 좋습니다.

BLIP에서 필터링

이 글에서는 와이어샤크 사용법에 대한 기본 사항을 알고 있다고 가정합니다. 3.0.0 이상 버전은 모두 사용할 수 있지만 이전 버전에는 대용량 압축 메시지에서 충돌을 일으킬 수 있는 버그가 있으므로 3.2.7+/3.0.14+ 버전을 사용하는 것이 좋습니다. 네트워크 캡처를 시작하는 방법에 대해 잘 알고 있어야 합니다. 이 글은 이미 네트워크 캡처를 해보셨다고 가정하고 시작합니다. 캡처를 열어 살펴보면 다음 이미지와 같은 내용이 표시될 수 있습니다.

A wireshark trace without a filter

새 트레이스를 열면 다음과 같은 보기가 표시됩니다.

아직 필터를 설정하지 않았기 때문입니다. 현재 모든 유형의 모든 패킷이 표시됩니다. 상단 근처에 "표시 필터 적용"이라는 힌트 텍스트가 있는 텍스트 상자가 있는 것을 보시면 알 수 있습니다. BLIP은 지원되는 패킷 형식이며, BLIP 메시지만 표시하도록 필터를 설정할 수 있습니다.

A wireshark trace filtered to BLIP

이제 BLIP 대화만 표시되어 관리가 더 쉬워졌습니다.

한 가지 주의할 점은 BLIP은 웹 소켓을 사용하기 때문에 전체 대화가 존재하지 않으면 디코딩할 수 없다는 것입니다. 즉, 웹 소켓에 대한 초기 HTTP 요청이 존재해야 합니다. 예를 들어 필터를 blip || http 를 입력하면 이 대화에서 첫 번째 HTTP 메시지를 볼 수 있습니다.

A wireshark trace filtered to BLIP and HTTP

상단에 있는 두 개의 녹색 항목에 주목하세요. 이 항목은 웹 소켓에 대한 요청/응답 HTTP 메시지를 표시합니다.

메시지 세부 정보

이제 BLIP 대화가 시작되었으니 BLIP 메시지에는 어떤 내용이 담겨 있을까요? 이 질문에 답하기 위해 일반적인 BLIP 메시지의 내용을 살펴보겠습니다:

Details of a BLIP message

일반적인 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에 보낸 메시지입니다.

메시지를 받으면 다음 세 가지 중 한 가지가 발생합니다:

  1. 메시지가 수신되고 실행되어 정상적으로 완료됩니다. 이 경우 수신된 메시지와 동일한 메시지 번호로 답장 메시지가 전송됩니다. 예를 들어 MSG#2RPY#2 (소스 및 대상 IP가 반전된 상태).
  2. 메시지는 수신되었지만 정상적으로 완료할 수 없습니다. 이 경우 #1과 동일한 조건으로 오류 메시지가 전송됩니다.
  3. 메시지에는 NoReply 플래그를 입력합니다. 이 경우 응답이 전송되지 않습니다.

위의 내용을 사용하면 메시지 목록에서 첫 번째 메시지 바로 뒤에 있는 메시지 MSG#2RPY#2 로 표시되므로 메시지에 대한 응답이 됩니다. 마찬가지로 첫 번째 MSG#1 에는 ERR#1 답장을 보내면 오류로 종료되었음을 나타냅니다. 이 방법은 대화의 양쪽 모두에 적용할 수 있으므로 주어진 BLIP 대화에서 앞뒤 메시지를 쉽게 추적할 수 있습니다.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 짐 보든, 수석 소프트웨어 엔지니어, Couchbase

카우치베이스의 수석 소프트웨어 엔지니어로 카우치베이스 라이트에서 일하고 있습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.