1. 넷마스크 ( NetMask )

※ 네트워크 주소 범위 부분을 2진수의 1로 치환한것

--> 네트워크주소를 구하기위해 IP 주소와 넷마스크를 AND 연산 ( 논리곱 ) 을 통해 구할수 있다!

 

위 예시를 보자 

IP 주소는 203.0.113.43 이다! ~> 해당 주소는 제일 처음이 203 인걸로 보아 C 클래스임을 알수있고,

C 클래스 의 네트워크 주소 범위는 24비트 이다 ( 110 으로 시작하고, 110을 포함한 24비트 까지가 네트워크 주소범위 )

따라서 넷마스크는 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 이 되고, 해당 IP 주소의 네트워크 주소를 구하기 위해

 

1100 1011 0000 0000 0111 0001 0010 1011

1111 1111 1111 1111 1111 1111 0000 0000

 

두 비트를 AND 연산하게되면

1100 1011 0000 0000 0111 0001 0000 0000     <--  네트워크 주소가 된다

이를 10진수 IP로 표기하면

203.0.113.0 이 되는데  이것이 네트워크 주소가 된다!!

 

2. 서브넷마스크 (subnet mask)

서브넷 마스크는 넷마스크와 유사하다.

각 클래스별 기본 서브넷 마스크는

A class - 255.0.0.0

B class - 255.255.0.0

C class - 255.255.255.0

이 된다.

 

즉 쉽게말해 네트워크 주소 범위를 모두 1비트로 사용하는것은 기본 서브넷 마스크 라고 하는데

이 서브넷 마스크는 클래스를 효율적으로 나누기 위해 사용한다고 한다.

--> 알기 쉽게 말하자면 IP 주소와 기본 서브넷 마스크를 AND 연산 하게되면, 해당 대역의 네트워크 주소를 구할수 있다,

이는 넷마스크와 비슷한데,

IP 주소 뒤에 /24 와 같이 표기하는것은 서브넷 마스크를 24비트 사용한다 라는 소리이다.

즉, 

192.168.0.12/24 --> 24비트를 서브넷마스크 ( 네트워크 주소 대역 ) 으로 사용한다는 소리이고 이와 같은 대역에서 통신하기위해 마지막 8비트만 달라야 한다.

 

 

3. 서브넷팅 ( Subnetting )

3 - 1. 네트워크 주소 구하기

: IP 주소에 해당 대역의 기본 서브넷마스크와 AND 연산하여 구할수 있다.

 

3 - 2. 브로드캐스트 주소 구하기

: 기본 서브넷마스크의 0부분을 모두 1로 치환하면 그 주소가 바로 브로드 캐스트 주소로 사용되게 된다.

-> 호스트 주소 부분을 1로 바꾼것과 같음

 

3 - 3. 서브넷팅 이란?

: 하나의 네트워크 주소 대역을 여러개의 네트워크 주소로 나누는 과정

--> 많은 IP 주소의 낭비를 방지하고, 더욱 효율적인 IP 주소 분배를 하기 위함

 

서브넷팅 계산하기!

194.139.10.7/25 라는 IP를 서브넷팅 해보자. /25는 서브넷 마스크가 25bit라는 의미로 255.255.255.128이 된다. 그럼 호스트에 IP를 할당할 수 있는 범위가 0~127, 128~255가 되며, 네트워크 영역은 194.139.10.0, 194.139.10.128가 되어 2개로 나누어지게 된다. 이 때, 네트워크 영역이 2개로 나누어진다는 의미는, 각 범위의 가장 첫 번째 IP를 네트워크 주소로 할당한다는 의미다. 결국 194.139.10.7/25가 속한 네트워크는 194.139.10.0/25 대역에 속하게 되며, 다른 서브넷팅 된 네트워크인 194.139.10.128과는 라우터를 통하여서만 통신할 수 있는 것이다.

 

 

출처 : https://velog.io/@hidaehyunlee/공인Public-사설Private-IP의-차이점

Network 는 무엇인가 ?

- 랜(LAN)이나 모뎀 따위의 통신 설비를 갖춘 컴퓨터를 이용하여 서로 연결시켜 주는 조직이나 체계

즉, 둘 이상의 컴퓨터가 서로 논리적 혹은 물리적으로 연결되어 통신을 하는 체계이다!

 

