라우터를 이용하여 인터넷을 통해 다른 네트워크에 있는 정보에 접근할 수 있습니다. 라우터는 서로 다른 네트워크를 연결하며 데이터가 목적지까지 갈 수 있는 최적의 길을 찾는 역할도 합니다. 시스코(Cisco)의 라우터와 그 운영체제인 IOS에 대하여 글을 작성합니다.

라우터의 핵심 기능

라우터는 OSI 7계층 중 3계층(네트워크 계층)에서 동작하는 장비입니다. 그 이름처럼, 라우터의 가장 중요한 임무는 ‘라우팅(Routing)'이며, 라우팅이란 데이터 패킷을 목적지까지 가장 효율적인 경로로 전송하는 과정을 말합니다.

라우터의 기능은 두 가지로 나눌 수 있습니다.

  1. 경로 결정 (Path Determination) : 라우터는 ‘라우팅 테이블’이라는 지도책을 가지고 있습니다. 수신된 패킷의 목적지 IP 주소를 이 지도책에서 찾고, 어떤 경로(인터페이스)로 내보내야 할지 결정합니다. 라우터는 라우팅 프로토콜을 통해 주변 라우터와 정보를 교환하며 이 지도책을 항상 최신 상태로 유지합니다.
  2. 패킷 전달 (Packet Forwarding) : 경로가 결정되면, 해당 경로에 연결된 인터페이스로 패킷을 전달하는 물리적인 동작을 수행합니다.

라우터의 내부 구조

라우터는 특정 목적을 위해 만들어진 컴퓨터로 일반 PC와 마찬가지로 CPU, 메모리, 운영체제 등을 갖추고 있습니다.

  • CPU (Central Processing Unit) : 라우터의 두뇌 역할을 하며 모든 연산을 처리합니다.
  • RAM (Random Access Memory) : 실행 중인 운영체제(IOS)와 설정 파일(running-config), 라우팅 테이블 등을 저장하는 휘발성 메모리입니다. 전원이 꺼지면 내용이 사라집니다.
  • ROM (Read Only Memory) : 라우터의 부팅을 돕는 기본적인 프로그램(POST 등)이 저장된 비휘발성 메모리입니다.
  • NVRAM (Non-Volatile RAM) : 전원이 꺼져도 내용이 유지되는 비휘발성 메모리로, 라우터의 시작 설정 파일(startup-config)을 저장하는 중요한 공간입니다.
  • 플래시 메모리 (Flash Memory) : 라우터의 운영체제인 IOS 이미지가 저장되는 공간입니다. PC의 하드디스크나 SSD와 유사한 역할을 합니다.

시스코 IOS

시스코 IOS(Internetwork Operating System)는 시스코의 스위치와 라우터에서 사용되는 전용 운영체제입니다. 사용자는 주로 CLI(Command-Line Interface)라는 텍스트 기반의 명령줄 환경을 통해 IOS와 상호작용하며 라우터를 설정하고 관리합니다.

 

IOS에는 보안과 기능 구분을 위해 두 가지 주요 실행 모드가 있습니다.

  • 사용자 실행 모드 (User EXEC Mode) : 라우터에 처음 접속했을 때의 기본 모드입니다. 프롬프트가 Router> 형태로 표시되며, 라우터의 상태를 확인하는 등 제한적인 모니터링 기능만 수행할 수 있으며, 설정을 변경하는 것은 불가능합니다.
  • 특권 실행 모드 (Privileged EXEC Mode) : 라우터의 모든 설정을 변경하고 관리할 수 있는 관리자 모드입니다. 사용자 모드에서 enable 명령어를 입력하여 진입하며, 프롬프트가 Router# 형태로 바뀝니다. 보안을 위하여 이 모드로 진입할 때 암호를 설정하는 것이 일반적입니다.

부팅 과정

