소켓을 사용하는 두 프로그램 간의 통신을 위해 애플리케이션 계층 프로토콜이 존재해야 합니까?

소켓을 사용하는 두 프로그램 간의 통신을 위해 애플리케이션 계층 프로토콜이 존재해야 합니까?

두 프로그램이 아무리 간단하든 복잡하든 관계없이 인터넷 도메인 소켓(또는 Unix 도메인 소켓)을 통해 통신할 때 반드시 다음이 있음을 의미합니까?애플리케이션 계층 프로토콜 그들의 의사소통을 위해서?

그러한 애플리케이션 계층 프로토콜이 잘 알려져 있고 정의될 수 있습니까(예: HTTP) 또는 임시(명확하게 정의되지 않음)?

예를 들어 Virtual Machine Manager와 KVM/QEMU는 Unix 또는 인터넷 도메인 소켓을 통해 통신합니다 psql. postgresql server그러한 프로그램이 통신을 위해 자체 프로토콜을 사용해야 하는지 궁금합니다.

이는 프로토콜(특히 애플리케이션 계층 프로토콜)의 개념을 이해하는 데 도움이 됩니다.

감사해요.

답변1

프로토콜은 단순히 통신 방법의 집합입니다. 다른 사람은 없습니다. 얼마나 엄격하고 느슨한지는 또 다른 문제입니다.

의사소통이 완전히 혼란스러워지는 것을 막을 수 있는 방법은 없습니다. 이를 사용하여 netcat두 끝점 간에 통신할 수 있으며, 두 끝점 간에 보내는 데이터는 데이터 교환이 달성하려는 목표에 의해서만 제한됩니다. 원하는 경우 이는 순수한 쓰레기일 수 있습니다. 즉, 제한이 없음을 의미합니다.

답변2

예. 서로 통신하는 두 프로그램은 통신 방법을 결정하기 위해 일부 프로토콜을 따라야 합니다. 프로토콜은 표준 또는 공식(공개되거나 기록된) 프로토콜일 필요는 없지만 통신이 어떻게, 어떤 순서로 이루어져야 하는지, 그리고 어떤 데이터가 각 프로토콜에 일관되게 전달되는지에 대해 어느 정도 동의해야 합니다. 다른 의미.

비유하자면, 사람이 식료품점을 떠나 계산대에서 돈을 지불하는 것입니다. 거기에는 어떤 언어를 사용할지, 금전 거래에 어떤 통화를 사용해야 하는지에 대한 비공식적 합의가 포함된 합의가 있습니다. 이 계약은 또한 사람들이 새로 구입한 식료품을 가지고 (합법적으로) 매장을 떠날 수 있도록 일이 발생해야 하는 순서를 규정합니다. 이 합의에는 사람들이 현금이나 직불카드로 지불할지 여부를 선택하는 데 필요한 정보 교환도 포함됩니다. 다른 것으로 지불하라고 요구하거나, 체크아웃 과정에서 너무 일찍 또는 너무 늦게 지불하라고 요구하는 것은 카운터 뒤에 있는 사람을 혼란스럽게 합니다. 알 수 없는(호환되지 않는) 언어로 말하는 것도 마찬가지입니다.

때로는 카드 전용 계산대에서 현금으로 결제하려고 하여 계약을 위반하는 경우도 있습니다. 그런 다음 현금을 받는 카운터에서 절차를 다시 시작하게 됩니다. 이 정보는 이전 거래 메시지("직불 카드만 가능"이라고 표시된 표시)에서 귀하에게 제공되었지만 귀하는 이를 무시했습니다.

sshSSH 서버에 접속할 때 서버와 클라이언트 사이에 주고받는 프로토콜 메시지를 사용하는 몇 가지 예를 볼 수 있습니다 -vvv. 클라이언트 측에서는 원격 서버의 SSH 프로토콜 버전을 식별하고 자체 클라이언트 버전을 보내는 것에 대한 메시지를 볼 수 있습니다. 사용하기로 동의한 비밀번호와 시도되는 인증 방법에 대한 메시지가 표시됩니다. 디버그 모드에서 SSH 데몬을 시작하고 클라이언트를 사용하여 연결하는 경우 해당 서버 측 메시지도 볼 수 있습니다.

관련 정보