1.  IP Address 는 무엇인가요?

네트워크를 사용하기 위해 필요한 장비를 식별하는 주소 이다.

Internet Protocol Address 의 줄임말로, 인터넷규약주소 라고도 불린다. ( 일반적으로 아이피주소 라고 부르는게 사실... )
일반적으로는 IPv4 를 사용하기 때문에 , 12자리의 숫자로 구분되어지며, 이 숫자는, 고유의 장비를 식별하기위한 주소로 구분된다!

 

인터넷이 발달될 초창기 인터넷을 사용하는 장비가 많이 없었기 때문에 32비트로 구성된 IPv4를 사용하게 되었으나, 인터넷이 발달되면서

IP주소 부족 현상이 발생하게 된다.

그래서 나온것이 IPv6 이다, IPv6 는 128비트로 구성되어 있어 더 많은 주소를 가질수 있지만...

서브넷 마스크 , 클래스 .. 등등의 여러 방법으로 42억9천개 가량밖에 되지 않는 IPv4 를 여러 방법으로 나누어 쓰게 되면서

아직까지는 사실상 IPv6 를 사용하는곳은 드물다.

 

그럼 IPv6 와 IPv4 의 차이점을 본격적으로 살펴보도록 하자!

 

1 - 1. IPv4 는 무엇인가?

2진수 32비트로 구성된 이 주소는 8비트씩 쪼개어 4섹터로 나누게 된다. 각각의 섹터는  .  으로 구분한다

0000 0000 . 0000 0000 . 0000 0000 . 0000 0000  ~ 1111 1111 . 1111 1111 . 1111 1111 . 1111 1111 

까지의 주소를 가지게 되지만, 표현하기도 어렵고 한눈에 보기 어렵기 때문에 각각의 섹터를 10 진수로 표현하여

0 ~ 255 . 0 ~ 255 . 0 ~ 255 . 0 ~ 255  로 일반적으로 표기하게 된다.

인터넷이 생긴 초반에 통신기기가 그리 많이 생길꺼라 생각을 하지 못하여 32비트, 즉 43억 가량의 주소면 충분하다고 예상했지만,

통신기기들이 발달함에 따라 IP 주소 부족현상이 나타나게 된다, 이에 따라 IPv6 라는 주소가 등장하게 되었다.

 

1 - 2. IPv6 는 무엇인가?

위에 설명했듯이, IPv4 의 주소가 부족해 지면서, 더 많은 양을 제공하는 IPv6 주소가 등장하게 된다!

IPv6는 2진수 128비트를 사용하며, 32비트씩 섹터를 나누고, 표현하기 위해서는 16진수로 표현된다,

각각의 섹터를 구분할때  :  를 사용하게 된다.

 

IPv4 와 IPv6 주소

현재 클러스터에서 IP 주소를 확인해보니

IPv4 - 10.18.250.152 

IPv6 - fe80::b862:5dff:fe44:93e1

이 나오는것을 알수있다.

여기서 IPv6 주소중 ::  으로 표시된 부분이 있다, 이중콜론의 뜻은 0 으로만 구성된 부분을 생략했다는 소리이다,

따라서 IPv6 의 원 주소는 fe80:0000:b862:5dff:fe44:93e1 이지만, 0000 부분을 생략하여 이중콜록으로 대신 표현할수있다.

2. Class 의 개념

IP 주소는 네트워크주소와 호스트주소로 크게 두가지로 구분된다.

여기서 네트워크 주소는 서로 통신을 하기위해 같은 대역인지를 구분하는것이고,

호스트 주소는 같은 네트워크 대역내에 있는 각각의 주소들을 뜻한다..

말이 어려우니 알기쉬운 예시로 표현하자면

 

네트워크 주소 - 아파트 단지

호스트 주소 - 세대 호수

ㅁㅁ아파트 101동 2003호 주민과, 101동 2005호 주민이 있다고 가정하자
여기서 101동은 네트워크 주소를 뜻하며, 2003호와 2005호는 호스트주소를 의미한다고 생각하면 편하다, 
아파트 내 방송으로, 각각의 집에 유의사항을 전파할때, 
ㅁㅁ아파트 101동 주민들은 이 방송을 들을수 있지만,
ㅇㅇ아파트 주민들은 이 방송을 들을수 없을것이다.
이러한 개념이 바로 네트워크 주소와 호스트주소이고,

