서버 메시지 블록(SMB)은 사용자와 애플리케이션이 네트워크를 통해 파일, 프린터 및 기타 공유 리소스에 액세스할 수 있게 해주는 중요한 네트워크 파일 공유 프로토콜입니다. Windows 환경에서 일반적으로 사용되는 SMB는 클라이언트 시스템과 서버 시스템 간의 원활한 통신을 지원합니다. 이 글에서는 SMB의 작동 방식, 구성 요소, 일반적인 문제 해결 단계, SMB 관련 문제를 해결하기 위한 모범 사례를 살펴보겠습니다.
목차
SMB란?
서버 메시지 블록(SMB)는 사용자가 원격 서버의 파일을 로컬 파일처럼 읽고, 쓰고, 관리할 수 있게 해주는 네트워크 프로토콜입니다. SMB는 파일, 프린터, 직렬 포트에 대한 공유 액세스를 가능하게 하기 위해 Windows 네트워크에서 널리 사용됩니다. Linux 및 macOS 시스템에서도 지원되므로 크로스 플랫폼 통신을 위한 다목적 프로토콜입니다.
SMB 작동 방식
- 클라이언트 요청:SMB 클라이언트(예: Windows, Linux 또는 macOS)는 공유 리소스에 액세스하기 위해 SMB 서버에 요청을 보냅니다.
- 서버 응답:SMB 서버는 인증 및 권한을 기준으로 요청을 검증합니다.
- 리소스 액세스:액세스가 허용되면 클라이언트는 로컬 드라이브에 있는 것처럼 파일을 읽고, 쓰고, 수정할 수 있습니다.
주요 SMB 용어
- SMB 서버(SRV):공유 파일 시스템을 호스팅하는 시스템.
- SMB 클라이언트(CLI):공유 파일 시스템에 액세스하는 시스템.
예를 들어 Windows Server 2016 시스템이 SMB 공유\\MyWorkstation\Data(Windows 10 컴퓨터)에 액세스하는 경우, 해당 서버는 SMB 클라이언트가 되고, 워크스테이션은 SMB 서버.
SMB 버전
1. SMB 1.0(레거시)
- WannaCry 및 EternalBlue와 같은 공격에 취약합니다.
- 최신 보안 기능이 부족합니다.
2. SMB 2.0 / 2.1
- 성능과 보안이 향상되었습니다.
- 더 나은 데이터 전송 속도를 위해 더 큰 버퍼 크기를 지원합니다.
3. SMB 3.0+
- 보안 강화를 위해 암호화가 도입되었습니다.
- 고속 파일 전송을 위한 SMB Multichannel 및 SMB Direct 등의 기능이 포함되어 있습니다.
SMB 구성 요소
1. 바이너리
- SMB 클라이언트 바이너리:위치는
%windir%\system32\Drivers:RDBSS.sysMRXSMB.sysMRXSMB10.sysMRXSMB20.sysMUP.sysSMBdirect.sys
- SMB 서버 바이너리:
%windir%\system32:Srvsvc.dll%windir%\system32\Drivers:SRVNET.sys,SRV.sys,SRV2.sys,SMBdirect.sys
2. 바인딩
- SMB 클라이언트 바인딩:
Client for Microsoft Networks - SMB 서버 바인딩:
File and Printer Sharing for Microsoft Networks

SMB 포트 및 통신
SMB는 사용하는 프로토콜에 따라 다른 포트를 통해 동작할 수 있습니다:
| 프로토콜 | 포트 | 설명 |
|---|---|---|
| NetBIOS over TCP/IP | UDP 137 | 이름 해석 |
| NetBIOS over TCP/IP | UDP 138 | 데이터그램 서비스 |
| NetBIOS over TCP/IP | TCP 139 | 세션 서비스 |
| TCP를 통한 직접 SMB | TCP 445 | 기본 SMB 통신 |
최신 네트워크는 주로 TCP 445를 사용하고, 이전 시스템은 NetBIOS에 의존할 수 있습니다.
SMB 문제 해결 방법
1. 연결 확인
- 클라이언트가 서버에 연결할 수 있는지 다음 포트로 확인합니다. TCP 445:
Test-NetConnection <server_IP_or_hostname> -Port 445
- 실패하면 Azure Firewall, NSG 또는 로컬 방화벽에서 SMB 트래픽이 차단되고 있는지 확인합니다.
2. 이름 해석 확인
- 호스트 이름과 IP를 통해 서버 액세스를 테스트합니다:
nslookup <server_hostname>
- 호스트 이름이 실패하면 DNS 구성을 확인합니다.
3. SMB 서비스 확인
- 필요한 서비스가 실행 중인지 확인합니다:
Get-Service -Name LanmanServer, LanmanWorkstation
- 중지된 경우 서비스를 시작합니다:
Start-Service -Name LanmanServer, LanmanWorkstation

4. 방화벽 규칙 확인
- SMB 규칙이 활성화되어 있는지 확인합니다:
netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"

5. 권한 확인
- 폴더 속성 또는 CMD를 통해 공유 권한과 NTFS 권한을 확인합니다:
net share <sharename>
icacls <folder_path>


6. UNC 경로를 사용하여 액세스 테스트
- 「
Run(Win + R)을 열고 다음과 같이 입력합니다:
\\<server_IP_or_hostname>\sharename
고급 문제 해결 및 데이터 수집
1. SMB 세션 확인
- 활성 SMB 세션을 표시합니다:
Get-SmbSession
2. SMB 구성 재설정
- SMB 2 및 3을 비활성화했다가 다시 활성화합니다:
Set-SmbServerConfiguration -EnableSMB2Protocol $true -Force
3. 네트워크 추적
- Wireshark를 사용하여 SMB 관련 네트워크 패킷을 수집합니다:
- SMB 클라이언트와 서버 모두에서 트래픽 캡처를 시작합니다.
- 문제를 재현합니다.
- 패킷을 분석하여 SMB 오류나 시간 초과를 찾습니다.
4. 이벤트 로그 수집
- 추가 분석을 위해 SMB 관련 이벤트 로그를 내보냅니다:
- SMB 클라이언트 로그.
- SMB 서버 로그.

참조 문서:
Server Message Block(SMB) 고급 문제 해결 | Microsoft Learn
SMB 문제 해결 지침 – Windows Server | Microsoft Learn
Microsoft SMB 프로토콜 및 CIFS 프로토콜 개요 – Win32 앱 | Microsoft Learn
Windows에서 SMBv1, SMBv2, SMBv3 검색, 사용 및 사용 안 함 | Microsoft Learn
Windows Server에서 SMB 3 프로토콜을 사용한 파일 공유 개요 | Microsoft Learn
Server Message Block 서명 개요 – Windows Server | Microsoft Learn
SMB 보안 개선 사항 | Microsoft Learn
결론
SMB는 파일 공유 및 리소스 액세스를 위한 강력한 프로토콜이지만, 잘못된 구성, 네트워크 제한 또는 오래된 구성 요소로 인해 문제가 발생할 수 있습니다. 위에 설명된 문제 해결 단계를 따르면 SMB 관련 문제를 효과적으로 식별하고 해결할 수 있습니다. 복잡한 문제의 경우 네트워크 추적 및 이벤트 로그와 같은 고급 진단을 통해 더 깊은 통찰을 얻을 수 있습니다.