윈도우 부팅순서

지금에서야 컴퓨터포렌식이 아닌 모든 디지털기기를 다룬다는 의미의 디지털포렌식이라는 용어를 사용하지만 시작은 컴퓨터 시스템(데스크탑 or 서버 등)이었다. 따라서 디지털포렌식에서 컴퓨터의 기본을 이해하는 것은 매우 중요하다. 흔히 내공이라 불리는 기본 지식과 상식들은 진정 자신의 가치를 대변해주곤 하기 때문이다.
윈도우 운영체제에서 컴퓨터를 부팅시키기 위해 전원 버튼을 누르고 나면 간단한 하드웨어 체크 후에 윈도우 로그온 화면으로 넘어간다. 흔히들 골뱅이라 불리우는 진행바가 몇번 왔다갔다 한 후 윈도우 운영체제의 쉘인 explorer.exe 가 실행되어 바탕화면이 보이게 된다. 언듯 보기에는 간단해 보이지만 내부적으로는 더 많은 과정을 거치게 되는데 지금부터 그 과정에 대해서 알아보자.
  1. 처음 전원버튼을 누르게 되면 Power Supply는 외부로부터 들어온 전압을 검사하여 현재 시스템에서 사용할 수 있는 전압으로 변환한다. 변환된 전기적 흐름은 CPU로 전달되어 CPU가 가지고 있는 이전의 값들을 지우고 CPU 레지스터인 Program Counter(PC)를 초기화시킨다. 초기화되는 값은 보통 0xF000 값을 가지는데 이 값은 메인보드에 위치한 ROM BIOS의 부트 프로그램(boot program or bootstrap)의 주소 값을 가르킨다. 따라서 이후에는 부트 프로그램에 정의한 작업이 수행된다.
  2. 부트 프로그램은 먼저 CPU 이상 유무를 테스트한 후 POST(Power On Self-Test) 작업을 수행하기 위한 기본적인 테스트를 수행한다. 만약 테스트 결과가 ROM BIOS에 저장된 값과 일치하면 POST 작업을 수행한다.
  3. POST의 첫 번째 단계으로 CPU는 System Bus가 정상적으로 동작하는지 테스트하기 위해 System Bus로 특정 시그널을 보낸다. 테스트가 이상이 없다면 다음 단계로 넘어간다.
  4. 다음 단계로 RTC(Real-Time Clock; or system clock)을 테스트한다. RTC는 시스템의 전기적 신호를 동기화하기 위한 클럭으로 CMOS를 구성하는 장치에 칩 형태로 존재한다. RTC 테스트가 이상이 없다면 다음 단계로 넘어간다.
  5. 다음 단계로 시스템의 비디오 구성요소들(비디오 메모리 등)을 테스트한다. 이 과정이 완료된 후에야 비로소 표준출력을 이용해 부팅과정에서 정의된 출력을 볼 수 있다.
  6. 다음 단계로 RAM을 테스트한다. RAM을 테스트 하는 장면은 컴퓨터 부팅 과정에서 모니터 화면을 유심히 본 사람이라면 누구나 한번 쯤 보았을 것이다. 현재 RAM에는 ROM BIOS와 비디오 BIOS에서 읽어들인 데이터가 존재할 것이다. 따라서 해당 데이터가 정상적인지 테스트를 하게 된다.
  7. 다음 단계로 키보드가 정상적으로 연결되어 있는지 혹은 눌려진 키가 없는지 테스트 한 후 이상이 없으면 다음 과정으로 넘어간다. 부팅 과정에서 키보드의 키가 눌려져 있는 경우 삐익~!@ 하는 연속적인 비프음 소리를 들어본 경험이 있을 것이다. 또한 POST 과정에 키보드에 대한 테스트 과정이 포함되기 때문에 키보드가 연결되지 않은 시스템은 POST 과정을 완료하지 못하고 부팅되지 않는 것을 경험해 봤을 것이다.
  8. 다음 단계로 시스템에 연결된 모든 드라이브(플로피, CD, 하드디스크 등)에 신호를 보내 정상적으로 동작하는지를 테스트한다.
  9. 다음 단계로 앞서 수행한 POST의 결과가 CMOS(RTC/NVRAM)에 저장된 값과 일치하는지 검사한다.
  10. 다음 단계로 SCSI BIOS와 같은 추가적인 BIOS를 RAM에 로드하고 Plug and Play를 실행하여 운영체제 로드를 위한 기본적인 구성을 RAM에 로드한다.
  11. 다음 단계로 부트 프로그램은 운영체제를 로드하기 위해 인식한 드라이브 내에서 첫 번째 섹터를 읽는다. 드라이브의 첫 번째 섹터에는 MBR(Master Boot Record)이 위치한다. MBR 섹터의 마지막 2바이트는 정상적인 MBR을 알려주는 시그니처 “0x55AA” 값을 가진다. MBR의 앞부분 446 바이트의 16비트 부트 코드를 수행하다가 오류가 발생하면 적절한오류메시지를 출력한다.