이러한 네트워크 주소의 크기와 호스트주소의 크기를 결정짓는것은 class 마다 다르기 때문에 해당 클래스를 사용해 구분짓게 된다.

 

클래스는 A, B, C, D, E  총 5개의 클래스로 구분된다. 각각의 클래스를 살펴보자!

2 - 1. A클래스

32비트의 주소중, 첫번째 값이 0으로 고정된 주소는 A Class 이다!

즉, 0xxx xxxx 의 비트수로 시작하는 주소는 A 클래스 이고, 해당 클래스의 네트워크 주소는 0xxx xxxx 까지가 네트워크 주소이다!

0000 0000 ~ 0111 1111 까지의 범위가 되므로, 통상 [ 0.x.x.x ~ 127.x.x.x ] 의 아이피 주소는 A 클래스로 구분되며, 호스트 주소는

앞의 8비트를 제외한 나머지 24비트가 호스트 주소로 사용되게 된다!

하지만, 일반적으로 127과 0은 사용하지 않게 " 약속 " 되어 있기 때문에 , 1 ~ 126 까지의 범위가 A클래스에 속하게 된다.

 

그럼, A클래스의 총 범위는

0~126. 0~255. 0~255. 0~255 까지가 되는데, 그 범위는 2^24 일것이다, 하지만
모든 자리가 0 이거나 모든자리가 255인 경우는 예외적으로 사용할수 없다!
모든 자리가 0인경우, 네트워크 주소를 표현하기위해 사용하지 않아야 하며,
모든자리가 255 인경우, 브로드캐스트 주소로써 사용하기 위해 사용되지 않아야한다!

따라서 A클래스가 가질수 있는 호스트주소의 범위는 (2^24) -2 가 될것이다!

 

* 브로드 캐스트란?

해당 네트워크 대역에 있는 호스트들이 모두 듣게되는 통신망 으로써, 

확성기 ! 라고 생각하면 된다

2 - 2 B클래스

32비트의 주소중,  처음 값이 10으로 고정된 주소는 B Class 이다!

즉, 10xx xxxx 의 비트수로 시작하는 주소는 B 클래스 이고,

해당 클래스의 네트워크 주소는 10xx xxxx xxxx xxxx까지가 네트워크 주소이다!

1000 0000 ~ 1011 1111 까지의 범위가 되므로, 통상 [ 128.x.x.x ~ 191.x.x.x ] 의 아이피 주소는 B 클래스로 구분되며, 호스트 주소는

앞의 16비트를 제외한 나머지 16비트가 호스트 주소로 사용되게 된다!

호스트 주소의 범위는 A클래스와 마찬가지로, 모두가 0 이거나 모두가 255인 경우를 제외하고

(2^16)-2 까지의 범위를 가질수 있다.

 

2 - 3 C클래스

32비트의 주소중, 처음 값이 110으로 고정된 주소는 C Class 이다!

즉, 110x xxxx 의 비트수로 시작하는 주소는 B 클래스 이고,

해당 클래스의 네트워크 주소는 110x xxxx xxxx xxxx xxxx xxxxx 까지가 네트워크 주소이다!

1100 0000 ~ 1111 1111 까지의 범위가 되므로, 통상 [ 192.x.x.x ~ 223.x.x.x ] 의 아이피 주소는 C 클래스로 구분되며, 호스트 주소는

앞의 24비트를 제외한 나머지 8비트가 호스트 주소로 사용되게 된다!

호스트 주소의 범위는 A클래스와 마찬가지로, 모두가 0 이거나 모두가 255인 경우를 제외하고

(2^8)-2 까지의 범위를 가질수 있다.

 

클래스 IP Address 네트워크 주소 범위 호스트 범위 ( 네트워크, 브로드캐스트 제외)
 A클래스 0xxx xxxxx ~x  1 ~ 126   ( 2^24 ) -2 
 B클래스 10xx xxxx. xxxx xxxx. x ~ x  128.0 ~ 191.255 ( 2^16 ) -2 
 C클래스 110x xxxx. xxxx xxxx. xxxx xxxx x ~ x  192.0.0 ~ 223.255.255 ( 2^8 ) - 2

 

2 - 4 D클래스

32비트의 주소중, 처음 값이 1110으로 고정된 주소는 D Class 이다!

