본문 바로가기
학교 수업/컴퓨터 네트워크

Network layer :: 3-1. IP addressing, CIDR, DHCP

by Godgil 2020. 6. 17.

자. 오늘 이야기하고 싶은건, IP addressing에 관해서야.

 

이게 뭐냐면, 단순한데 각 단말들에게 주소를 부여하는것을 addressing이라고 해.

그러니까 각 단말들한테 IP 주소를 부여하는게 IP addressing이겠지?

 

우리가 흔히 사용하는 IP주소는 32비트 바이너리 형식으로 표현이 되어 있어.

 

자 그런데, 32비트면 예를 들어서, 11011111 00000001 00000001 00000001

이런 형식으로 표현이 되겠지? 근데 이건 우리가 평소에 보는 주소 형태가 아니란 말이지.

이걸 우리는 보기 쉽게 223.1.1.1이라고 표현을 하는거야

윈도우를 사용하고 있으면 콘솔창을 열어서 ipconfig 명령어를 치면 컴퓨터의 IP 주소를 확인 할 수 있어

 

위 사진에서 잘 보면, 같은 하나의 라우터에 달려있는 컴퓨터들은 주소가 비슷비슷하게 생겼어 그치?

주소라는게 붙어있으면 비슷해야 찾기가 쉬울거니까 말이야.

 

 

IP주소도 똑같거든, 하나의 라우터 인터페이스에 달려있는 네트워크를 subnet이라고 불러.

그래서 하나의 IP주소에는 이 서브넷 주소 부분과, 내 단말의 주소 부분으로  나뉘게 되는거야.

쉽게 말해서, 장치 자체는 IP주소로 식별을 하는데, 같은 서브넷에 속해 있으면 앞부분이 같다. 이런 말이야

 

자, 그럼 중요한건 Subnet mask라는 표현이 있어.

IP 주소 중에, 서브넷 부분이 얼마인가에 대한 정보가 있는거지.

111.2.3.1/23, 111.2.3.4/23

이런식으로 /숫자 를 붙여서 표현 해.

이 말은 32비트 중에 왼쪽 23비트까지는 서브넷주소라는 거야.

 

인터넷 주소 할당 방식에는 CIDR이라고 해서 Classless Interdomain Routing이 있어

이게 뭐냐면, CIDR을 쓰기 전에는 A클래스 B클래스 C클래스라고 해서 주소로 쓸 수 있는 비트가 정해 져 있었거든, 그 제약을 깬거야.

 

그래서 주소 표현의 형태가 a.b.c.d/x의 형태가 된거지.

 

중요한건, 주소 표현 방식은 CIDR이 채택이 되었고, 주소 표현은 a.b.c.d/x의 형태로 표현이 된다.

라는거야.

 

 

그러면 좀 의문이 들 수가 있어, IP주소 표현 하는 방법은 알겠는데, 그럼 이 주소를 어떻게 부여하는건데? 라고 하는 의문이거든.

이게 원래는, 윈도우 기준으로 네트워크 관리자로부터 IP주소를 받으면, 그 주소를 가지고 control panel > network > configuration > tcp/ip > properties에 들어가서 IP 주소를 직접 타이핑을 해야 해

근데 이 글을 읽고 있는 분들 전부 이런 일 해본 적 없을거야.

 

이게 왜 그러냐면, 동적 호스트 구성 프로토콜 DHCP (Dynamic Host Configuration Protocol)이 있기 때문이야.

 

 

DHCP의 특징 중 하나는, plug and play라는 거야. 이게 뭐냐면, 콘센트에 플러그를(전기 코드) 꽂으면 바로 전기를 쓸 수 있듯이, 그냥 네트워크에 속해 지는 순간, 주소가 바로 부여가 되는 형식이야.

 

그래서 어떤 컴퓨터가 한 네트워크에 접속하면, 다이나믹하게 IP를 할당받는다는 소리지.

쉽게 말하면, 노트북을 내가 도서관에 가지고 가면 도서관 Wifi로 인해 IP주소를 할당 받을거고, 집에 오면 다시 집에 있는 LAN선을 통해 IP주소를 할당받을거야. 막 이렇게 옮겨 다녀야하는데, 옮길 때마다 사용자가 설정하기엔 너무 불편하다는거지. 

 

원래는 위와 같은 목적으로 DHCP가 설계가 되었다고 해.

근데 다른 목적이 있어, DHCP라고 하는게 주목을 받게 된 계기가 뭐냐면

 

바로, 할당 할 수 있는 주소가 10개 밖에 없는 네트워크에서 접속해야 하는 단말기가 30개가 있어,

근데 이 단말기들이 항상 주소를 사용하는게 아니란 말이지.

그래서, 당장 쓰고자 하는 단말기에게 주소를 할당 해 주고, 더 이상 필요 없다고 판단되면 그 주소를 회수해서 다른 단말기한테 주고 하는 용도야.

 

이것만 들어도 굉장히 유용하다는 느낌이 오지?

 

이 DHCP가 어떻게 작동하냐면,

어떤 단말기가 network에 접속을 했어, 그러면

1. 단말기는 "DHCP discover"메세지를 뿌려.

2. DHCP 서버가 이 주소 쓸래? 라고 응답해.

3. 이제, 이 DHCP 서버한테 그 주소를 할당 해 달라는 요청을 해

4. 마지막으로 서버가 사용해~ 라고 마지막 확인 해 주는거야.

 

 

그럼 1번 과정부터 살펴보자.