라우터의 전원을 켜면 다음과 같은 순서로 초기 시동 과정이 진행됩니다.

  1. POST (Power-On Self Test) 수행: 가장 먼저 하드웨어를 점검하여 CPU, 메모리 등의 이상 유무를 확인합니다.
  2. IOS 소프트웨어 로드: 플래시 메모리에서 운영체제인 IOS 이미지를 찾아 RAM으로 로드합니다.
  3. 설정 파일 적용: NVRAM에 저장된 시작 설정 파일(startup-config)을 찾아 RAM으로 가져와 현재 실행 설정(running-config)으로 적용합니다. 만약 NVRAM에 설정 파일이 없다면, 라우터는 최소한의 설정을 돕는 대화식 ‘셋업 모드(Setup Mode)’로 진입합니다.

기본 명령어와 기능

라우터를 관리하기 위한 몇 가지 필수적인 명령어입니다.

  • 도움말 기능 : IOS는 도움말 기능을 제공합니다. 명령어 입력 중 ? 키를 누르면 해당 위치에서 사용할 수 있는 명령어 목록이나 옵션을 보여줍니다.
  • 설정 파일 확인
    • show running-config : 현재 RAM에서 실행 중인 설정을 보여줍니다. 여기서 변경한 내용은 재부팅 시 사라집니다.
    • show startup-config : NVRAM에 저장된 다음 부팅 시 적용될 설정을 보여줍니다. running-config의 변경 사항을 영구적으로 저장하려면 이 startup-config에 덮어써야 합니다.
  • 기타 유용한 기능
    • 명령어 자동 완성 : 명령어의 일부만 입력하고 Tab 키를 누르면 나머지 부분이 자동으로 완성됩니다.
    • 명령어 히스토리 : 위/아래 방향키를 사용하여 이전에 입력했던 명령어를 다시 불러올 수 있습니다.

정리

라우터는 단순한 연결 장치가 아닌 자체적인 운영체제를 가진 컴퓨터입니다. 시스코 라우터와 IOS의 기본 구조, 실행 모드, 그리고 부팅 과정을 이해하는 것은 네트워크 관리에 도움이 됩니다. 사용자 모드와 특권 모드의 차이, 그리고 running-config startup-config의 개념은 라우터를 다루는 데 있어 가장 기초적이면서도 중요한 지식입니다.

 
728x90

'네트워크' 카테고리의 다른 글

시스템 로그 관리 (Syslog)  (0) 2025.10.30
시스코 라우터의 설정과 관리  (0) 2025.10.27
이더넷 LAN이란?  (0) 2025.09.29
컴퓨터 네트워크  (0) 2025.09.28

1. 스택이란?

스택은 데이터를 쌓아 올리는 형태의 자료구조입니다. 가장 중요한 특징은 LIFO (Last-In, First-Out), 우리말로 '후입선출'이라는 점입니다. 즉, "가장 나중에 들어온 데이터가 가장 먼저 나간다"는 규칙을 따릅니다.

 

이러한 특징으로 인해 스택의 모든 데이터 입출력은 꼭대기인 top에서만 이루어집니다.

  • push : 스택의 top에 새로운 데이터를 쌓는(삽입하는) 작업입니다.
  • pop : 스택의 top에서 데이터를 꺼내는(삭제하는) 작업입니다.

2. 스택의 구현

스택은 두 가지 방식으로 구현할 수 있으며 장단점이 뚜렷합니다.

  1. 배열을 이용한 구현 (순차 스택)
    배열을 사용하면 구현이 매우 간단하고 직관적입니다. top이라는 변수가 배열의 마지막 데이터 인덱스를 가리키도록 관리하면 됩니다. 하지만 처음에 정해놓은 배열의 크기를 넘어서면 데이터를 더 이상 저장할 수 없는 '오버플로우'가 발생한다는 한계가 있습니다.
  2. 연결 리스트를 이용한 구현 (연결 스택)
    연결 리스트로 구현하면 필요할 때마다 새로운 노드를 만들어 연결하므로, 메모리가 허용하는 한 계속해서 데이터를 저장할 수 있습니다. 크기 제한이 없는 '동적 스택'을 만들 수 있다는 것이 가장 큰 장점입니다.

3. 스택의 활용