해당 클래스는 [ 멀티캐스트 주소 ] 로 사용하기위해 일반적으로 사용되진 않는다!

 

2 - 5 E클래스

32비트의 주소중, 처음 값이 1111으로 고정된 주소는 E Class 이다!

해당 클래스는 [ 연구/개발 미래대비 ] 용도로 사용하기위해 일반적으로 사용되진 않는다!

 

 

출처

https://velog.io/@hidaehyunlee/IP-address란

※ 파일디스크립터 ( fd - File Descriptor ) 란?

- 컴퓨터가 파일들을 관리하기 위해 지정해 놓은 숫자

- 일반적으로 [ 0, 1, 2 ] 는 이미 지정되어 있다!

0 : 표준 입력

1 : 표준 출력

2 : 표준 에러

3... : 사용자가 사용하는 파일을 최소숫자로 부여!

 

⚠️ 만약 잘못된 파일에 접근할경우 -1 을 반환한다! ⚠️

 

간단한 예로 fd 값을 살펴보자구요!

살펴보기 전에 먼저 open 함수를 간단히 알아봅시다!

* OPEN 함수란?
- 이미 생성되어 있는 파일 또는 새로운 파일을 생성하는 System call 함수!
open 함수를 사용하기 위해서는 flag 를 반드시 사용해야 합니다!
O_RDONLY : 파일을 읽기 전용으로 open합니다.
O_WRONLY : 파일을 쓰기 전용으로 open합니다.
O_RDWR : 파일을 읽고 쓰기를 모두 할 수 있도록 open합니다.

출처: https://www.it-note.kr/19 [IT 개발자 Note]

fd 값을 사용하기 위해 우리는 O_RDONLY 플래그만 사용해서 fd값을 살펴 보도록 해요!

먼저 우리는 임의의 파일 하나는 생성해 주자구요! 

touch 명령어를 통해 비어있는 파일 "hello" 를 만들어 줍니다!

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
    int fd;
        
    fd = open("hello", O_RDONLY);
    printf("hello 파일의 fd값 = %d\n", fd);
}

그리고 간단한 코드 작성을 통하여 fd 값을 확인해 보자구요!

위에서 설명한대로 0 ~ 2 까지는 표준입력, 표준출력, 표준에러 로 이미 선점해 있기 때문에

파일 디스크립터 값은 3이 할당된걸 알수있죠!

 

그렇다면 올바르지 않은 파일이 들어왔을때 fd 값을 확인해 볼까요?

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
    int fd;

    fd = open("hello_error", O_RDONLY);
    printf("hello_error 파일의 fd값 = %d\n", fd);
}

우리는 "hello" 라는 파일은 만들었지만 "hello_error" 라는 파일은 가지고 있지 않습니다!

그렇다면 해당 파일을 읽으려고 할때, fd 값은 어떻게 될까요?

위에 설명한대로 정말 -1을 반환하게 되네요!

 

그럼 여러개의 파일을 읽을때, fd 값은 어떻게 할당 될까요?

hello 하면 자연스레 따라오는.. world 라는 파일을 새로 만들어 줬습니다!

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main(void)
{
    int fd;
    int fd_2

    fd = open("hello", O_RDONLY);
    printf("hello 파일의 fd값 = %d\n", fd);
    
    fd_2 = open("world", O_RDONLY);
    printf("world 파일의 fd값 = %d\n", fd_2);
}

해당 값의 결과를 확인해보면

정말 순서대로 3 과 4 가 할당되네요!!

 

* 파일을 사용하고 난후 더이상 파일을 사용하지 않는데, 이런경우 fd 에서 제거할순 없나요?

--> 우리가 메모리 동적할당을 하기위해 malloc 함수를 사용하고 난후, free 함수를 통하여 해당 메모리를 해제해 주잖아요!?

open 함수도 이와 비슷한 함수가 존재합니다!

바로 close 함수 인데요!

 

close 함수는 " 나는 더이상 이파일을 사용하지 않고 접근도 하지 않을거야 그러니까 파일 디스크립터에서 제거해줘 "

정도로 생각하시면 될것 같아요!!

 

