반응형

 

이번 시간에는 C언어의 기초 중 기초인 변수, 자료형, 연산자에 대해 알아보고,

기본적인 입출력 방법과 함께 간단한 실습 예제를 통해 실력을 쌓아보겠습니다.

언어독학 시리즈 1편을 아직 안 보신 분은 아래 링크를 참고해 주세요!


"C언어를 배우는 것은 마치 산을 오르는 것과 같다.

정상에 오를 때까지는 힘들고 도전적이지만, 정상에 서면 전에 보지 못했던 경치와 가능성을 볼 수 있다."

 

우리는 어떤 프로그래밍 언어를 배워야 할까요?

각 언어의 특징을 모르시는 분들은

아래 글을 먼저 읽고 와주시기 바랍니다.

https://jdcyber.tistory.com/13

 

개발자 입문부터 풀스택까지 로드맵 (공부 순서를 어떻게 해야 하나요?)

앞서 2가지 프로그래밍 언어를 소개하는 글을 통해서 어떤 프로그래밍 언어를 배워야 하는지 그 프로그래밍 언어는 어떤 것에 특화가 되어있고 목표로 잡은 것이 어떤 것이냐에 따라 달라진다

jdcyber.tistory.com


변수와 자료형

프로그래밍에서 변수란 데이터를 저장하는 공간입니다.

C언어에서는 변수를 사용하기 전에 그 변수의 타입(자료형)을 명시해야 합니다.

자료형에는 여러 종류가 있는데, 대표적으로 int (정수), float (실수), char (문자) 등이 있습니다.

프로그래밍에서 변수를 생각해볼 때, 우리는 그것을 데이터를 보관할 수 있는 상자로 비유할 수 있습니다.
마치 집에서 다양한 물건들을 보관하기 위해 서로 다른 크기와 형태의 상자들을 사용하는 것처럼,
프로그래밍에서도 데이터를 저장하기 위해 변수라는 '상자'를 사용합니다.
C언어에서는 이 상자(변수)에 무엇을 담을지 결정하기 전에, 그 상자의 유형(자료형)을 명확히 해야 합니다.
이는 마치 우리가 물건을 담기 전에, 옷을 담을지, 책을 담을지, 신발을 담을지 상자의 용도를 정하는 것과 비슷합니다.
자료형이라는 것은, 단순히 상자의 크기나 모양을 정하는 것이 아니라,
그 안에 담길 '데이터의 종류'를 정하는 것입니다.
예를 들어, 'int'는 정수를 저장하는 상자로, 1, 2, 100과 같은 정수들을 보관할 때 사용합니다.
'float'는 소수점이 있는 숫자, 예를 들어 3.14나 0.5 같은 실수를 저장할 때 쓰이는 상자입니다.
'char'는 문자를 저장할 때 사용하는 상자로, 'A', 'b', '3' 같은 단일 문자를 보관하는 데 적합합니다.

이처럼 프로그래밍에서 변수와 자료형을 사용하는 것은,
우리가 일상에서 다양한 물건들을 보관하고 관리하기 위해 적절한 상자를 선택하는 과정과 매우 유사합니다.

 


변수란?
변수는 데이터를 저장하기 위한 공간의 이름입니다.
프로그램에서는 이 변수를 통해 데이터를 저장하고, 저장된 데이터를 추후에 참조하거나 변경할 수 있습니다.
간단히 말해서, 변수는 데이터를 담는 컨테이너라고 할 수 있습니다.
자료형이란?
자료형(Data Type)은 변수에 저장될 데이터의 종류를 정의합니다.
자료형에는 크게 기본 자료형과 파생 자료형이 있으며, 기본 자료형에는 정수형, 실수형, 문자형 등이 포함됩니다.
자료형은 프로그램이 효율적으로 데이터를 처리할 수 있도록 도와주며, 메모리 사용을 최적화하는 역할도 합니다.

 

변수 선언
변수 선언이란 프로그램에게 변수를 사용하기 위한 준비를 지시하는 것입니다. 변수 선언 시에는 변수의 이름과 자료형을 명시해야 합니다. 이 과정에서 변수에 저장될 데이터의 유형을 결정하게 되며, 이를 통해 컴파일러는 해당 변수에 메모리를 할당합니다.

 

변수 선언 방법

정수형 (int): 정수 값을 저장하는 데 사용됩니다. 예: int age = 30;
실수형 (float, double): 소수점을 포함하는 값을 저장하는 데 사용됩니다. 예: float salary = 4567.89;
문자형 (char): 단일 문자를 저장하는 데 사용됩니다. 예: char grade = 'A';

 

변수 선언 예제

int count; // 정수형 변수 count 선언
float temperature; // 실수형 변수 temperature 선언
char initial; // 문자형 변수 initial 선언

 

변수를 선언하는 동시에 초기값을 할당할 수도 있습니다. 초기값을 할당하는 것을 초기화라고 합니다.

int count = 10; // 정수형 변수 count를 선언하고 10으로 초기화
float temperature = 36.5; // 실수형 변수 temperature를 선언하고 36.5로 초기화
char initial = 'J'; // 문자형 변수 initial을 선언하고 'J'로 초기화

 

변수 이름 규칙

변수 이름을 지을 때는 다음과 같은 규칙을 따라야 합니다:

문자, 숫자, 밑줄 문자(_)를 포함할 수 있지만, 숫자로 시작할 수는 없습니다.

대소문자를 구분합니다. 예를 들어, age와 Age는 서로 다른 변수입니다.

예약어(키워드)를 사용할 수 없습니다. 예: int, return 등


연산자

연산자는 데이터를 가공하기 위한 기호입니다. C언어에서는 다양한 연산자를 제공하는데,

이를 적절히 활용하여 데이터를 처리할 수 있습니다.

대표적인 연산자로는 산술 연산자(+, -, *, /, %), 관계 연산자(==, !=, >, <, >=, <=),

논리 연산자(&&, ||, !) 등이 있습니다.


아래 예제들은 각각의 연산자가 어떻게 작동하는지 기본적인 이해를 돕기 위한 것입니다.

프로그래밍을 하면서 이러한 연산자들을 조합하고 응용하여 다양한 문제를 해결할 수 있습니다.

 

산술 연산자

산술 연산자는 수학적 계산을 위해 사용됩니다.

가장 기본적인 산술 연산자에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 나머지(%)가 있습니다.

#include <stdio.h>