다음의 그림은 MBR의 내용을 확인한 것이다. “Invalid partitons table.”,  “Error loading operationg system.”, “Missing operating system” 와 같은 오류메시지를 확인할 수 있다.
 
  1. 다음 단계로 MBR에서 부팅 가능한 파티션을 찾는 작업을 수행한다. MBR의 오프셋(offset) 446~509까지 64바이트가 파티션의 정보를 나타내는데 각 파티션은 16바이트를 사용한다. 따라서 기본적으로 4개의 파티션에 대한 정보 저장이 가능하다. 각 파티션의 첫 번째 바이트는 부팅 가능한 파티션인지를 나타낸다. 값이 0×80을 가지면 부팅 가능하고 0×00이면 부팅 가능한 파티션이 아니다. 만약 파티션이 부팅 가능하다면 해당 파티션의 시작 위치로 이동한다. 이동하게 되면 MBR과 유사한 형태의 첫 번째 섹터가 나온다. 이 섹터를 VBR(Volume Boot Record)라고 한다. 이때 부터는 운영체제에서 정의된 부팅 과정이 수행된다. 앞서 파티션이라고 언급했는데 볼륨 부트 레코드라고 하는 것에 다소 오해가 있을지 모르겠지만 일반적으로 볼륨 당 하나의 운영체제의 부팅이 가능하기 때문에 VBR이라고 한다. 이해가 가지 않는다면 볼륨과 파티션의 관계를 다시 한번 확인해보기 바란다.
지금부터는 Windows NT/2000/XP 에서의 부팅 과정에 대한 내용이다.
  1. VBR에 클러스터크기, MFT 위치, 전체 섹터 등 해당 볼륨의 추가적인 정보 외에도 부팅에 필요한 시스템 파일의 위치와 실행할 수 있는 코드가 포함되어 있다. 이러한 코드는 NT Loader(NTLDR)에 의해 로드되어 실행된다. 먼저 NTLDR은 부팅 옵션 및 부팅 메뉴가 정의되어 있는 BOOT.INI 파일을 로드한다. 이후 윈도우 이외의 다른 운영체제와 듀얼 부팅을 한다면 BOOTSEC.DOC 파일을 로드한다. 또한 SCSI 드라이브가 장착되어 있다면 해당 드라이브 실행을 위한 NTBOOTDD.SYS 파일을 로드한다.
  1. 이후 NTLDR은 NTDETECT.COM을 로드하여 설치된 하드웨어와 관련 구성 파일들을 찾아 실행하도록 한다.
  2. NTDETECT에 의해 수행된 결과는 NTOSKRNL.EXE(NT OS KERNEL)에 적용된다. 이후 NTOSKRNL.EXE은 커널(Kernel), HAL(Hardware Abstraction Layer), 시스템 레지스트리 정보를 로드한다.
  3. 다음으로 TCP/IP와 관련된 네트워크 드라이버들을 로드하고 로그온 화면을 보여준다. 사용자가 로그인에 성공하면 사용자에 대한 레지스트리 정보를 가져와 사용자 환경을 구성한다.
  4. 로그인 과정에서 Plug and Play에 의해 새로운 장치가 발견된다면 DRIVER.CAB 파일에서 관련 드라이버를 로드하여 해당 장치를 마운트 시킨다. 관련 드라이버가 없다면 드라이버 설정하는 다이얼로그를 보여주게 된다.
  5. 이러한 과정이 지나면 윈도우의 쉘인 explore.exe 가 실행된 화면을 보게 된다.
 