간단한 코드로 살펴봐요!

 

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    int fd;
    int fd_2;

    fd = open("hello", O_RDONLY);
    printf("hello 파일의 fd값 = %d\n", fd);

	close(fd);
	printf("hello 파일 close\n");

    fd_2 = open("world", O_RDONLY);
    printf("world 파일의 fd값 = %d\n", fd_2);
}

자 이렇게 하고 난후 각각의 fd 값을 확인해보면!

hello 파일의 디스크립터가 3으로 선점되었지만

close 함수를 통하여 디스크립터에서 제거하고 world 파일을 디스크립터에 할당할때 

제일 적은숫자, 그러니까 3으로 할당됨을 볼수 있네요!

본과정 시작한지 2주가 지났다

 

처음 1주차는 본과정의 시스템 그리고 클러스터 구경하느라 집중을 못했는데

OT를 다녀오고나서 사람들 모두

진도를 빼고있었다

 

사실 42서울 특성상 남들과 비교하면 안되지만

 

피신때도 그렇고 항상 쫄린다

너무 쫄려서 

 

어제부터 급 집중을 하기 시작했다

 

미루고 미루던 

파트를 끝냈다!!

 

그렇게 테스터 기를 모두 통과하고 다음 파트를 해야하는데

 

귀찮다

그래도 해야지 아자아자

다음주엔 과제를 끝내고 다음과제로 넘어가는걸로

오늘 4기 신입생 환영회? 비슷한걸 했다!

 

학장님, 이사장님? 취업홀에 빠지신 이전 기수분들의 토크쇼도 있었고!

전설의 웰컴킷 도 수령했다!

이건 유튜브 실시간 스트리밍 시작전 그림이 멋지길래 캡쳐했다 모래아트 라고하나 이걸

뭐라고 하지 하여튼

 

인원이 많아서 유튜브 스트리밍으로 진행하였다!

 

열심히 들으려 했지만 가만히 앉아서 듣기만 하려니 조금 따분해서

팜플렛을 찍었다

여기서 만화가 왜나와?

 

연설 듣다가 목이말라서 오아시스 갔는데 화이트보드에 그림이

너무 잘그리셔서 찰칵 했다! 금손분들이 많은거같음ㅋㅋㅋ

 

대망의 웰컴킷!!!!!!

 

상자다 그냥 종이 아님

저 사진 찍을때 버스정류장이여서 바닥 안보이게 찍는다는게 그만

 

일종의 길드? 팀? 같은게 있다!

 

나는 Gun 인데 길드? 팀? 마다 색깔이 다르다

그 이유를 오늘 알았어

 

3기 카뎃분이 말씀해주셨다..

우리 길드는 호폴푸프 팀이다

 

맞다! 해리포터

해리포터에서 슬리데린 , 그리핀도르 만 기억하곤 하는데

 

호폴푸프 팀은 노란색 교복을 입는다!!

생각난김에 해리포터 다시 정주행 하고싶다

 

웰컴킷 구성품

간지나는 상자와 학장님의 말씀!

무선충천 + 마우스패드!

무선키보드 작아서 들고다니기 편할듯 

텀블러 ! 그냥 텀블러가 아니다 온도가 표시되는 텀블러다!

 

모든 물건에는 42seoul 로고가 박혀있다

 

😎 느낀점

- 다른 카뎃 분들과 이야기를 나누면서 과제 진도 상황에 대한 토론을 했다 나만 놀았나보다 진짜 빨리 진도 빼야지

- 나는 피신때 조용히 옆사람과 질의응답 위주로 학습을 했다 그래서 나는 피신때 친해진 사람도 아는 사람도 없다고 생각했는데 

오늘 오티때 같이 피신 진행했던 분들께서 인트라 아이디를 불러주시며 오랜만이에요~ 하고 인사를 건내셨다

아싸긴 한대 엄청 깊은 아싸는 아니였던걸로 오랜만에 만났던 4기 1차분들!! 반가웠어요!! 클러스터에서 자주 뵈어요!! 

- 내일부턴 열심히 해야겠다

- 나도 카뎃분들과 친해지고 싶다

 

 

😁 Born2code 카테고리를 새로 만들었다

여기엔 본과정에 대한 이야기를 써야겠다

이제 블로그도 열심히 써봐야지

 

4기분들 모두모두 축하드려요!

 

※ 혹시 내용중 공개되면 안되는 내용이 있다면 수정하겠습니다

+ Recent posts