int main() {
    int a = 10, b = 3;
    int result;

    result = a + b;
    printf("a + b = %d\n", result);

    result = a - b;
    printf("a - b = %d\n", result);

    result = a * b;
    printf("a * b = %d\n", result);

    result = a / b;
    printf("a / b = %d\n", result);

관계 연산자

관계 연산자는 두 값을 비교하는 데 사용됩니다.

여기에는 같음(==), 다름(!=), 크다(>), 작다(<), 크거나 같다(>=), 작거나 같다(<=) 등이 있습니다.

#include <stdio.h>

int main() {
    int a = 5, b = 10;

    printf("a == b: %d\n", a == b);
    printf("a != b: %d\n", a != b);
    printf("a > b: %d\n", a > b);
    printf("a < b: %d\n", a < b);
    printf("a >= b: %d\n", a >= b);
    printf("a <= b: %d\n", a <= b);

    return 0;
}

 


논리 연산자

논리 연산자는 논리적인 조합을 평가하는 데 사용됩니다.

주요 논리 연산자로는 논리적 AND(&&), 논리적 OR(||), 논리적 NOT(!)이 있습니다.

#include <stdio.h>

int main() {
    int a = 1, b = 0;

    printf("a && b: %d\n", a && b);
    printf("a || b: %d\n", a || b);
    printf("!a: %d\n", !a);
    printf("!b: %d\n", !b);

    return 0;
}

기본 입출력

C언어에서는 printf와 scanf 함수를 통해 기본적인 입출력을 수행할 수 있습니다.

printf 함수는 데이터를 화면에 출력하고, scanf 함수는 사용자로부터 입력을 받습니다.

#include <stdio.h>

int main() {
    int number;
    printf("숫자를 입력하세요: ");
    scanf("%d", &number); // 사용자로부터 정수 입력 받기
    printf("입력한 숫자는 %d입니다.\n", number);
    return 0;
}

실습 예제: 기본적인 계산기 만들기
이제 배운 내용을 토대로 간단한 계산기를 만들어 보겠습니다. 이 계산기는 두 개의 정수를 입력받아 더하기, 빼기, 곱하기, 나누기의 결과를 보여줍니다.
#include <stdio.h>

int main() {
    int num1, num2;
    printf("첫 번째 숫자를 입력하세요: ");
    scanf("%d", &num1);
    printf("두 번째 숫자를 입력하세요: ");
    scanf("%d", &num2);

    printf("%d + %d = %d\n", num1, num2, num1 + num2);
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
    printf("%d * %d = %d\n", num1, num2, num1 * num2);
    printf("%d / %d = %d\n", num1, num2, num1 / num2);

    return 0;
}

 

위 예제를 통해 변수, 자료형, 연산자, 기본 입출력을 실습해 보았습니다.

프로그래밍은 배운 내용을 직접 코딩하며 익히는 것이 가장 중요합니다.

다양한 예제를 통해 지속적으로 연습해 보세요.


오늘 우리는 C언어의 기초적인 개념들을 함께 배워보았습니다.

우선, 변수와 자료형의 정의와 중요성을 이해하고,

다양한 자료형(int, float, char 등)을 사용해 변수를 선언하는 방법을 배웠습니다.

이러한 기초를 바탕으로, 프로그램 내에서 데이터를 저장하고 조작하는 방법을 익혔습니다.

또한, 산술 연산자, 관계 연산자, 논리 연산자 등

다양한 연산자들을 통해 데이터를 계산하고 비교하는 방법에 대해서도 살펴보았습니다.

각 연산자의 사용법과 예제를 통해, 프로그램 내에서의 데이터 처리와

조건문 작성에 필요한 기본적인 논리를 구축할 수 있는 기반을 마련했습니다.

 

프로그래밍 학습은 마치 건물을 짓는 것과 같습니다.

오늘 우리가 다룬 변수와 자료형, 연산자는 튼튼한 기초를 마련하는 첫걸음입니다.

이 기초 위에 더 복잡한 로직을 구축하고, 다양한 프로그래밍 문제를 해결하는 능력을 키워갈 수 있을 것입니다.

이해가 바로 되지 않는 부분이 있다면, 걱정하지 마시고 여러 번 반복해서 연습해 보세요.

프로그래밍은 이론적인 지식보다 실제로 코드를 작성해 보며 배우는 것이 훨씬 효과적입니다.

오늘 배운 내용을 잘 정리해 보시고,

앞으로 배울 조건문, 반복문 등 더 다양한 개념들에도 도전해 보시기 바랍니다.

항상 기억하세요, 프로그래밍 능력은 하루아침에 갑자기 향상되지 않습니다.

꾸준한 학습과 연습을 통해 점차 발전해 나갈 수 있습니다.

오늘 배운 기초가 여러분이 더 큰 프로그래밍 세계로 나아가는 데 있어 든든한 발판이 되기를 바랍니다.

Happy coding!
C언어 독학 #3 (조건문과 반복문, 조건문과 반복문을 이용한 실습 예제)

 

C언어 독학 #3 (조건문과 반복문, 조건문과 반복문을 이용한 실습 예제)

이번 강의에서는 C언어의 핵심 구조 중 하나인 조건문과 반복문에 대해 배워보겠습니다.이미 우리는 이전 글에서 변수, 자료형, 연산자에 대해 배웠으며,이러한 지식을 바탕으로 프로그램의 흐

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

전 회차 파이썬 독학 글을 못 보신 분들은

아래 파이썬 독학 시리즈 링크를 살펴보고 와주세요!

파이썬 독학 #1 파이썬이란? (설치, 특징)

파이썬 독학 #2 명령어 (vscode 설치, 기본 명령어, Hello world)


 

파이썬 독학 #1과 #2 글에서는 파이썬의 기초 설치부터

IDLE, IDE의 개념, VSCode 설치 및 기본 세팅까지 다루었습니다.

#3에서는 자료형의 기초, 사칙 연산, 인덱싱, 슬라이싱, 포맷팅, 변수 등을 소개하며

프로그래밍의 기본적인 개념을 다루었습니다.

자료형을 알고 있다면
그 언어의 절반을 터득한 것

 

파이썬 독학 세 번째 시간입니다.

프로그래밍 언어를 배우시다 보면

우리가 자연스럽게 이해하고 있던

숫자의 개념과 문자의 개념이 혼동이 오기 시작합니다.

'1'+'1'이 뭔지 알아?
"2"
"아니? 11이야."

이게 말이 되기 시작하거든요

작은따옴표를 써서 '1'+'1'을 문자로 만들어버리면

위의 답은 11이 되게 됩니다.

따옴표로 글자와 숫자를 나눌 수 있는데요

이것이 프로그래밍 형식이며 우리는 이걸 자료형이라고 부릅니다.

(지금은 아 이런 게 있구나~ 정도로 아래 내용을 후루룩 읽고 넘어가 주세요)


자료형

자료형은 타입과 구조로 나눌 있고 각각의 개념을 잘게 나눌 있습니다

Type
숫자
정수
실수
컴퓨터 지수
진수(2,8,10,16 ..)
문자열
인덱싱
슬라이싱
포메팅
 
불 (참&거짓)
       
구조
변수
       
리스트
       
튜플
       
딕셔너리
       
집합
       

숫자

a = 1
print(a)
1

파이썬에서 숫자를 쓸 때는

a =1이라고 지정해 놓고 a를 출력하면

1이라고 나오게 됩니다

이걸 이제 정수, 실수, 컴퓨터 지수, 2진수 8진수, 10진수, 16진수 등으로 나눌 수 있는데요

천천히 살펴보도록 하겠습니다.

(위에서 말씀드렸지만 한 번 더 말씀드리면

지금은 이런 있구나~ 정도로 넘어가셔도 됩니다)


정수형 (int)

(1,2, -1)

1과 2 -1 등 소수점 없는 수 정수

a = 1 <- 자료형이 무엇인지 궁금할때는
print(type(a)) <- type
class int <- int = 정수형

실수 (float)

(1.23, -13.42)

소수점이 있는 실수

a = 1.23 <- 자료형이 무엇인지 궁금할때는
print(type(a)) <- type
class float <- float = 실수

컴퓨터 지수 표현 방식

(4.24e10)

가끔 계산기에 너무 많은 값이 입력되면 출력되는 모습 컴퓨터 지수

a = 4.24e10 <- 4.24 x 10의 10승
print(type(a)) <- type
class float <- float = 실수
print(a) <- 값
42400000000.0 <-

8진수와 16진수 2진수 10진수 등은

따로 여기서 다시 설명은 하지 않겠습니다.

대신 아래 글을 읽으시면 개념 잡기 쉬우실 거예요!

https://jdcyber.tistory.com/29

 

2진수와 10진수 (2진법 10진법) (쉬운 설명, 개념, 제곱, 승)

일상생활을 할 때는 필요 없지만 컴퓨터를 배우거나 네트워크 리눅스 파이썬 개발 등을 하시게 되면컴퓨터가 사용하는 2진수를 배워야 하는데요우리가 사용하는 iP 주소는 192.168.123.132 이러한

jdcyber.tistory.com


사칙 연산

파이썬으로 사칙연산도 가능합니다

아래 쭉 나열해서 보여드릴게요


더하기(+)

>>> a = 3
>>> b = 4
print(a+b)
7

 

곱하기 (*)

>>> a = 3
>>> b = 4
print(a*b)
12

나누기 (/)

>>> a = 3
>>> b = 4
print(a/b)
0.75

몫 (//)

>>> a = 3
>>> b = 4
print(a//b)
0

나머지 (%)

>>> a = 3
>>> b = 4
print(a%b)
3

제곱 (**)

>>> a = 3
>>> b = 4
print(a**b)
81

문자열 (String)

문자열을 자료형(str)으로 만드는 4가지 방법을 알아보겠습니다

>>> "Hello JD" <- "끈 따옴표"
>>> 'How are you JD' <- '작은 따옴표'
>>> """Let's start''' <- """큰 따옴표 3개"""
>>> '''2023 it's comming''' <- '''작은 따옴표 3개'''
Type str

왜 이렇게 쓸데없어 보이게 많이 만들었을까요?

이유가 있습니다.

'That's my pen'

이런 문장을 쓸 때 가운데 (') 하나가 더 들어갔죠?

이걸 파이썬에서는 'That'이라는 문자열 자료형으로 인식합니다.

뒤에는 알아듣지 못하고 프로그래밍 구문의 오류인

Syntax error로 출력하게 됩니다.

이럴 땐 큰따옴표를 사용하면 됩니다

"That's my pen"

혹은 'That\'s my pen'으로 가운데 (\) 역슬래쉬를 넣어

문자열 따옴표라고 파이썬에서 인식하고 사용할 수 있습니다.


줄 바꾸기

이걸 이용해서 줄 바꿈을 할 수 있습니다

원래 파이썬은 줄 단위로 인식하기 때문에

줄 바꿈을 따옴표 없이 하게 되면 오류를 출력하게 되는데

이때는 아래 예시처럼 할 수 있습니다

>>> hi/nthere
hi
there

문자열 + 사칙연산

아래 몇 가지 예시만 보여드리고 빠르게 넘어가도록 하겠습니다

>>> a = "hi"
>>> b = "there"
print(a + b)
hi there

print(a*10)
hihihihihihihihihihi

인덱싱

저장된 문자열의 문자마다 번호를 매겨 표현할 있습니다.

>>> a = "Life is too short, you need python"
print(a[0])
L
print(a[1])
i
print(a[2])
f
print(a[-1])
n
print(a[-2])
o

"Life is too short, you need python"

맨 앞 L 알파벳부터 0부터 순차적으로 올라가서

0 = L, 1=i 2=f 가 되는 것이죠

그리고 -를 쓰면 반대로 내림차순이 되어

-1 = n, -2 = o 가 됩니다.


슬라이싱

>>> a = "Life is too short, you need python"
print(a[0:4]) <- 처음부터 4번째까지
Life
print(a[0:8]) <- 처음부터 8번째까지
Life is
print(a[8:]) <- 8번째부터 끝까지
too short, you need python
print(a[::2]) <- 처음부터 끝까지 간격만 2
Lf stosot o edpto

a[x:x:x]

첫 번째 x는 이상 두 번째 x는 미만 마지막 x는 간격인데

기본 default 값으로 1이 들어가 있고 생략 가능합니다

위의 설명과 소스 예제를 보면서 이해해 주시면 좋을 것 같습니다

포메팅

b = "I eat " + str(3) + " apples" <- 이렇게 쓰기 귀찮으니까
a = "I eat % apples." %3 <- 이렇게 쓰자

포메팅을 사용하면 "따옴표를 적게 있고 조금 쉽고 편하게 사용할 있습니다.

number = 10 <- number라는 문자열에 10이라는 유동적인 규칙 부여
day = "three" <- day라는 문자열에 three이라는 유동적인 규칙 부여
a = "I ate %d apples. so I was sick for %s days" % (number, day) <- 규칙을 원하든 대로 바꿔서 문장 완성
print(b)]
I ate 10 apples. so I was sick for three days

number와 day를 각각 10과 three에 매핑시켜서 문장을 만들면

새로 다 문장을 쓸 필요 없이 사용할 수 있습니다

여기서 % s는 문자열을 쓸 때 쓰는 것이며

% d는 정수 등 규칙이 있지만

거의 대부분 % s를 쓰면 문자열로 바꿔서 들어가기 때문에

지금은 % s만 알고 넘어가셔도 좋습니다

변수

a = 3
a = a + 1
print(a)
4

 

변수는 어떠한 값을 이거라고 지정해 놓는 겁니다

a가 3이라고 할 때, a = a+1

위와 같은 변수를 저장해 놓는다면

4(3+1)라는 값을 a에 넣는다라고 생각해 주시면 됩니다


예제 연습

숫자와 사칙연산 실습

# 숫자와 사칙연산 실습
a = 5
b = 2

# 더하기
print("더하기: ", a + b)

# 빼기
print("빼기: ", a - b)

# 곱하기
print("곱하기: ", a * b)

# 나누기
print("나누기: ", a / b)

# 몫
print("몫: ", a // b)

# 나머지
print("나머지: ", a % b)

# 제곱
print("제곱: ", a ** b)

문자열 인덱싱과 슬라이싱 실습

# 문자열 인덱싱과 슬라이싱 실습
s = "Python Programming is fun!"

# 인덱싱
print("s의 0번째 문자: ", s[0])  # P
print("s의 마지막 문자: ", s[-1])  # !

# 슬라이싱
print("s의 처음부터 6번째까지: ", s[:6])  # Python
print("s의 7번째부터 끝까지: ", s[7:])  # Programming is fun!

리스트 실습

# 리스트 실습
my_list = [1, 2, 3, 4, 5]

# 리스트에 요소 추가
my_list.append(6)
print("요소 추가 후: ", my_list)

# 리스트에서 요소 제거
my_list.remove(2)
print("요소 제거 후: ", my_list)

# 리스트 슬라이싱
print("리스트의 1부터 3까지의 요소: ", my_list[1:4])

딕셔너리 실습

# 딕셔너리 실습
my_dict = {'name': 'John', 'age': 30, 'job': 'Developer'}

# 딕셔너리에 요소 추가
my_dict['city'] = 'New York'
print("요소 추가 후: ", my_dict)

# 딕셔너리에서 요소 제거
del my_dict['age']
print("요소 제거 후: ", my_dict)

# 딕셔너리의 키로 값 접근
print("name 키로 접근: ", my_dict['name'])

조건문 실습 (추가 예제)

# 조건문 실습
age = 18

if age < 13:
    print("어린이")
elif age < 20:
    print("청소년")
else:
    print("성인")

너무 내용이 길어지는 관계로

파이썬 독학 #3은 여기서 마치고

파이썬 독학 #4에서 나머지 부분을

마무리하도록 하겠습니다.

파이썬 독학 #4에서 만나요!

https://jdcyber.tistory.com/60

 

파이썬 독학 완전 기초부터 마스터까지 #4 기초 개념을 활용한 간단한 프로그램 작성하기 (응용)

지금까지 우리는 파이썬의 기본적인 설치 방법, 개발 환경 설정, 기본 명령어와 자료형, <span ..

jdcyber.tistory.com

 

 

궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

Kali Linux를 설치하고 작업을 하고 있는데

저처럼 어느 날 갑자기 비밀번호가 틀리나고 나오거나

아니면 Root 패스워드를 까먹으셨을 때

아래 방법을 통해 찾아보시기 바랍니다.

아래 내용을 진행하시기 전에

항목을 잘못 선택할 수 있으므로

Snapshot을 찍어놓고

진행하시길 추천드립니다.

 

칼리 리눅스에대해 궁금하신 분들은 아래 글을 참고해주세요

https://jdcyber.tistory.com/7

 

버츄얼박스 (VirtualBox)와 칼리 리눅스 (Kali Linux)를 이용한 모의해킹 실습 환경 구축 가이드

오늘은 모의해킹 실습 환경을 구축하는 방법에 대해 소개하려고 합니다. 이번 글에서는 VirtualBox와 칼리 리눅스(Kali Linux)를 사용합니다. 1. VirtualBox 설치 먼저, VirtualBox를 설치해야 합니다. 우리가

jdcyber.tistory.com


Kali Linux Root 패스워드 복구 방법

Kali Linux를 오른쪽 클릭 Power 탭에 보시면

RestartGuest 항목을 클릭합니다.

부팅시키면 위와 같이 GNU GRUB 화면이 나타납니다

혹시 안 나타나신다면 재부팅 중 e 키를 눌러보세요

여기서 키보드를 이용하여 두 번째 메뉴인

Advanced optinos for Kali GNU/Linux로

이동 후 선택해 줍니다

 

복구 모드최신 버전 (recovery mode)로 이동하고

e 키를 눌러 Command 창을 열어줍니다.

최신 버전이 무엇인지 모르고

리커버리 모드도 모르겠다

너무 여러 가지가 많이 나오는데

이름이 잘려서 안 보인다 하시는 분들은

창을 크게 늘려 이름을 꼭 확인해 보세요

 

위와 같이 Command 창이 열리면

키보드 커서를 이용하여 아래로 쭉 내려서

linux/boot/ 행을 찾아주세요

 

linux/boot/ 행 부분

 rw single initrd=/install/gtk/initrd.gz init=/bin/b\ash
 

위와 같은 내용을 추가 입력해 주세요

그리고 Ctrl + x를 눌러 재 부팅을 시켜주세요

 

 

재부팅이 완료되면 터미널을 확인할 수 있습니다.

만약 터미널이 나타나지 않는다면,

정상적으로 부팅이 이루어지지 않은 것입니다.

다시 한번 재부팅을 해보시고 먹통이 되었다면

위에서 선택을 잘못하신 것이니

미리 찍어두었던 스냅샷을 이용하여 돌아가시고

1번부터 차근차근해보시기 바랍니다.

root@(none) :/# 가 나오게 된다면

이제 root 패스워드를 바꾸실 수 있습니다.

passwd 명령어로 Root 패스워드를 변경해 줍니다.

passwd로 설정하는 비밀번호는

2번 똑같이 입력해 주시면 됩니다.

패스워드 변경하고 다시 한번 재부팅 진행하면

변경된 패스워드로 칼리에 접속이 되는 걸

확인하실 수 있으실 겁니다.


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

이웃 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

ACL 접근 제어 목록

(Access Control List)

허가되지 않은 이용자가 라우터나 네트워크의

특정 자원에 접근하려고 하는 것을 차단하는 기능입니다.

첫 번째 두 번째 실습에 이어 세 번째 시간입니다.

 

이 실습에서는 ACL (Access Control List)을 사용하여 특정 네트워크 트래픽을 필터링하는 방법을 다룹니다.

목표는 불필요하거나 위험한 접근을 제한하여 네트워크 보안을 강화함에 있습니다.

ACL에 대한 자세한 개념은

아래 글을 참고해 주세요!

https://jdcyber.tistory.com/17

 

ACL (Access Control List) 이란? ACL 구성 가이드: 네트워크 보안 강화를 위한 필수 지침 (쉬운 설명, 예

ACL (Access Control List) 정의 및 개념 ACL (Access Control List) 은 네트워크 보안의 핵심 구성 요소로, 네트워크 장비에서 데이터 패킷의 흐름을 제어하는 데 사용되는 일련의 지침입니다. 이 규칙들은 특

jdcyber.tistory.com

 

 

(패킷 트레이서 예제 파일은 본 글에 첨부해 놨습니다.)

1번 조건

R1, R2, R3
각각의 내부 네트워크에서는 www.ilbe.com, www.toto24.com으로 접근되지 않도록 차단하여라.
 

2번 조건

R1
13.13.20.0/24, 13.13.30.0/24 네트워크만 '13.13.10.100' 웹, FTP 접근이 가능하도록 하여라.
'13.13.10.100'으로 접근하는 모든 ICMP는 차단하여라.
단, '13.13.10.100'은 '13.13.20.0/24', '13.13.30.0/24'로 Ping이 되어야 한다.
 

명령어

conf t
(각각의 내부 네트워크에서는 www.ilbe.com, www.toto24.com으로 접근되지 않도록 차단)
access-list 110 deny ip 13.13.10.0 0.0.255.255 host 141.101.121.208
access-list 110 deny ip 13.13.10.0 0.0.255.255 host 81.150.200.78
access-list 110 permit ip any any
!
int fa0/0
ip access -group 110 int
!
(13.13.20.0/24, 13.13.30.0/24 네트워크만 '13.13.10.100' 웹, FTP 접근이 가능도록 설정)
('13.13.10.100'으로 접근하는 모든 ICMP는 차단 단, '13.13.10.100'은 '13.13.20.0/24', '13.13.30.0/24'로 Ping 가능하도록 설정)
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 eq 80
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 eq 443
access-list 120 permit tcp 13.13.20.0 0.0.0.255 host 13.13.10.100 range 20 21
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 eq 80
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 eq 443
access-list 120 permit tcp 13.13.30.0 0.0.0.255 host 13.13.10.100 range 20 21
access-list 120 deny tcp any host 13.13.10.100 eq80
access-list 120 deny tcp any host 13.13.10.100 eq443
access-list 120 deny tcp any host 13.13.10.100 range 20 21
access-list 120 permit icmp 13.13.20.0 0.0.0.255 host 13.13.10.100 echo-reply
access-list 120 permit icmp 13.13.30.0 0.0.0.255 host 13.13.10.100 echo-reply
access-list 120 deny icmp any host 13.13.10.100
access-list 120 permit ip any any
!
int s0/0/0
ip access-group 120 in
 

확인

show ip access-lists

신중한 IP 주소 및 서비스 선정
  • 정밀한 대상 지정: ACL을 설정할 때, 차단하거나 허용해야 하는 특정 IP 주소, 네트워크, 또는 서비스(웹, FTP, ICMP 등)를 명확히 식별해야 합니다. 이는 불필요한 접근을 정확히 차단하고, 필요한 트래픽은 원활하게 통과시키는 데 중요합니다.
최소 권한 원칙 적용
  • 필요한 최소한의 접근만 허용: 네트워크 보안에서는 항상 최소 권한 원칙(Principle of Least Privilege)을 적용해야 합니다. 이는 사용자나 시스템이 자신의 업무를 수행하는 데 필요한 최소한의 권한만을 가지도록 하는 것입니다. ACL 설정 시, 이 원칙에 따라 필수적인 접근만 허용하고 나머지는 기본적으로 차단하는 방식을 채택해야 합니다.
서비스별 포트 번호 인식
  • 적절한 포트 사용: 웹(HTTP, HTTPS)이나 FTP 서비스에 대한 접근을 허용하거나 차단할 때, 각 서비스의 표준 포트 번호(예: HTTP는 80, HTTPS는 443, FTP는 20과 21)를 정확히 지정해야 합니다. 잘못된 포트 번호 설정은 의도하지 않은 서비스 접근을 허용하거나 차단할 수 있습니다.
정책 구현 후 검증
  • 설정 후 검증: ACL을 구성한 후에는 show ip access-lists 명령어를 사용하여 설정된 규칙을 검토하고, 실제 네트워크 트래픽이 의도한 대로 필터링되는지 확인해야 합니다. 또한, 허용된 접근과 차단된 접근 모두를 테스트하여 ACL이 정상적으로 작동하는지 검증해야 합니다.
문서화 및 지속적 관리
  • 구성 문서화: ACL 설정을 문서화하여 관리하면 나중에 네트워크 변경이나 문제 해결 시 큰 도움이 됩니다. 구성 변경 사항을 기록해 두면, 미래의 보안 감사나 네트워크 개선 작업에 유용한 참고 자료가 됩니다.
  • 지속적인 업데이트와 관리: 네트워크 환경은 지속적으로 변화하므로, ACL도 새로운 보안 위협, 변경된 네트워크 구성, 새로운 서비스 요구 사항에 맞게 주기적으로 검토하고 업데이트해야 합니다.

ACL 실습을 진행할 때, 위의 지침들을 철저히 따르는 것이 중요합니다.

이를 통해 네트워크 보안을 강화하고, 불필요한 접근을 효과적으로 차단할 수 있습니다.

또한, 실습 과정에서 발생할 수 있는 다양한 문제를 예방하고, 보안 정책을 효과적으로 구현할 수 있습니다.


 

패킷 트레이서 예제 파일


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

유니캐스트 (Unicast),

멀티캐스트 (Multicast),

브로드캐스트 (Broadcast)

이름이 참 비슷해 보이는 네트워크 통신 방식인

위 3가지에 대해 아주 쉽게 알아보겠습니다.

세 가지 모두 실생활에서 많이 쓰이는 통신 방식이니 차이점에 집중하면서 봐주세요!

비유를 통해 쉽게 설명해드릴 테니 잘 따라와 주세요!!

 

유니캐스트 (Unicast)

 

유니캐스트통상적으로 1:1 통신을 말합니다.

편지를 보낼 때 보내는 이와 받는 이를 쓰고

우체통에 넣잖아요?

그런 것처럼 보내는 출발지 주소와 받는 목적지 주소를 정확히 입력하여,

보내고 받는 네트워크 통신 방식입니다.

유니캐스트 방식으로 데이터를 전송하게 되면

같은 네트워크에 있는 모든 장치가 데이터 속에 해당 MAC 주소를

자신의 MAC 주소와 비교하고 같으면 CPU로 전송하고

같지 않다면 CPU에 전송하지 않고 버리는 방식으로 데이터를 처리하게 됩니다.

 

유니캐스트 통신의 경우, 정확한 MAC/IP 주소 관리가 중요합니다.

주소 정보의 오류 없이 안전하게 관리되어야 한다는 점을 명심해야 합니다.

(맥 주소, iP 주소에 대해 궁금하시다면

아래 글 참고해 주세요!)

https://jdcyber.tistory.com/26

 

MAC 주소? iP 주소? 무슨 차이지? (쉬운 설명, 개념, 정의)

Mac 주소? IP 주소? iP 주소, MAC 주소.. 저희가 IT 업계로 들어오거나 인터넷 통신 혹은 게임을 할 때에도 간간히 들어봤던 이름일 겁니다. 여러분은 무엇인지 둘의 차이는 무엇인지 알고 계신가요?

jdcyber.tistory.com

Ex) 맥 주소가 정확히 일치할 경우에만 CPU로 전송하여 데이터를 처리하기 때문에 컴퓨터 성능 저하가 없습니다!


브로드캐스트 (Broadcast)

 

브로드캐스트는 네트워크에 연결되어 있는

모든 시스템에게 데이터를 보내는 방식을 말합니다.

브로드캐스트 방식의 경우 브로드 캐스트용 주소가 미리 정해져있고,

해당 주소로 데이터를 뿌려주고 해당 주소에 속해 있는 유저는 데이터를 모두 받아 CPU로 전송합니다.

유니캐스트에서는 주소가 다르다면 CPU로 전송하지 않고 버렸는데 여기서는 모두 전송하고 있죠?

마을 이장님이 동네에 알림을 보내는 방식이라고 생각하시면 됩니다.

동네에서 이장님 안내를 듣고 싶지 않다고 막을 수 없잖아요?

나한테 보내는 알림이 아니고

김가네 마을회관으로 오세요를 마이크로 방송해도

우리는 해당되지 않지만 들을 수밖에 없듯이,

브로드캐스트는 이러한 방식으로 네트워크를 전송합니다.

그런데 왜 자칫 비효율적이라고 생각되는 이러한 방식이 사용될까요?

이건 바로 최초로 통신을 할 때는

서로가 서로를 모르기 때문에 전송할 수 없는데,

교장선생님이 단상에서 어 너 3번째 줄 4번째

이름이 뭐니라고 물어보고 홍길동이요라고 하면

아 2학년 4반 홍길동 어머니 모시고 와 이런 식으로

통성명 후 개인적인 통신이 가능하잖아요?

이러한 방식으로 컴퓨터 네트워크에서도

혹시 192.168.2.224라는 아이피 가진 컴퓨터 누구야?라고 브로드캐스트를 뿌리고

한 컴퓨터가 어 나야! 라고 하는 순간

둘의 통신이 이루어지기 시작합니다.

 

즉 브로드캐스트 방식은 통신하고자 하는 시스템의

MAC 주소를 알지 못하는 경우,

네트워크에 있는 모든 서버에게 정보를 알려야 할 때,

라우터끼리 정보를 교환하거나 새로운 라우터를 찾을 때, 브로드캐스팅 방식을 사용합니다.

 

브로드캐스트 사용 시 브로드캐스트 스톰을 방지하기 위한 조치가 필요합니다.

네트워크 설계에서 브로드캐스트 도메인을 적절히 제한하는 것이 중요합니다

(패킷에 대해 궁금하시다면 아래 글을 참고해 주세요)

https://jdcyber.tistory.com/12

 

패킷(Packet)이란? (쉬운 설명, 구조, 헤더, 인캡슐레이션, 핑, Ping)

패킷 (Packet) 이란 무엇일까요? 패킷은 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어로 통신망을 통해 전송하기 쉽도록 데이터를 잘게 나눈 전송 단위입니다. 본래 패킷은 소포를 뜻하는

jdcyber.tistory.com



멀티캐스트 (Multicast)

멀티캐스트는 일대 다수의 통신 방법을 말하며,

네트워크에 연결되어 있는 시스템 중 일부에게만 정보를 전송하는 것으로 특정 그룹에 속해 있는

시스템에게만 전송하는 방법을 말합니다.

200명의 회원을 보유한 사이트에서 150명에게

공지사항을 뿌려야 한다는 가정을 했을 때,

유니캐스트로 뿌리게 되면 150번을 뿌려야 해서 과부하가 올 것이고

브로드캐스트를 통해 일괄적으로 뿌리게 되면 50명은

원치 않는 공지사항을 받아야 하는 상황입니다.

이때 특정 그룹 150명을 묶어 그들에게만 뿌리는

네트워크 방식을 멀티캐스트라고 합니다.

 

멀티캐스트 통신에서는 멀티캐스트 주소의 정확한 할당과 관리가 중요합니다.

특정 그룹에만 정보를 전송하므로, 멀티캐스트 그룹의 효율적 관리에 주의를 기울여야 합니다.

 

네트워크 성능 모니터링과 보안 프로토콜의 적용은 모든 통신 방식에서 중요합니다.

데이터 보호를 위해 적절한 보안 프로토콜(예: IPsec, SSL/TLS)을 적용하고, 네트워크 모니터링을 통해 트래픽을 주시해야 합니다.


오늘은 네트워크 통신의 종류 3가지를 알아봤습니다.

각각의 통신 방법에 따라 달라지는 모양새와 쓰임새를 살펴봤는데요

막연하게 듣기만했던 브로드캐스트 등을 확실히 알 수 있는 시간이었습니다.


 

궁금하신 사항은 댓글에 남겨주세요
댓글에 남겨주신 내용은
추후 정리해서 올려드리겠습니다
이웃 신청하시면 업로드 시 알려드릴게요!
-
조금이라도 도움이 되셨다면
공감&댓글 부탁드리겠습니다
감사합니다!

반응형
반응형

VLAN

오늘은 VLAN을 실제로 설정해 보는 실습을 진행하도록 하겠습니다.

글에 앞서 VLAN에 대해서 아직 잘 모르시겠다면 아래 글을 읽고 와주세요!

https://jdcyber.tistory.com/53

 

VLAN 이란? (쉬운 설명, 개념, 정의)

LAN을 설명하기 전에 먼저 LAN의 개념을 알고 계셔야 하는데요 혹시 LAN에 대해 아직 잘 모르신다면 제가 아래 자세하게 알기 쉽게 써놓았으니 먼저 읽고 와주시길 바랍니다!! (작성중) VLAN (Virtual LA

jdcyber.tistory.com

 

오늘 실습에 이용해 볼 소프트웨어는 패킷트레이서(Packet tracer)입니다.

패킷 트레이서(Packet Tracer)는 Cisco에서 개발한 네트워크 시뮬레이션 도구로,

네트워크 설계, 구성, 테스트 등을 가상 환경에서 실습할 수 있게 해주는 프로그램입니다.

이 도구에 대해 모르신다면 아래 글을 참조해 주세요!

(작성 중)

 

 

오늘 실습의 목적은 VLAN 생성 및 관리의 기본을 배우고,

네트워크의 논리적 분리를 이해하며, 보안과 관리 효율성을 향상시키는 방법을 학습하기 위함입니다.

사용자모드 제한된 명령어 사용, 장치설정 X Router>
관리자모드 현재 동작중인 장치 설정 내용을 볼수 있다 Router#
전역설정모드 장치 설정가능 Rourer(config)#

VLAN 생성하기

  1. VLAN 생성 명령어 입력:
    • #conf t 명령어로 글로벌 구성 모드에 진입합니다.
    • (config)#vlan 11 명령어로 VLAN 11을 생성합니다.
    • (config-vlan)#name VLAN_A 명령어로 생성된 VLAN에 이름을 지정합니다.
    • 동일한 방식으로 VLAN 12와 VLAN 13을 생성하고 각각 VLAN_B, VLAN_C라는 이름을 부여합니다.
  2. 생성된 VLAN 확인:
    • #show vlan brief 명령어를 통해 현재 스위치에 구성된 VLAN 목록과 상태를 확인할 수 있습니다. 이때, VLAN 11, 12, 13이 성공적으로 생성되었는지 확인합니다.

VLAN Access 설정하기

VLAN을 생성한 후, 각 VLAN에 특정 포트를 할당하여 네트워크 장비들이 해당 VLAN에 속하도록 설정할 수 있습니다.

  1. VLAN Access 포트 설정 명령어 입력:
    • #conf t 명령어로 다시 글로벌 구성 모드에 진입합니다.
    • (config)#int fa0/1 명령어로 인터페이스 FastEthernet 0/1을 선택합니다.
    • (config-if)#switchport mode access 명령어로 이 포트를 액세스 모드로 설정합니다.
    • (config-if)#switchport access vlan 11 명령어로 이 포트를 VLAN 11에 할당합니다.
    • 동일한 방식으로 fa0/2 포트를 VLAN 12에 할당합니다.
  2. 설정 확인:
    • #show run 명령어를 사용하여 현재 구성을 확인합니다.
    • #show vlan brief 명령어로 각 VLAN에 할당된 포트들을 확인합니다.
 

명령어 모음

#conf t
(config)#vlan 11
(config-vlan)#name VLAN_A
(config-vlan)#
(config-vlan)#vlan 12
(config-vlan)#name VLAN_B
(config-vlan)#
(config-vlan)#vlan 13
(config-vlan)#name VLAN_C
(config-vlan)#end

Check
#show vlan brief
 
VLAN Aceess를 설정해 보자

vlan 11 - f0/1
vlan 12 - f0/2

#conf t
(config)#int fa0/1
(config-if)#switchport mode access
(config-if)#switchport access vlan 11
(config-if)#
(config-if)#int fa0/2
(config-if)#switchport mode access
(config-if)#switchport access vlan 12
(config-if)#end

Check
#show run
#show vlan brief

주요 정리
vlan 11
name VLAN_A
int fa0/1
Switchport mode access
Switchport access vlan 11

 

실습을 진행함에 있어 아래와 같은 실수를 많이 하셔서 남겨둡니다.

  • VLAN 설정이 반영되지 않는 경우:
    • 해결 방법: show vlan brief 명령어를 사용하여 현재 VLAN 설정을 확인합니다. 설정이 올바르게 반영되지 않았다면, 설정 과정을 다시 한번 점검하고, 오타나 누락된 부분이 없는지 확인합니다.
  • 특정 포트에서 트래픽이 통과하지 않는 경우:
    • 해결 방법: 포트가 올바른 VLAN에 할당되었는지, 그리고 해당 포트의 switchport mode access 설정이 올바르게 적용되었는지 확인합니다. 또한, 해당 포트의 상태가 활성화되어 있는지 show interface [interface-id] 명령어를 통해 확인합니다.
  • VLAN 간 통신 문제:
    • 해결 방법: VLAN 간 통신이 필요한 경우, Layer 3 장비를 통한 라우팅 설정이 필요합니다. 이는 VLAN 설정과는 별도의 고급 설정이며, 관련 지식이 필요합니다. 기본적으로 VLAN은 네트워크를 논리적으로 분리하기 때문에, VLAN 간 통신을 위해서는 추가적인 설정이 요구됩니다.

VLAN 생성과 포트 할당 과정을 통해,

각각의 VLAN에 특정 포트를 할당함으로써 네트워크의 논리적 분리를 실습해 보았습니다.

패킷 트레이서 같은 시뮬레이션 도구를 이용하면,

네트워크 구성과 관리 기술을 손쉽게 배우고 실습해 볼 수 있습니다.


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

 

LAN을 설명하기 전에 먼저 LAN의 개념을 알고 계셔야 하는데요 
혹시 LAN에 대해 아직 잘 모르신다면 제가 아래 자세하게 알기 쉽게 써놓았으니 먼저 읽고 와주시길 바랍니다!!

https://jdcyber.tistory.com/88

 

LAN과 ARP: 네트워크 통신의 핵심 개념과 역할

LAN(Local Area Network)이란?LAN은 근거리 통신망을 의미합니다.이는 보통 같은 건물, 캠퍼스 또는 한정된 지역 내의 네트워크를 가리킬 때 사용됩니다.예를 들어, 집이나 회사에서 컴퓨터들이 동일한

jdcyber.tistory.com

 

VLAN (Virtual LAN)

VLAN (Virtual Local Area Network)이란 

물리적 배치와 상관없이 논리적으로 LAN을 구성할 수 있는 기술입니다. 

쉽게 말해서,

가상의 공간에서 네트워크를 만들어내는 기술입니다.

이름에서 알 수 있듯이, '가상'의 '지역 네트워크'를 만들 수 있는데요,

이 기술 덕분에 물리적인 위치에 구애받지 않고 네트워크를 자유롭게 구성할 수 있습니다.

만약 집에 스위치가 두 개 있고 각 스위치에 10개의 포트가 있고

이 포트에는 총 10대의 컴퓨터가 연결되어 있다고 가정합시다.

일반적인 상황에서는 이 10대의 컴퓨터 모두가 하나의 큰 네트워크를 형성하겠지만,

VLAN 기술을 사용하면 이야기가 달라집니다.

VLAN은 마법처럼 이 10대의 컴퓨터를 필요에 따라 작은 그룹으로 나누어

각기 독립적인 네트워크를 만들 수 있게 해줍니다.

예를 들어, 2대의 컴퓨터는 가족용 네트워크를,

3대는 작업용 네트워크를,

4대는 게임용 네트워크를,

그리고 마지막 1대는 개인용 네트워크를 구성할 수 있습니다.

이렇게 VLAN을 통해 각각의 네트워크는 서로 독립적으로 운영되면서도,

물리적으로는 같은 공간에 위치한 하드웨어를 공유할 수 있습니다.

 

조금 더 쉬운 예로 한번 더 설명해볼까요?

당신의 집에는 여러 방이 있고 각 방에는 다양한 목적의 물건들이 있습니다.

하지만 모든 물건들이 하나의 큰 방에 모여 있다면 찾기도 어렵고 관리하기도 힘들겠죠?

VLAN은 마치 이러한 문제를 해결하기 위해 각각의 물건들을

특정 방(즉, 독립된 네트워크)에 배치하는 것과 같습니다.

이를 통해 물건들을 더 쉽게 찾고 관리할 수 있게 해줍니다.


VLAN이 필요한 이유

컴퓨터 네트워크의 발전 과정을 살펴보면,

초기에는 모든 컴퓨터와 장비들이 한 덩어리로 연결되어 있었습니다.

이러한 방식은 관리가 쉽고 설치 비용이 낮다는 장점이 있었지만,

보안 문제, 데이터 처리의 비효율성 등 여러 문제점을 내포하고 있었습니다.

이를 해결하기 위해, VLAN이라는 개념이 도입되었습니다.

 

VLAN은 기본적으로 스위치 같은 네트워크 장비를 통해 구현됩니다.

네트워크 관리자는 스위치의 각 포트를 특정 VLAN에 할당합니다.

이렇게 함으로써, 해당 포트를 통해 통신하는 모든 데이터는 지정된 VLAN 내에서만 이동하게 됩니다.

마치, 여러 개의 소규모 네트워크가 하나의 큰 네트워크 장비 안에서 독립적으로 운영되는 것처럼 말이죠.


적용 사례
  • 기업 환경: 부서별로 독립된 네트워크를 구성하여 데이터 보안을 강화하고 네트워크 트래픽을 최적화합니다.
  • 학교: 학생, 교직원, 관리자 네트워크를 분리하여 보안과 네트워크 관리 효율성을 높입니다.
  • 공공 장소: Wi-Fi 서비스 제공 시, 공용 네트워크와 내부 관리 네트워크를 분리하여 공용 네트워크의 안전을 보장합니다.

VLAN은 네트워크 설계와 관리에 혁명을 일으킨 기술로, 보안, 성능, 관리 효율성 측면에서 막대한 이점을 제공합니다. 복잡해 보일 수 있는 VLAN의 개념과 운용 방법을 이해하고 적절히 적용한다면, 네트워크 인프라의 유연성과 효율성을 대폭 향상시킬 수 있습니다.

다음 글에서는 패킷 트레이서를 이용하여 VLAN을 직접 설정해보도록 하겠습니다.

https://jdcyber.tistory.com/54

 

VLAN 설정 (패킷 트레이서로 시작하는 네트워크 분리 실습 가이드)

VLAN 오늘은 VLAN을 실제로 설정해 보는 실습을 진행하도록 하겠습니다. 글에 앞서 VLAN에 대해서 아직 잘 모르시겠다면 아래 글을 읽고 와주세요! https://jdcyber.tistory.com/53 VLAN 이란? (쉬운 설명, 개념

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

이웃 신청하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

반응형
반응형

네트워킹의 기초를 이해하는 데 있어서 허브와 스위치는 필수적인 개념입니다.

두 장치 모두 여러 대의 컴퓨터를 연결하여 네트워크를 구성하는 역할을 하지만,

작동 방식과 기능 면에서 중요한 차이가 있습니다.

이 글에서는 허브와 스위치의 기능,

그리고 스위치가 허브 대비 갖는 이점에 대해 친절하고 자세하게 설명하겠습니다.

허브(Hub)란?

허브는 네트워크에서 가장 기본적인 연결 장치로, 여러 대의 컴퓨터를 연결하여 하나의 네트워크를 구성합니다.

간단히 말해, 허브는 연결된 모든 컴퓨터 사이에서 데이터를 전달하는 역할을 합니다.

그러나 허브는 데이터 패킷이 어디서 왔는지, 또는 어디로 가야 하는지를 구별하지 못합니다.

따라서, 허브는 받은 데이터 패킷을 네트워크에 연결된 모든 컴퓨터로 브로드캐스트 합니다.

 

브로드캐스트란?

https://jdcyber.tistory.com/55

 

네트워크 통신의 이해: 유니캐스트, 멀티캐스트, 브로드캐스트 차이점 쉽게 파악하기!

​ 유니캐스트 (Unicast), 멀티캐스트 (Multicast), 브로드캐스트 (Broadcast) 이름이 참 비슷해 보이는 네트워크 통신 방식인 위 3가지에 대해 아주 쉽게 알아보겠습니다. 세 가지 모두 실생활에서 많이

jdcyber.tistory.com


허브의 단점

허브는 자신에게 연결된 컴퓨터의 맥 주소 (MAC Address)를

저장하거나 관리하지 않기 때문에 패킷의 출발지와 목적에 대한 정보를 갖고 있지 않습니다.

 

Mac주소가 뭔지 모르신다면 아래 글을 읽고 와주세요!

https://jdcyber.tistory.com/26

 

MAC 주소? iP 주소? 무슨 차이지? (쉬운 설명, 개념, 정의)

Mac 주소? IP 주소? iP 주소, MAC 주소.. 저희가 IT 업계로 들어오거나 인터넷 통신 혹은 게임을 할 때에도 간간히 들어봤던 이름일 겁니다. 여러분은 무엇인지 둘의 차이는 무엇인지 알고 계신가요?

jdcyber.tistory.com

출발지와 목적지에 대한 정보가 없는 상태에서

패킷을 전달하려면 허브는 모든 포트에 패킷을 전달하게 됩니다.

그래야 정보를 실제 목적지로, 해당하는 포트로 내보낼 수 있을 테니까요.

그러다 보니 허브에 연결된 네트워크에서 한 컴퓨터가 주고받는 데이터는

연결된 모든 컴퓨터가 받게 되고 허브에 연결된 컴퓨터가 많으면 많아질수록

네트워크 트래픽이 불필요하게 증가하고,

결과적으로 전체 네트워크의 성능이 저하될 수 있습니다.

또한 여러 컴퓨터가 동시에 데이터를 전송하려 할 때 충돌이 발생할 수 있으며,

이는 데이터 손실로 이어질 수 있습니다.

보안적으로도 문제가 있습니다.

데이터가 네트워크 내의 모든 기기로 전송되므로,

민감한 정보가 유출될 위험이 있습니다.

 

여기서 패킷이 무엇인지 궁금하시다면

아래 쉽고 자세하게 적어둔 글을 참고해 주세요!

https://jdcyber.tistory.com/12

 

패킷(Packet)이란? (쉬운 설명, 구조, 헤더, 인캡슐레이션, 핑, Ping)

패킷 (Packet) 이란 무엇일까요? 패킷은 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어로 통신망을 통해 전송하기 쉽도록 데이터를 잘게 나눈 전송 단위입니다. 본래 패킷은 소포를 뜻하는

jdcyber.tistory.com

연결된 모든 컴퓨터에 정보를 뿌리는 허브

위 그림을 보시면 허브로 전송된 데이터가

모든 컴퓨터로 전송되고 있습니다.

(물론 요즘엔 MAC Address를 저장하는

스위칭 허브가 사용됩니다.)

허브의 이러한 단점을 보완하기 위한 네트워크 장비가

바로 스위치(Switch)입니다.

스위치란?

많은 컴퓨터를 하나의 네트워크로 묶어 주는
역할을 하는 것은 스위치, 허브 모두 동일합니다.
하지만 스위치는 허브보다 더 지능적인 네트워크 연결 장치입니다.
스위치는 연결된 각 컴퓨터의 맥 주소(MAC Address)를 학습하고 저장하여,
데이터 패킷의 출발지와 목적지를 인식할 수 있습니다.
이를 통해 스위치는 데이터를 목적지 주소가 있는 특정 포트로만 전송할 수 있습니다.
따라서, 스위치는 네트워크의 효율성을 향상시키고,
데이터 충돌을 줄이며, 보안을 강화하는 역할을 합니다.
​따라서
스위치는 데이터를 필요한 곳으로만 전송하기 때문에
네트워크 트래픽을 줄이고 전체적인 네트워크 성능을 개선하고
데이터가 목적지에만 전송되므로, 네트워크 내의 데이터 유출 위험이 감소하며,
스위치는 충돌 도메인을 분리하여 네트워크의 신뢰성을 높이고 데이터 손실을 방지합니다.
 

목적지로만 보내는 스위치

하지만 스위치와 허브를 가르는 가장 큰 차이점이 있으니 바로 VLAN(Virtual LAN)입니다.

 

스위치의 고급 기능 중 하나인 VLAN은 물리적 위치에 관계없이,

네트워크 내에서 여러 개의 가상 네트워크를 생성하여 그룹화할 수 있게 해 주고,

이를 통해 네트워크의 보안과 효율성을 더욱 증가시킬 수 있습니다.

 

VLAN에 대해서는

다음 글에서 자세히 설명해 보겠습니다.

https://jdcyber.tistory.com/53

 

VLAN 이란? (쉬운 설명, 개념, 정의)

LAN을 설명하기 전에 먼저 LAN의 개념을 알고 계셔야 하는데요 혹시 LAN에 대해 아직 잘 모르신다면 제가 아래 자세하게 알기 쉽게 써놓았으니 먼저 읽고 와주시길 바랍니다!!https

jdcyber.tistory.com


궁금하신 사항은 댓글에 남겨주세요

댓글에 남겨주신 내용

추후 정리해서 올려드리겠습니다

구독하시면 업로드 시 알려드릴게요!

-

조금이라도 도움이 되셨다면

공감&댓글 부탁드리겠습니다

감사합니다!

 
반응형
반응형

서브넷 마스크

서브넷 마스크는 서브넷을 만들 때 사용되는 것으로

서브넷을 네트워크 아이디호스트 아이디분리하는 역할을 합니다.

서브넷 마스크(subnet mask)는 32비트의 숫자로 ‘0’의 비트는 호스트 부분을 나타내고

‘1’의 비트는 네트워크 부분을 나타냅니다.

즉 서브넷 마스크는 모두 1로 이루어져 있고

호스트 부분은 0이라고 이해하시면 편합니다.

 

IP 주소 = 네트워크 iD + 호스트 iD로 분리됩니다.

만약 192.168.123.132 | 255.255.255.0라고

한다면 0모든 걸 포함하기 때문에

앞에 3칸은 네트워크 아이디가 되고

뒤에 1자리호스트 아이디 됩니다.

 

서브넷 마스크 구성 시,

비공개와 공개 IP 주소 범위를 올바르게 이해하고 적용하여 내부 네트워크 보호를 강화해야 합니다.

이는 외부로부터의 무단 접근을 차단하는데 기여합니다.

 

서브넷 마스크를 사용하는 것은 대형 쇼핑몰에 들어서자마자

어느 매장을 가야 할지 알려주는 지도를 받는 것과 같습니다.

쇼핑몰 전체가 인터넷이라면, 각 매장은 네트워크의 서브넷에 해당합니다.

지도상의 구역(네트워크 아이디)과 매장 번호(호스트 아이디)를 확인함으로써,

당신은 정확히 어디로 가야 할지 알 수 있습니다.

이처럼 서브넷 마스크는 네트워크의 주소를 네트워크 부분과

호스트 부분으로 구분해 주는 지도와 같은 역할을 합니다.


서브넷 / 서브넷팅

 

서브넷은 하나의 네트워크가 분할된 작은 네트워크 그룹입니다.

이렇게 분할하는 작업을 우리는 서브넷팅이라고 하며

서브네팅 네트워크를 필요한 만큼

작은 단위로 분할하는 작업을 말합니다.

아래서 서브넷팅에 대해 한 번 더 설명하겠습니다

 

서브넷을 분할할 때 각 서브넷의 보안 요구 사항을 고려하여,

민감한 데이터를 처리하는 서브넷에는 더 엄격한 보안 정책과 접근 제어 리스트(ACL)를 적용해야 합니다.

 

서브네팅을 하는 것은 큰 사무실을 여러 개의 작은 방으로 나누는 것과 비슷합니다.

원래의 큰 사무실(원본 네트워크)이 있었지만,

팀별로 구분된 공간이 필요하다고 판단하여 벽을 세워 작은 방들(서브넷)을 만들었습니다.

이렇게 나누어진 각각의 방은 서로 다른 팀이 사용하는 독립적인 공간으로,

네트워크 상에서도 비슷하게 각 서브넷이 독립적으로 작동하게 됩니다.


프리픽스

프리픽스 (prefix)는 서브네팅을 간단한 숫자로 표기하는 방식으로

255 형태의 주소를 다 쓰기 귀찮으니 아래와 같이 표시하는 겁니다.

만약 192.168.123.132 /24라고 한다면

여기서 /24는 1이 왼쪽부터 24개 있다는 걸 뜻합니다.

예를 들어 아래에 /24이진수로 표시한다면,

11111111.11111111.11111111.00000000 <- 1의 개수가 24비트만큼 있다

이걸 10진수로 표시한다면 255.255.255.0 이 되게 됩니다.

주로 나중에 설명드릴 서브넷 마스크가 이러한 형태로 되어있는데

만약 /32라면 255.255.255.255가 되겠지요?

 

프리픽스를 사용하여 서브넷 마스크를 간단하게 표현할 때,

네트워크의 구조를 명확하게 이해하고 올바르게 구성해야 합니다.

잘못된 프리픽스 값은 네트워크 세그먼트 간의 통신 오류를 일으킬 수 있으며,

이는 보안 취약점으로 이어질 수 있습니다.

 

프리픽스를 사용하는 것은 전화번호의 지역 코드를 사용하는 것과 비슷합니다.

전화를 걸 때, 지역 코드를 앞에 붙여 해당 지역의 번호로 연결되듯이,

프리픽스는 네트워크의 크기를 나타내 주며 해당 네트워크 내에서 어떻게 통신해야 할지 알려줍니다.

예를 들어, "/24"는 네트워크 부분이 24 비트라는 것을 의미하며,

이는 전화의 지역 코드가 해당 지역의 특정 번호들을 포괄하는 것처럼,

네트워크 내의 특정 호스트들을 포괄합니다.


서브넷팅

서브네팅 iP 주소 낭비를 방지하고

네트워크를 여러 개의 네트워크로 분리하여 관리하기 위해 하는 것이며

이는 구성할 수 있는 망을 늘리는 행위일 뿐

수용할 수 있는 호스트를 늘릴 수는 없습니다.

이해가 잘 안 가시나요?

거꾸로 설명하면서 이해해 보겠습니다.

서브네팅을 할 때는 필요한 만큼의

적당한 마스크 값을 정해서 진행하게 되고

각 그룹에 할당된 네트워크를 서브넷이라고 부릅니다.

 

서브넷팅 과정에서는 IP 주소 충돌을 방지하기 위한 적절한 계획이 필요하며,

각 서브넷 간의 트래픽 흐름을 제어하기 위해 방화벽 규칙과 접근 제어 리스트(ACL)를 세밀하게 구성해야 합니다.

이는 네트워크의 분할이 보안을 강화하는 데 중요한 역할을 합니다.

서브넷 마스크
네트워크 개수
1개의 네트워크다 iP 개수
0
1
256
128
2
128
192
4
64
224
8
32
240
16
16
248
32
8
252
64
4
254
128
2
255
256
1

1개의 서브넷팅 예제를 보면서

같이 한번 풀어보겠습니다.

서브넷팅 예제

원본 네트워크

198.133.219.0/24 <- 2^8 - 2 = 254개

서브넷 개수

5개 이상

최대 필요한 IP 주소 개수

12개

----------------------------------------------------------------

2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

128 64 32 16 8 4 2 1

----------------------------------------------------------------

 

2^x - 2 >= 12

x = 4

198.133.219.0000 0000

255.255.255.1111 0000

-------------------------------

198.133.219.0000 0000 198.133.219.0 - 198.133.219.15

198.133.219.0001 0000 198.133.219.16 - 198.133.219.31

198.133.219.0010 0000 198.133.219.32 - 198.133.219.47

198.133.219.0011 0000 198.133.219.48 - 198.133.219.63

198.133.219.0100 0000 198.133.219.64 - 198.133.219.79

198.133.219.0101 0000 198.133.219.80 - 198.133.219.95

198.133.219.0110 0000 198.133.219.96 - 198.133.219.111

198.133.219.0111 0000 198.133.219.112 - 198.133.219.127

198.133.219.1000 0000 198.133.219.128 - 198.133.219.143

198.133.219.1001 0000 198.133.219.144 - 198.133.219.159

198.133.219.1010 0000 198.133.219.160 - 198.133.219.175

198.133.219.1011 0000 198.133.219.176 - 198.133.219.191

198.133.219.1100 0000 198.133.219.192 - 198.133.219.207

198.133.219.1101 0000 198.133.219.208 - 198.133.219.223

198.133.219.1110 0000 198.133.219.224 - 198.133.219.239

198.133.219.1111 0000 198.133.219.240 - 198.133.219.255

--------------------------------------------------------------

198.133.219.1 - 198.133.219.14 <-14개 <--- 198.133.219.0/28

198.133.219.17 - 198.133.219.30 <-14개 <--- 198.133.219.16/28

198.133.219.33 - 198.133.219.46 <-14개 <--- 198.133.219.32/28

198.133.219.49 - 198.133.219.62 <-14개 <--- 198.133.219.48/28

198.133.219.65 - 198.133.219.78 <-14개 <--- 198.133.219.64/28 f

198.133.219.81 - 198.133.219.94 <-14개 <--- 198.133.219.80/28

198.133.219.97 - 198.133.219.110 <-14개 <--- 198.133.219.96/28

198.133.219.113 - 198.133.219.126 <-14개 <--- 198.133.219.112/28

198.133.219.129 - 198.133.219.142 <-14개 <--- 198.133.219.128/28

198.133.219.145 - 198.133.219.158 <-14개 <--- 198.133.219.144/28

198.133.219.161 - 198.133.219.174 <-14개 <--- 198.133.219.160/28

198.133.219.177 - 198.133.219.190 <-14개 <--- 198.133.219.176/28

198.133.219.193 - 198.133.219.206 <-14개 <--- 198.133.219.192/28

198.133.219.209 - 198.133.219.222 <-14개 <--- 198.133.219.208/28

198.133.219.225 - 198.133.219.238 <-14개 <--- 198.133.219.224/28

198.133.219.241 - 198.133.219.254 <-14개 <--- 198.133.219.240/28

서브넷팅 예제를 풀어가는 것은 큰 생일 케이크를 친구들 사이에 나눠주는 것과 비슷합니다.

케이크(원본 네트워크)가 하나 있고, 친구들(서브넷의 필요 개수)이 5명 이상 있다고 가정해 봅시다.

모두가 최소한 한 조각씩은 가져가야 하므로(최대 필요한 IP 주소 개수),

케이크를 적절히 조각(서브넷으로 분할)낼 필요가 있습니다. 이 과정에서 케이크를 너무 작게 잘


궁금하신 사항은 댓글에 남겨주세요
댓글에 남겨주신 내용은
추후 정리해서 올려드리겠습니다
이웃 신청하시면 업로드 시 알려드릴게요!
-
조금이라도 도움이 되셨다면
공감&댓글 부탁드리겠습니다
감사합니다!

 
 
반응형

+ Recent posts