Ⅰ.RPC(Remote Procedure Call) 란?
원격 시스템에서 프로시저나 함수를 호출할 수 있도록 지원하는 네트워크 프로그래밍 모델입니다. 이를 통해 로컬 시스템과 원격 시스템 간의 통신을 추상화하여, 네트워크나 원격 호출의 복잡성을 숨기고, 마치 로컬에서 함수나 메소드를 호출하는 것처럼 쉽게 사용할 수 있게 해줍니다.
Ⅱ. RPC(Remote Procedure Call) 역할
분산 시스템 간의 통신: RPC는 분산 시스템에서 서로 다른 컴퓨터나 서버 간에 통신을 원활하게 수행하는 역할을 합니다. 예를 들어, 클라이언트가 서버의 리소스나 서비스를 필요로 할 때, RPC를 사용하여 서버의 함수를 호출하고 그 결과를 받을 수 있습니다.
ⅰ. 복잡성 추상화
네트워크 기반의 통신을 단순화하여, 개발자가 로컬 함수를 호출하는 것과 동일한 방식으로 원격 호출을 할 수 있도록 지원합니다. 개발자는 네트워크 계층, 프로토콜, 데이터 전송 등의 세부 사항을 직접 다루지 않아도 됩니다.
ⅱ. 네트워크 프로세스 통합
다양한 시스템이나 프로세스 간에 협력할 수 있도록 통합된 통신 구조를 제공합니다. 이로 인해 여러 애플리케이션이 물리적으로 분리된 상태에서도 하나의 응집된 시스템처럼 작동할 수 있습니다.
Ⅲ. RPC(Remote Procedure Call) 특징
ⅰ. 투명한 원격 호출
RPC는 원격 프로시저 호출을 투명하게 만들어서, 마치 로컬에서 함수나 메소드를 호출하는 것처럼 개발자가 네트워크에 신경 쓰지 않고 코드를 작성할 수 있도록 지원합니다.
ⅱ. 클라이언트-서버 모델
RPC는 명확한 클라이언트-서버 구조로 작동합니다. 클라이언트가 서버에 요청을 보내고, 서버는 요청을 처리한 후 결과를 클라이언트에게 반환합니다.
ⅲ. 마샬링(Marshalling)과 언마샬링(Unmarshalling)
클라이언트에서 원격 프로시저 호출 시, 데이터를 전송 가능한 형태로 직렬화하는 과정을 마샬링이라고 하고, 서버에서 데이터를 다시 원래 상태로 복구하는 과정을 언마샬링이라고 합니다. 이 과정을 통해 원격 시스템 간 데이터 전송이 가능해집니다.
ⅳ. 프로토콜 독립적
RPC는 기본적으로 특정 프로토콜에 종속되지 않습니다. TCP, UDP 등의 다양한 네트워크 프로토콜 위에서 구현될 수 있으며, HTTP 같은 상위 계층 프로토콜을 사용할 수도 있습니다. 이를 통해 다양한 네트워크 환경에서 유연하게 사용할 수 있습니다.
ⅴ. 동기/비동기 호출
대부분의 RPC는 클라이언트가 서버의 응답을 기다리는 동기 방식으로 작동하지만, 일부 구현에서는 비동기 호출을 지원하여 서버의 응답을 기다리지 않고 다른 작업을 수행할 수 있습니다.
ⅵ. 에러 처리
RPC는 원격 서버의 실패, 네트워크 장애, 데이터 전송 오류 등 다양한 문제를 처리하기 위한 에러 처리 메커니즘을 제공합니다. 클라이언트가 네트워크 장애나 서버의 다운타임을 핸들링할 수 있도록 예외 처리 방식을 지원합니다.
ⅶ. IDL(Interface Definition Language)
RPC는 클라이언트와 서버 간의 통신을 정의하기 위해 인터페이스 정의 언어(IDL)를 사용합니다. IDL은 호출될 메소드, 매개변수, 반환값 등을 정의하여, 서로 다른 시스템 간의 통신 구조를 표준화합니다.
ⅷ. 보안
일부 RPC 구현은 인증, 권한 관리, 데이터 암호화 등을 통해 통신 중 발생할 수 있는 보안 문제를 해결합니다. 예를 들어, 원격 시스템과 통신하는 동안 데이터가 탈취되거나 조작되지 않도록 보호할 수 있습니다.
Ⅳ. 원격 프로시저 호출(RPC, Remote Procedure Call) 정보 조회
ⅰ. rpcinfo 란?
원격 프로시저 호출(RPC, Remote Procedure Call) 관련 정보를 조회할 수 있는 명령어인 rpcinfo 에 대해 알아보겠습니다.
주로 UNIX 및 Linux 환경에서 사용되며, 시스템에서 실행 중인 RPC 서비스를 나열하거나 해당 서비스가 정상적으로 동작하는지 확인하는 데 사용되며, 특정 호스트에서 실행 중인 RPC 프로그램의 목록과 해당 프로그램의 프로토콜, 포트 번호 등의 정보를 얻을 수 있습니다. 또한 RPC 서버에 대한 상태를 점검하거나 문제를 진단하는 데 유용합니다.
ⅱ. rpcinfo 사용방법
1) 현재 호스트에서 실행 중인 RPC 서비스 확인
rpcinfo -p |
2) 특정 호스트에서 RPC 서비스 확인
rpcinfo -p <hostnmame> |
이 명령은 주로 NFS(Network File System)와 같은 RPC 기반 서비스를 관리하거나 디버깅할 때 사용됩니다.
ⅲ. rpcinfo로 실행 중인 RPC 서비스 확인
1) 먼저 rpcinfo -p 명령을 사용하여 현재 실행 중인 RPC 프로그램을 확인합니다.
[root@feccle ~]# rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
2) 특정 RPC 서비스 종료
이제 systemctl 또는 service 명령을 사용해 종료하려는 서비스의 이름을 찾아서 종료할 수 있습니다.
■ NFS 서비스를 중지
systemctl stop nfs-server |
■ rpcbind(portmapper)를 중지
systemctl stop rpcbind |
3) RPC 서비스 상태 확인
RPC 서비스가 중지되었는지 확인하려면 다시 rpcinfo -p 명령을 실행하여 서비스 목록이 업데이트되었는지 확인합니다.
ⅱ. 포트 111에서 실행되는 portmapper
1) 포트 111에서 실행되는 portmapper 란?
포트 111에서 실행되는 portmapper(또는 rpcbind)는 RPC(Remote Procedure Call) 서비스를 관리하는 데 사용되는 데몬입니다. 이 서비스는 UNIX 및 Linux 시스템에서 주로 사용되며, 다양한 네트워크 서비스를 요청하는 클라이언트가 적절한 포트에서 해당 서비스를 찾을 수 있도록 돕습니다.
2) 포트 111에서 실행되는 portmapper 역할 및 기능
RPC 서비스와 클라이언트 간의 연결: RPC를 사용하는 서비스는 고정된 포트를 사용하지 않고 임의의 포트에서 실행될 수 있습니다. 클라이언트는 이 포트를 직접 알 수 없기 때문에 portmapper가 이를 해결해 줍니다. 클라이언트가 특정 RPC 서비스에 연결하려고 하면, portmapper는 해당 서비스가 실행 중인 포트를 알려줍니다.
■ RPC 서비스 등록: 시스템에서 실행 중인 모든 RPC 서비스는 시작 시 portmapper에 자신을 등록하고, portmapper는 이 정보를 유지합니다.
■ 중앙 매개체: 클라이언트는 portmapper를 통해 다양한 RPC 서비스를 발견하고, 각 서비스가 어떤 포트에서 실행 중인지 알아낼 수 있습니다.
3) 포트 111에서 실행되는 portmapper 작동 방식
■ 클라이언트가 요청: 클라이언트가 RPC 호출을 하려고 할 때, portmapper에 접근하여 원하는 서비스의 포트를 조회합니다.
■ 포트 정보 제공: portmapper는 해당 RPC 서비스가 어떤 포트에서 실행되고 있는지 정보를 제공하고, 클라이언트는 이를 바탕으로 해당 서비스에 연결합니다.
ⅲ. 보안 고려사항
포트 111은 RPC 기반의 여러 서비스와 관련이 있으며, 보안 취약점이 존재할 수 있습니다. 공격자가 portmapper를 악용해 RPC 서비스를 탐지하고 공격할 수 있기 때문에, 포트 111을 외부로부터 차단하거나, 사용하지 않는 경우 rpcbind 서비스 자체를 비활성화하는 것이 보안상 바람직합니다.
■ 포트 차단: 방화벽을 통해 포트 111을 차단할 수 있습니다.
rpcbind 서비스 중지: 시스템에서 rpcbind(또는 portmap) 서비스를 중지하거나 비활성화할 수 있습니다:
systemctl stop rpcbind systemctl disable rpcbind |
'시스템(Linux)' 카테고리의 다른 글
YAML(YAML Ain't Markup Language)에 대해 알아보겠습니다. (2) | 2024.10.25 |
---|---|
리눅스에서 디스크를 추가로 할당하는 과정에 대해 알아보겠습니다. (0) | 2024.10.17 |
vi: command not found 오류 발생 시 조치 방법에 대해 알아보겠습니다. (3) | 2024.10.09 |
쿠버네티스(Kubernetes)를 구성하고 관리하는 주요 도구인 kubeadm, kubectl, kubelet에 대해 역할과 기본 사용법에 대해 알아보겠습니다. (2) | 2024.10.06 |
Docker 와 Kubernetes 비교 Ⅱ (1) | 2024.10.05 |