처음에 클라이언트는 DHCP 서버를 찾는다는 메세지를 뿌려야 해.

근데 내 노트북은 DHCP 서버의 주소를 모른단말이야. 그래서 그 네트워크에 연결되어있는 모든 호스트에다가 주소를 뿌려 전부가 들을 수 있도록.

255.255.255.255 << 이 주소가 네트워크에 속해있는 전 네트워크한테 뿌리는거야. 보통 이걸 broadcast라고 해서 방송한다고 표현해.

 

그러면 이게 DHCP서버한테 가는 메세지인걸 어떻게 판별할까?

당연히 포트넘버로 판단하는거지. DHCP서버의 포트넘버는 67번으로 정해져있거든, 이 사실만 알고 있는거야 현재 내 노트북은.

 

자 그러면 이제 2번과정이야.

DHCP 서버는 내 노트북의 메세지에 응답을 할거야.

아니 근데 DHCP 서버는 왜 또 방송을 하는걸까? 분명 클라이언트의 주소를 알고 있을텐데?

그건 바로, 하나의 서브넷에는 여러개의 DHCP서버가 존재 할 수 있거든, 그래서 클라이언트는 각 DHCP서버의 제공 메세지로부터 최적의 위치에 있는 DHCP서버를 선택 할 수 있는거지.

아무튼, 응답을 하면서 DHCP서버는 정보를 내 노트북에게 보내는거지.

"나 여기 있어, 내가 보니까, 너는 223.1.2.4라는 주소를 사용 하면 될거같아. 1시간동안말이야 "

라고 응답 해 주는거야

 

3번과정으로 넘어가 보자.

어? 근데 2번에서 분명히 DHCP서버의 IP주소를 받았는데 왜 또 전체에다 다 뿌리는거야?

그건, 아직 내 노트북은 IP주소를 할당받지 못한상태라서 그래.

이 과정은 다시 확인하는거야.

"나 그럼, 니 DHCP 서버에있는 이 223.1.2.4 주소 1시간동안 쓸게!"

라는거지.

 

마지막 4번과정은

DHCP 서버가 마지막으로 컨펌하는 과정이야. 

마지막으로 확인하는거지

예를들면 "응 알겠어, 1시간동안 사용하고 더 사용할거면 다시 말해 줘"

이런 표현을 한거야.

 

잠깐 빠져보면, 컴퓨터 네트워크를 공부 하다 보면, 그냥 사람과 사람 사이에 대화를 하는 형태가 많이 등장 하더라구, 그래서 나는 이렇게 인격을 부여하면서 내가 네트워크에 들어간것처럼 학습을 했어.

 

 

 

 

아무튼, 근데 내가 그림 설명에서 빠뜨린게 있어, 뭘까?

자, 잘 보면 transaction ID라는 부분을 내가 빼먹었어

 

저게 굳이 왜 필요할까? DHCP 서버가 2번 과정에서 전체 호스트에 방송을 하면, 그냥 그 컴퓨터의 포트넘버가 있으니까 그쪽으로 찾아가면 되는거 아닐까? 그럼 필요 없는 정보를 넣었네?

 

아니지. 그치? 아니란걸 바로 알아야해.

내 노트북에서 68번 포트를 통해 전송을 했고, 동시에 친구 컴퓨터에서도 68번 포트를 통해 전송 할 수 있는거잖아. 그러면 DHCP 서버가 방송을 했을때, 두 컴퓨터 전부 내꺼라고 인식할거 아냐? 그래서 특정한 ID가 필요한거야.

DHCP 서버에서 방송이 되는 정보를 가지고, 포트번호 맞고 ID까지 맞으면, 비로소 나한테 보낸 방송이구나를 깨닫는거지.

 

 

이렇게 4번까지의 과정이 끝나면 이제 내 노트북은 DHCP서버로부터 할당받은 IP주소를 사용 할 수 있는거야. 아까 위에서도 4번과정에서 표현 했지만,

이 할당 받은 주소 한번 받으면, 막 계속 영구적으로 쓸 수 있는건 아니고, 도서관 자리 시스템처럼 갱신하는 형태야

 

 

정리를 하자면, 

하나의 서브넷 내에 여러 개의 DHCP 서버가 있을 수 있고, DHCP 서버가 주소를 할당해 달라는 한 호스트의 요청에 여러 개의 서버가 동시에 응답 할 수도 있어, 거기서 클라이언트가 선택해서 해당되는 DHCP서버에게 리퀘스트 해 주면 자기가 쓸 주소를 확정 받는거지.

 

뭔가 대단한 일을 하고 있는것 같지 않아?

그래도, 결국은 local이야.

같은 서브넷 내에 존재하지 않으면 이런 기능을 할 수는 없어.

 

DHCP는 좀 더 다양한 기능이 있는데, 주소만 할당 해 줄 뿐 아니라. 부가적인 정보도 같이 줘

 

1. 다른곳에 존재하는 서버로 패킷을 보낼 때 전달 가능한 라우터(게이트웨이)

2. 로컬 도메인 서버의 이름, 주소

3. 서브넷 주소의 mask (/23,/24하는 정보)

 

위와 같은 부가적인 정보도 한꺼번에 와.

이게 뭐하는 기능일까? 결국 인터넷에 연결시켜주는 기능인거지.

 

그러니까, 단말이 인터넷에 접속해서 외부와 상호작용 하기 위해 필요한 기초 정보를 제공해주는게 DHCP라는 프로토콜인거야.

댓글