12단계 까지의 부팅 순서는 동일하지만 12단계 이후부터는 윈도우 운영체제에서도 각 버전에 따라 많은 차이를 보인다.


'Windows > 기타' 카테고리의 다른 글

윈도우 부팅순서  (0) 2017.12.12
윈도우 로그온 유형  (0) 2017.12.12
HTTP 통신시 서버에서 보내주는 응답코드  (0) 2017.12.12

  1. 로그온 유형 2 (Logon Type 2) : 대화식

    콘솔에서 키보드로 로그인 (LogMeIn, TeamView, KVM 포함)


  2. 로그온 유형 3 (Logon Type 3) : 네트워크

    네트워크를 통한 원격 로그인. (파일 공유, IIS 접속 등)


  3. 로그온 유형 4 (Logon Type 4) : 자동실행(스케줄)

    스케줄에 등록된 배치 작업 실행시 미리 설정된 계정 정보로 로그인


  4. 로그온 유형 5 (Logon Type 5) : 서비스

    서비스가 실행될때 미리 설정된 계정 정보로 로그인


  5. 로그온 유형 7 (Logon Type 7) : 잠금해제

    화면보호기 잠금 해제시


  6. 로그온 유형 8 (Logon Type 8) : 네트워크 (평문암호)

    유형 3과 비슷하지만 계정 정보를 평문으로 전송시 발생 (ASP 기본 암호설정)


  7. 로그온 유형 9 (Logon Type 9) : 새 자격

    실행(RunAs)에서 프로그램 실행시 /netonly 옵션을 줄때


  8. 로그온 유형 10 (Logon Type 10) : 원격 대화식

    터미널 서비스, 원격 접속, 원격지원으로 로그인


  9. 로그온 유형 11 (Logon Type 11) : 캐쉬된 대화식

    PC에 캐쉬로 저장된 암호로 자동 입력 로그인시


'Windows > 기타' 카테고리의 다른 글

윈도우 부팅순서  (0) 2017.12.12
윈도우 로그온 유형  (0) 2017.12.12
HTTP 통신시 서버에서 보내주는 응답코드  (0) 2017.12.12
오늘은 HTTP 통신 시, 서버에서 보내주는 응답 코드에 대해 간단히 정리해 보려고 합니다.
(개인적으로도 가끔 쉽게 찾아보려고 정리하는 겸 해서 게시물을 작성하였습니다.^^)
 
클라이언트(웹 브라우저)에서 서버에 어떠한 요청(리퀘스트, Request)를 하면 서버는 응답(리스폰스, Response)를 보내줍니다.
 
적절한 처리가 이루어져서 성공 응답과 함께 결과 값을 보내주기도 하고, 정상적인 처리가 되지 않은 경우에는 실패 응답과 함께 에러 정보를 보내주기도 합니다.
 
웹 개발자라면 기본적으로 서버가 정상 응답한 경우, 200 코드를 보내주는 것은 다들 알고 계실겁니다.
200을 포함하여 200번대 응답은 서버에서 정상적으로 처리하여 응답한 경우, 보내주는 값들입니다.
 
그리고 각 코드는 100번대 단위로 응답 코드가 구분되어 있습니다. (즉, 300번대끼리, 400번대끼리 유사한 형태의 응답 코드라는 의미입니다.)
이처럼 3자리 숫자의 첫번째 값(코드)만 보고도 어떤 종류의 응답인지 알 수 있는데요. 이 첫번째 값을 Response Class라고 합니다.
 
그럼 각 Response Code 에 따라서 어떤 응답을 나타내는지 한 번 볼까요?
 
 
 Response Class Code 
 Response Class 의미
 설명
 1
 Informational (정보)
 리퀘스트를 받고, 처리 중에 있음.
 2
 Success (성공)
 리퀘스트를 정상적으로 처리함.
 3
 Redirection (리디렉션)
 리퀘스트 완료를 위해 추가 동작이 필요함.
 4
 Client Error (클라이언트 오류)
 클라이언트 요청을 처리할 수 없어 오류 발생
 5
 Server Error (서버 오류)
 서버에서 처리를 하지 못하여 오류 발생
 
