이 항목에서는 클라이언트와 서버 간의 Microsoft SMB 프로토콜 패킷 교환 예제를 제공합니다. 다음 단계는 프로세스의 개요입니다.
- 클라이언트와 서버는 NetBIOS 세션을 설정합니다.
- 클라이언트와 서버는 Microsoft SMB 프로토콜 방언을 협상합니다.
- 클라이언트가 서버에 로그온합니다.
- 클라이언트는 서버의 공유에 연결합니다.
- 클라이언트가 공유에서 파일을 엽니다.
- 클라이언트가 파일에서 읽습니다.
먼저 클라이언트가 서버와 함께 전체 이중 TCP 연결을 설정합니다. 그런 다음 클라이언트는 TCP 연결을 통해 NetBIOS 세션 요청 패킷을 빌드하고 보냅니다. 패킷의 형식이 올바르게 지정되면 서버는 세션이 설정되었음을 인정하는 메시지가 포함된 패킷을 반환합니다. 그런 다음 클라이언트는 첫 번째 Microsoft SMB 프로토콜 패킷을 서버로 보냅니다.
패킷 1: SMB_COM_NEGOTIATE 방향: 클라이언트를 서버로 설명: 클라이언트는 서버가 Microsoft SMB 프로토콜 방언을 협상할 것을 요청합니다. 클라이언트가 사용할 수 있는 방언을 식별하는 문자열 목록이 패킷에 포함됩니다. |
패킷 2: SMB_COM_NEGOTIATE 방향: 서버에서 클라이언트로 설명: 서버는 세션에서 사용할 Microsoft SMB 프로토콜 방언을 식별하기 위해 클라이언트의 요청에 응답합니다. 반환된 패킷에는 로그온 프로세스 중에 클라이언트를 인증하기 위해 다음 단계에서 사용할 8 바이트 임의 문자열도 포함됩니다. |
패킷 3: SMB_COM_SESSION_SETUP_ANDX 방향: 클라이언트를 서버로 설명: 이 패킷에는 클라이언트 기능에 대한 정보가 포함되어 있으므로 서버가 공유 수준 보안만 구현한 경우에도 이 패킷을 보내야 합니다. 패킷 3: SMB_COM_SESSION_SETUP_ANDX 방향: 서버에서 클라이언트로 설명: 서버에서 챌린지/응답을 수락하면 클라이언트에 반환되는 패킷에 유효한 UID가 포함됩니다. 허용되지 않는 경우 서버는 이 패킷에 오류 코드를 반환하고 액세스를 거부합니다. |
패킷 4: SMB_COM_TREE_CONNECT_ANDX 방향: 클라이언트를 서버로 설명: 클라이언트가 공유에 대한 액세스를 요청합니다. 패킷에는 UNC 형식의 공유의 완전히 지정된 경로가 포함됩니다. |
패킷 5: SMB_COM_TREE_CONNECT_ANDX 방향: 서버에서 클라이언트로 설명: 공유에 대한 액세스 권한이 부여되면 서버는 이 패킷의 공유에 해당하는 16비트 TID(트리 ID)를 반환합니다. 공유가 없거나 사용자가 공유에 액세스할 자격 증명이 부족한 경우 서버는 이 패킷에 오류 코드를 반환하고 공유에 대한 액세스를 거부합니다. |
패킷 6: SMB_COM_OPEN_ANDX 방향: 클라이언트를 서버로 설명: 클라이언트가 클라이언트를 대신하여 액세스된 공유에서 파일을 열도록 서버에 요청합니다. 이 패킷에는 열 파일의 이름이 포함됩니다. |
패킷 7: SMB_COM_OPEN_ANDX 방향: 서버에서 클라이언트로 설명: 파일에 대한 액세스 권한이 부여되면 서버는 요청된 파일의 파일 ID를 반환합니다. 파일이 없거나 사용자에게 파일에 액세스할 자격 증명이 부족한 경우 서버는 이 패킷에 오류 코드를 반환하고 파일에 대한 액세스를 거부합니다. |
패킷 8: SMB_COM_READ_ANDX 방향: 클라이언트를 서버로 설명: 클라이언트가 클라이언트를 대신하여 열린 파일에서 데이터를 읽고 이 데이터를 클라이언트에 반환하도록 서버에 요청합니다. 파일을 열 때 클라이언트에서 가져온 파일 ID는 서버에서 데이터를 읽어야 하는 열린 파일을 식별하기 위해 이 패킷에 포함됩니다. |
패킷 9: SMB_COM_READ_ANDX 방향: 서버에서 클라이언트로 설명: 서버는 이 패킷에서 요청된 파일 데이터를 반환합니다. 서버, 공유 및 파일에 대한 액세스 권한이 부여된 경우 여기에 오류가 발생할 가능성이 낮습니다. 그러나 경우에 따라 발생할 수 있습니다. 예를 들어 파일이 열린 시간과 파일을 읽은 시간 사이에 공유에 대한 액세스가 변경되는 경우입니다. |
메모
변경 알림을 지원하지 않는 CIFS를 구현하는 경우 Windows는 파일 시스템에 대한 미해결 핸들을 유지할 수 없으며 SMB 연결은 예고 없이 사라질 수 있습니다.