스택의 LIFO 규칙은 컴퓨터 과학의 여러 문제를 해결하기 위해 사용됩니다.

  • 웹 브라우저의 뒤로 가기 : 우리가 방문한 페이지 주소를 순서대로 스택에 push합니다. '뒤로 가기' 버튼을 누르면 스택에서 pop하여 바로 이전 페이지로 돌아갈 수 있습니다.
  • 프로그램의 함수 호출 (시스템 스택) : main 함수가 A 함수를, A 함수가 B 함수를 호출하면, 컴퓨터는 main, A, B의 실행 정보를 순서대로 시스템 스택에 쌓습니다. B 함수가 끝나면 pop하여 A로, A가 끝나면 pop하여 main으로 돌아옵니다. LIFO 구조가 아니면 프로그램 실행 순서가 엉망이 될 것입니다.
  • 수식 계산 및 괄호 검사 : { ( [ ] ) } 와 같은 복잡한 수식의 괄호 짝이 맞는지 검사할 때 스택을 유용하게 사용할 수 있습니다. 여는 괄호를 만나면 push, 닫는 괄호를 만나면 pop해서 짝이 맞는지 확인하는 간단한 로직으로 해결할 수 있습니다. 또한, 컴퓨터가 수식을 계산하기 쉬운 '후위 표기법'으로 변환하고 계산하는 과정에서도 스택은 핵심적인 역할을 수행합니다.
728x90

'자료구조' 카테고리의 다른 글

연결 자료구조와 연결 리스트(2)  (0) 2025.10.22
연결 자료구조와 연결 리스트(1)  (0) 2025.10.21
순차 자료구조와 선형리스트  (0) 2025.10.20
C언어 문법  (0) 2025.09.26
알고리즘 기초  (0) 2025.09.26

이중 연결 리스트(뒤로 가기가 가능한 리스트)

이중 연결 리스트는 양방향 연결을 지원하는 리스트입니다. 각 노드가 다음 노드를 가리키는 포인터(rlink, right link)뿐만 아니라, 이전 노드를 가리키는 포인터(llink, left link)까지 함께 가지고 있습니다.

 이 차이로 특정 노드를 기준으로 앞뒤를 자유롭게 탐색할 수 있어 단순 연결 리스트에서는 비효율적이었던 '특정 노드 삭제'나 '역순 탐색' 같은 작업이 매우 간단하고 빨라집니다.

  • 삽입 연산 : 새 노드를 중간에 삽입할 때, 새 노드와 그 앞뒤 노드 간의 관계를 모두 설정해야 합니다. 총 4개의 링크(포인터)를 조작하여 양방향 연결을 완성합니다.
  • 삭제 연산 : 중간의 노드를 삭제할 때, 삭제할 노드의 앞 노드와 뒤 노드가 서로를 직접 가리키도록 두 개의 링크만 수정해주면 됩니다.

원형 이중 연결 리스트

원형 이중 연결 리스트는 이중 연결 리스트의 양 끝을 서로 연결하여 순환하는 구조로 만들어집니다. 이 구조의 핵심은 더미 노드(Dummy Node)의 존재입니다.

 더미 노드는 실제 데이터를 저장하지 않는 가짜 노드로, 리스트의 시작점과 끝점 역할을 합니다. 모든 연산은 이 더미 노드를 기준으로 이루어집니다.

  • 더미 노드의 장점 : 리스트가 비어있을 때, 혹은 리스트의 맨 앞이나 맨 뒤에 데이터를 추가/삭제할 때 발생하는 까다로운 예외 상황을 처리할 필요가 없어집니다. 모든 삽입/삭제 연산이 '리스트 중간에서의 연산'과 동일한 로직으로 단순화되어 코드의 안정성과 가독성이 크게 향상됩니다.
728x90

'자료구조' 카테고리의 다른 글

스택 (Stack)  (0) 2025.10.23
연결 자료구조와 연결 리스트(1)  (0) 2025.10.21
순차 자료구조와 선형리스트  (0) 2025.10.20
C언어 문법  (0) 2025.09.26
알고리즘 기초  (0) 2025.09.26