4번과 5번은 에러이기는 한데, 간단히 차이점을 설명하자면 4xx 에러는 클라이언트의 잘못된 요청으로 서버에서 처리하지 못한 것이고, 5xx 에러는 클라이언트의 요청은 문제가 없으나, 서버에서 처리중에 서버 문제로 인해 오류가 발생한 것이라고 생각하시면 됩니다.
 
 
아래는 자주 접하는 코드를 위주로 작성하였고, 더 상세한 정보는 아래 참고 자료의 위키피디아 링크를 참조해주세요.~
 
 





200 번대 응답(Response) : 성공(Success)
 
200
OK
* 요청 정상 처리.
204
No Content
* 요청 정상 처리하였지만, 돌려줄 리소스 없음.
* 응답에 어떠한 엔티티 바디(Entity Body)도 포함하지 않음.
* 서버에서 처리 후, 클라이언트에 정보를 보낼 필요가 없는 경우 사용. 
206
Partial Content
* Range가 지정된 요청인 경우, 지정된 범위만큼의 요청을 받았다는 것을 알려줌. 
 
 
 
* 300 번대 응답(Response) : 리디렉션(Redirection)
 
301
Moved Permanently
* 요청된 리소스에는 새로운 URI가 지정되어 있기 때문에, 이후로는 새 URI를 사용해야 한다는 것을 나타냄. (영구적인 URI 변경)
302
Found
* 요청된 리소스에는 새로운 URI가 지정되어 있기 때문에, 이후로는 새 URI를 사용해야 한 다는 것을 나타냄. 301과 유사하지만, 302는 일시적인 URI 이동) 
303
See Other
* 이 응답은 요청에 대한 리소스는 다른 URI에 있기 때문에 GET 메서드를 사용해서 얻어야 한다는 것을 나타냄. 302 코드와 같지만, 303은 리디렉션 위치를 GET 메서드를 통해 얻어야 한다고 명확하게 되어 있음. 
304
Not Modified
* 요청한 리소스가 마지막 요청 이후 변경된 적이 없기 때문에 기존 클라이언트의 로컬 캐시 리소스를 사용하도록 알려줌.
300번대로 분류되어 있지만, 리디렉션과는 관계없는 처리를 함.
307
Temporary Redirect
* 임시로 페이지를 리다이렉트 함.

 
* 400 번대 응답(Response) : 클라이언트 에러 (Client Error)
 
400
Bad Request
* 클라이언트의 요청 구문이 잘못됨.
* 브라우저는 이 응답을 200 OK 응답과 동일한 형태로 취급함.
401
Unauthorized
* 요청 처리를 위해 HTTP 인증(BASIC 인증, DIGEST 인증) 정보가 필요함을 알려줌.
접근 허용을 차단함. 최초 요청에는 인증 다이얼로그 표시하고, 두번째는 인증 실패 응답을 보냄. 
403
Forbidden
* 접근 금지 응답. Directory Listing 요청(서버 파일 디렉토리 목록 표시) 및 관리자 페이지 접근 등을 차단하는 경우의 응답. (파일 시스템 퍼미션 거부, 허가 되지 않은 IP 주소를 통한 액세스의 거부 등)
* 서버는 엔티티 바디에 접근 거부에 대한 이유를 명시하여 보낼 수 있음.
404
Not Found
* 클라이언트가 요청한 리소스가 서버에 없음
405
Mothod Not Allowed
* 허용되지 않는 HTTP 메서드를 사용함. 
 
 
 
* 500 번대 응답(Response) : 서버 에러 (Server Error)
 
500
Internal Server Error
* 서버에서 클라이언트 요청을 처리 중에 에러가 발생함.
503
Service Unavailable
* 서버가 일시적으로 요청을 처리할 수 없음.
* 서버가 과부하 상태이거나 점검중이므로 요청을 처리할 수 없음을 알려줌.
504
Gateway Timeout
* 서버를 통하는 게이트웨이에 문제가 발생하여 시간이 초과됨.
505
HTTP Version Not Supported
* 해당 HTTP 버전에서는 지원되지 않는 요청임을 알려줌.


출처: http://ooz.co.kr/260 [이러쿵저러쿵]


'Windows > 기타' 카테고리의 다른 글

윈도우 부팅순서  (0) 2017.12.12
윈도우 로그온 유형  (0) 2017.12.12
HTTP 통신시 서버에서 보내주는 응답코드  (0) 2017.12.12

+ Recent posts