OSI(Open Systems Interconnection) 7 계층 모델은 네트워크 통신을 7단계로 나누어 설명하는 모델입니다. 이 모델은 서로 다른 시스템이나 네트워크 장치들이 데이터를 주고받을 때 발생하는 복잡한 과정을 단계별로 나누어 이해하기 쉽게 만들었습니다. 각 계층은 고유한 역할을 하며, 상호 독립적으로 작동합니다.
세션 계층(Session Layer)은 통신 세션을 설정하고, 유지 및 관리하며, 통신을 종료하는 과정을 담당하는 계층입니다. 이 계층은 두 응용 프로그램 간의 대화를 관리하여 데이터를 주고받는 세션을 동기화하고, 오류가 발생했을 때 세션을 복구하는 역할을 합니다.
세션 계층은 상위 계층과 하위 계층의 중간에서, 응용 계층에서 요청된 데이터를 전송 계층을 통해 전달하는 동안 세션의 상태를 관리합니다. 세션 계층은 응용 프로그램 간의 연결을 유지하고, 데이터 전송이 올바르게 동기화되도록 보장합니다. 이를 위해 세션 계층은 세션 식별자(Session Identifier)를 이용하여 각 통신의 고유 세션을 구분하고 관리합니다.
세션 계층은 소프트웨어적으로 동작하는 계층이기 때문에, 네트워크 장비보다는 운영체제나 응용 프로그램에서 주로 관리됩니다. 다만, 세션을 관리하기 위한 방화벽이나 VPN 장비 등이 세션 계층과 관련이 있을 수 있습니다.
RPC(Remote Procedure Call)는 한 시스템에서 실행 중인 프로그램이 네트워크를 통해 다른 시스템의 프로그램을 호출할 수 있게 해주는 프로토콜입니다. 네트워크 상에서 원격 프로시저를 호출하는 것처럼 보이지만, 실제로는 호출자가 네트워크를 통해 원격 서버에서 함수를 실행하는 방식으로 작동합니다.
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync('example.proto', {});
const exampleProto = grpc.loadPackageDefinition(packageDefinition).example;
const client = new exampleProto.ExampleService('localhost:50051', grpc.credentials.createInsecure());
client.someRemoteFunction({ message: 'Hello' }, (error, response) => {
if (!error) {
console.log('Response:', response);
}
});
NetBIOS는 로컬 네트워크 상에서 컴퓨터 간의 통신 세션을 설정하고 관리하는 프로토콜입니다. 초기에는 IBM의 PC 네트워크에서 사용되었으며, 현재는 주로 LAN(Local Area Network)에서 사용됩니다. NetBIOS는 세션 계층에서 데이터를 주고받는 과정에서 세션의 설정, 유지 및 종료를 담당합니다.
Windows 환경에서 파일 공유나 프린터 공유 시 주로 사용되며, 로컬 네트워크 내에서 컴퓨터 간에 세션을 설정하고 데이터를 주고받는 데 널리 쓰입니다.
SMB(Server Message Block) 프로토콜과 함께 사용되어 파일 시스템에서의 데이터 공유 및 접근을 제공합니다.
SMB(Server Message Block): NetBIOS와 함께 사용되며, 파일이나 장치의 공유 및 원격 리소스 접근을 위해 사용되는 프로토콜입니다. NetBIOS는 세션 계층에서의 통신을 설정하는 역할을, SMB는 응용 계층에서 데이터 전송을 처리합니다.
# NetBIOS 세션을 확인하는 명령어
nbtstat -a <remote-host>
SIP(Session Initiation Protocol)는 음성 통화, 화상 통화 등 멀티미디어 통신을 위한 세션을 설정하고 관리하는 프로토콜입니다. 전화 통화와 같은 세션을 설정하고 종료하는 역할을 하며, IP 기반 네트워크에서 VoIP(Voice over IP) 및 화상 회의를 지원합니다.
SIP는 음성 및 영상 데이터를 전달하기 위한 세션을 설정하는 데 사용되며, 주로 VoIP 서비스에서 통화 세션을 제어하는 데 사용됩니다.
SIP는 HTTP와 비슷한 구조를 가지고 있어, 요청과 응답을 통해 세션을 제어할 수 있으며, 이 과정에서 세션 설정, 수정, 종료 등의 작업을 처리합니다.
SIP는 신호 처리와 멀티미디어 스트리밍 간의 분리를 허용하기 때문에, 개발자는 미디어 스트리밍(예: RTP)과는 별도로 SIP를 사용하여 세션 관리를 수행할 수 있습니다.
RTP(Real-time Transport Protocol): 실시간 데이터를 전송하는 프로토콜로, SIP에서 설정한 세션을 통해 오디오 및 비디오 스트림을 전달하는 역할을 합니다.
SDP(Session Description Protocol): 세션에서 어떤 미디어 형식이 사용될지 설명하는 프로토콜로, SIP 메시지에 포함되어 세션 설정 시 사용됩니다.
const JsSIP = require('jssip');
// SIP UA 설정
const socket = new JsSIP.WebSocketInterface('wss://sip-server-address');
const configuration = {
sockets: [socket],
uri: 'sip:user@sip-server.com',
password: 'password'
};
const ua = new JsSIP.UA(configuration);
// SIP 통화 시작
ua.start();
ua.call('sip:destination@sip-server.com', {
mediaConstraints: { audio: true, video: false }
});