Share via


Microsoft SMB 프로토콜 패킷 교환 시나리오

이 항목은 클라이언트와 서버 간의 Microsoft SMB 프로토콜 패킷 교환 예제를 제공합니다. 다음 단계에서는 프로세스의 개요를 제공합니다.

  1. 클라이언트와 서버가 NetBIOS 세션을 설정합니다.
  2. 클라이언트와 서버가 Microsoft SMB 프로토콜 언어를 협상합니다.
  3. 클라이언트가 서버에 로그온합니다.
  4. 클라이언트가 서버의 공유에 연결합니다.
  5. 클라이언트가 공유의 파일을 엽니다.
  6. 클라이언트가 파일에서 읽습니다.

먼저 클라이언트가 서버와의 전체 이중 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 연결이 예고 없이 해제될 수 있습니다.