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