이건 공부를 했는데 워낙 옛날에 해서 가물가물한 수준
기본적으로 다들 알고 있는 IP 주소 체계에 대한 내용 정리와 더불어
IPv4 Address
XXX.XXX.XXX.XXX 의 기본적인 형태를 가지고 있는 IPv4 Address
- 실제로 IPv4 은 총 4byte (32bit)로 구성
- . (온점)을 기준으로 하나의 Octet이라고 부름
- 1 Octec은 8bit = 총 4개의 Octet 이므로 32 bit 구성
- 우리가 알고 있는 IP주소 체계는 bit로 구성된 내용을 10진수로 변환하여 표기한 것
당연히 알고 있겠지만 너무 오랜만이라 기억이 안 날 수 있으므로 정리하자면 2진수(bit)를 10진수로 변환하는 방법, 진법 변환은 아래의 규칙을 따른다.
각 자릿수에 해당하는 값이 1이면 2진수에 해당하는 값을 더하고 0이면 해당 값을 0으로 두고 모두 합하면 10진수로 변환할 수 있다. 이 변환 방식으로 IPv4의 비트 값을 10 진수로 변환해보면 최솟값, 최댓값 범위를 구할 수 있다.
Octet(8bit)의 표현 가능 범위
bit (2진수)-> 10 진수로 진법 변환하여 최솟값과 최댓값을 구할 수 있다.
최솟값 00000000 = 0
최댓값 11111111 = 128+64+32+16+8+4+2+1 = 255
따라서 IPv4 Address의 Octet 4개를 모두 10진수로 변환하면 표기 가능한 범위는
0.0.0.0 ~ 255.255.255.255 임을 알 수 있다.
IPv4 Address 구조 (Class 구분 방식, 서브넷 마스크 구하는 법)
앞에서 정리했지만 IP주소는 Network ID와 Host ID로 구성되어 있고, Network ID를 통해 어떤 그룹에 속해 있는지를 파악할 수 있다면 그중에 몇 번째인지는 Host ID를 통해 구분할 수 있다.
IPv4는 값의 범위에 따라 총 5개의 Class로 구분된다.
Class 구분 방법은 IPv4의 첫 번째 Octet 값의 범위에 따라 구분이 가능하다.
원래는 bit로 표시해서 특정한 Class별로 몇 번째 자릿수가 1인 게 A Class 뭐 이런 게 있는데 굳이 그걸 알아야 될 필요는 없고 필요하다면 2진법으로 진법 변환하면 되니, 10진수 기준으로 A Class ~ E Class까지 각 Class의 범위와 사용 용도를 정리하였다.
Class명 | 첫 번째 Octet 값 범위 | 용도 |
A Class | 1~126 (1.X.X.X ~ 126.X.X.X) | 컴퓨터의 IP주소로 사용 |
B Class | 128~191 (128.X.X.X ~ 191.X.X.X) | |
C Class | 192~223 (192.X.X.X ~ 223.X.X.X) | |
D Class | 224~239(224.X.X.X ~ 239.X.X.X) | 멀티캐스트 IP주소로 사용 |
E Class | 240~255 (240.X.X.X ~ 225.X.X.X) | 사용하지 않음 |
표를 잘 보면 A Class에 빠져있는 숫자가 있다.
0과 우리가 익숙하게 자주 사용하는 127.0.0.1의 주인공 127이 없다. 컴퓨터의 IP주소로 사용해야 하는데 해당 번호는 아마도 예약어라 빠져있나 보다 생각했는데, 빠져있는 번호의 용도가 따로 있다고 한다.
A Class에서 제외된 특정 IP의 용도
첫 번째 Octet 값이 127이면서 Host ID 부분의 값은 지정되지 않은 값을 'Loopback 주소'라고 부른다.
패킷 송수신 과정에 대한 시스템 내부 테스트 시 사용하는 용도이며
cmd 명령어 창에 ping 127.0.0.1을 치게 되면 랜카드 작동 테스트를 진행한다고 한다.
또한 오류를 대비하여 미리 빼둔 주소가 있다. 바로 모든 값이 0으로 채워진 0.0.0.0이다.
이 주소는 부팅 시 자신의 IP 주소를 모르는 경우 사용한다고 한다. 이런 주소를 '디폴트 주소'라고 한다.
또한 각 Class 별로 Network ID와 Host ID를 표현하는 구간이 다르며 (D, E Class는 구분하지 않음) 이 표현 범위에 따라 Network ID 값으로 사용 가능한 범위가 달라진다.
Class명 | 1 Octet | 2 Octet | 3 Octet | 4 Octet | Network ID 표현 가능 범위 |
A Class | Network ID | Host ID | Host ID | Host ID | 1.0.0.0 ~ 126.0.0.0 |
B Class | Network ID | Network ID | Host ID | Host ID | 128.0.0.0 ~ 191.255.0.0 |
C Class | Network ID | Network ID | Network ID | Host ID | 192.0.0.0 ~ 223.255.255.0 |
D Class | 구분하지 않음 | ||||
E Class |
이 Network ID 표현 구간은 서브넷 마스크를 확인하는데도 사용된다.
Network ID로 표현하는 구간을 255로 채우고 Host ID로 표현하는 구간을 0으로 채우면 그게 해당 Class의 서브넷 마스크가 된다.
A Class는 255.0.0.0, B Class는 255.255.0.0, C Class는 255.255.255.0 이 각 Class별 서브넷 마스크에 해당된다.
* 서브넷 마스크 구하는 쉬운 방법
이미 앞서 정리한 글에서 서브넷 마스크를 통해 IP주소에서 Network ID값을 구분해내는 방법을 얘기했는데 그때는 어떻게 구하는지 얼렁뚱땅 넘어갔지만, 이젠 IPv4 Address를 2진수로 표기하고 서브넷 마스크도 2진수로 표기해서 AND 연산을 하게 되면 Network ID를 구할 수 있음을 알게 됨 ^_ㅠ
하지만 우리는 위에서 이미 Class 구분 방법에 대해서 알았고, Class 별 서브넷 마스크가 어떻게 할당되는지도 배웠기 때문에 첫 번째 Octet이 어떤 값을 가지는지만 파악해도 해당 IP가 어떤 Class에 속하는 지도 알 수 있다.
Network ID
해당 네트워크를 구성하는 대표 주소, 그룹 주소라고 이해해도 무방하다.
위에서 배운 바와 같이 각 클래스별로 나타내는 Network ID의 구성 범위가 있는데 해당 영역을 제외한 Host ID값이 0으로 채워진 것을 Network ID라고 한다.
이를 다른 방식으로 표현하자면 Network ID가 동일할 때, Host ID 값에 따라 순서를 알 수 있다고도 표현했는데 이때 해당 그룹의 0번째 값을 Network ID라고 역으로 표현할 수도 있겠다.
클래스 별로 예를 들자면, A 클래스는 11.0.0.0의 형태. B 클래스는 154.32.0.0, C 클래스는 192.78.42.0과 같은 값들이 Network ID라고 할 수 있다.
브로드캐스트의 두 가지 모드
앞에서 트래픽 모드에 대해 설명하면서 유니캐스트 모드, 멀티캐스트 모드, 브로드캐스트 모드 세 가지가 있다고 정리했는데 이 중 해당 망 내의 불특정 다수에게 트래픽을 전송하는 브로드캐스트 모드는 두 가지 형태로 분류가 가능하다.
1) Limited Broadcase 주소
- Network ID와 Host ID를 구성하는 bit가 모두 1인 주소
- 255.255.255.255의 형태를 가지는 주소
2) Direct Broadcast 주소
- Network ID는 원래 값을 유지하고 Host ID를 구성하는 bit만 모두 1인 주소
- 각 Class별로 상이하나 위에 예를 들었던 값을 인용하자면, A Class 11.255.255.255, B Class 154.32.255.255, C Class 192.78.42.255의 형태를 가지게 된다.
- 위에서 예를 든 브로드캐스트 주소는 해당 Network ID를 가진 망 내의 모든 Host를 호출할 수 있다.
- 즉, 해당 클래스에서 Host ID 영역이 모두 255로 채워진 값은 Direct Broadcast 주소로 사용해야 하므로 IP를 할당할 수 없게 된다.
Network ID의 값과 브로드캐스트 값을 알아본 이유는, IP 주소의 할당 가능 범위에 대해서 구하기 위해서였다.
각 클래스별 Host ID 구간에 따라 IP 할당 가능 범위는 아래와 같이 계산할 수 있다.
2의 Host ID bit 수 승 - 2 = IP 할당 가능 범위... 이렇게만 쓰자니 오늘은 어째 뭔가 만들고 싶어 져서 정리도 했다.
이런 계산을 왜 하나 싶겠지만 네트워크 관련해서 IP를 할당해야 하는 업무를 하는 분들은 몇 대의 IP를 할당할 때 어떤 클래스를 할당해야 하는지를 생각해야 한다고 한다.
와... 항상 다른 영역의 업무는 너무 리스펙 하게 된다. 대단함 진짜 ^_ㅠ
유동 IP
고정 주소는 정해진 IP와 서브넷 마스크, 디폴트 게이트웨이를 직접 입력하여 변경 없이 하는 형태로 주로 IP 주소 변경이 되지 않는 서버 구성 시 많이 사용한다.
그럼 유동 주소, 유동 IP란? 고정 IP 주소 형태를 제외한 대부분의 경우가 유동 IP 형태에 해당한다.
그럼 유동 IP를 할당받기 위해서는 DHCP 서버를 알아야 하는데, 이건 바로 뒤에서 설명하고 이 DHCP 서버로부터 IP 주소, 서브넷 마스크, 게이트웨이 주소 등의 네트워크 구성 정보를 할당받아 유동 IP가 설정된다.
일정한 주기로 설정되는데 대부분 스마트폰을 사용하는 요즘 스마트폰도 이렇게 유동 IP가 설정된다.
변경 주기는 어느 정도 주기인지 알 수 없으나, 스마트폰의 경우 비행기 모드를 설정했다가 풀면 강제로 IP가 바뀐다는 이야기가 있었다.
DHCP?
DHCP (Dynamic Host Configuration Protocol) 은 동적 호스트 구성 프로토콜로, 네트워크 상에서 동적으로 IP 주소 및 기타 네트워크 구성 정보를 부여 및 관리하는 프로토콜을 말한다.
이 네트워크 구성 정보란 ipconfig 쳤을 때 나오는 기본적인 IP 주소, 서브넷 마스크, default gateway 주소와 더불어 네임서버 (DNS)의 IP 주소 그리고 마지막으로 DHCP에서 할당해 준 이 IP의 사용 가능 기간을 같이 할당해준다.
expired 되면 DHCP에서 새롭게 IP를 할당해주는 게 아닐까 싶다.
PC의 수가 많거나 변동사항이 많은 경우 IP 설정이 자동으로 할당되기 때문에 IP 충돌을 막아 효율적 관리가 가능하다는 장점이 있으나, DHCP에 의존하게 되므로 이 서비스가 죽으면 IP 할당이 제대로 안된다는 문제가 있다.
(모든 서비스가 문제가 일어나기 마련인데 이걸 문제라고 할 수가 있나...)
여하튼 그래서 그런 문제를 막기 위해서 하나의 망에 여러 개의 DHCP 또는 DHCP Relay Agent를 설치한다고 함.
DHCP를 이용한 IP 할당 과정
이건 대충 보고 넘기려고 했는데 좀 흥미로운 게 앞에서 배운 개념들이 알차게 나옴
하나의 망 내에 DHCP 서버와 DHCP를 통해 IP를 할당받을 유동 IP PC, 즉 DHCP 클라이언트 PC가 여러 대 구성된다는 가정을 해보자.
클라이언트 PC가 부팅되면 브로드캐스트 방식을 이용해서 DHCP 서버를 찾는 메시지를 보내고 (Discover 과정)
이를 수신한 다른 PC들은 본인에게 해당되는 메시지가 아니면 무시하고 DHCP 서버가 응답하면서 할당 가능한 IP 주소, 기본 게이트웨이, 사용 가능 기간을 전달하게 된다. (Offer)
이 과정도 브로드캐스트 방식으로 이뤄지고 자신에게 해당되는 메시지가 아니면 무시한다고 함.
(뭔가 수업시간에 건너 건너 쪽지 돌리는 기분이구만, 근데 그 쪽지가 환히 펼쳐져 있어서 누구나 볼 수 있는 그런 느낌)
이 응답을 받은 클라이언트 PC는 이 IP를 포함한 네트워크 구성 정보를 사용하겠다고 다시 Request를 보낸다.
그러면 DHCP 서버가 ㅇㅋㅇㅋ 그럼 이거 니가 써 하면서 네트워크 구성 정보 중에 아까 안 보냈던 추가 정보를 송신한다. 이걸 Ack 메시지라고 한다.
- Discover (DHCP 클라이언트 -> DHCP 서버, IP 할당 요청)
- Offer (DHCP 클라이언트 <- DHCP 서버, 사용 가능한 IP 주소 및 사용 가능 기간 회신)
- Request (DHCP 클라이언트 -> DHCP 서버, 사용 의사 전달)
- Ack (DHCP 클라이언트 <- DHCP 서버, 사용 의사 수락 및 추가 정보 전달)
놀랍게도 이 모든 과정은 브로드캐스트 방식으로 이뤄지고 이 메시지를 수신한 해당되지 않는 서버들은 알아서 무시한다고 한다,,,☆ 캬 누구보다 신뢰가 탄탄한 네트워크 사회
공부하다 보니까 재밌는 네트워크의 세계
역시 나랑 관련 없는 거 공부해야 재미있게 하고 나랑 밀접한 거 하면 괴롭지 ^_ㅠ
'Server' 카테고리의 다른 글
[네린이 공부일기] 브로드캐스트 도메인, CIDR 표기법, 서브넷팅 (0) | 2022.04.13 |
---|---|
[네린이 공부일기] 사설 IP/공인 IP, NAT (네트워크 주소 변환) (0) | 2022.04.12 |
[네린이 공부일기] 내부망/외부망 트래픽 흐름 (0) | 2022.04.09 |
[네린이 공부일기] 트래픽 전송 모드 : 유니캐스트, 멀티캐스트, 브로드캐스트 (0) | 2022.04.08 |
[네린이 공부일기] LAN과 WAN, 네트워크 주소 체계 (0) | 2022.04.07 |