위 사진이 무엇을 의미하는지 설명할 수 있는가? 설명이 가능하다면 이 글을 굳이 읽지 않아도 된다.
이 글의 목적은 위의 사진이 어떤 의미를 갖는지 이해할 수 있도록 하는 데에 있다.
추가로 사이더(CIDR)에 대한 개념을 다룰 생각이다.
나는 대학생 시절 기숙사에 거주했는데, 노트북에 저걸 수동으로 등록해줘야 인터넷을 사용할 수 있었다.
기숙사 방을 바꿀 때마다 저 정보를 새롭게 등록해줘야 했는데 숨이 턱턱 막혔다.
개발을 모르는 입장에서 외계어로밖에 보이지 않았다.
하지만 이제 나는 개발자다. 개발자라면 저 정도는 기본으로 해석할 수 있어야 한다.
해당 사진을 해석할 수 없다면 이 글을 통해 함께 공부해보자.
컴퓨터는 인터넷을 통해 수많은 컴퓨터들과 연결되어 있다. 컴퓨터와 컴퓨터는 데이터를 주고받을 수 있다.
그런데 어떻게 수많은 컴퓨터 중 특정 컴퓨터로 데이터를 보낼 수 있는걸까?
IP란 인터넷 세상에서 이 도로명 주소, 동과 호수의 역할을 한다.
현실에서도 쿠팡으로 물건을 산다고 하면 우리 집의 도로명 주소, 동과 호수가 필요하다.
위 그림에서는 100.100.100.1이라는 주소에서 200.200.200.2 라는 주소로 데이터를 보내는 상황이다.
데이터를 담은 패킷(소포)은 노드를 거쳐가며 200.200.200.2라는 주소로 패킷을 전달한다.
위의 예시에서 주소라고 비유한 100.100.100.1, 200.200.200.2가 바로 IP이다.
정리하면, IP는 다른 컴퓨터들이 접근할 수 있게 가지고 있는 고유한 네트워크 주소이다.
주의할 건 IP 주소는 컴퓨터의 주소가 아니라 네트워크의 주소이다.
집에서 개발할 때와 스타벅스에서 개발할 때 내 노트북의 IP는 달라진다.
컴퓨터는 이동식 트레일러이고, IP는 각 주차장마다 달려있는 주소라고 생각하자.
컴퓨터의 주소는 MAC 주소이다. 궁금한 분들은 추가적인 학습을 해보자.
11000000.00001101.00000011.00000001
== 192.13.3.1(10진수)
IP는 8개의 이진수를 4번 반복해 표현하기로 약속한다.
다만 이진수는 알아보기 어렵기 때문에 십진수로 바꿔서 표현한다.
각각의 블록은 00000000~11111111, 0부터 255까지 범위를 갖는다.
IP는 총 몇 개를 만들 수 있을까?
32개의 이진수를 사용하면 약 43억개의 IP를 만들 수 있다.
2023년에 지구에는 약 79억명이 살고 있다고 한다.
대한민국 기준으로 한 명의 사람은 보통 노트북도 있고, 핸드폰도 있고, 컴퓨터도 있다.
단순하게 생각해도 43억개의 IP는 굉장히 모자라 보인다.
이 문제를 해결하기 위해 공인 IP와 사설 IP라는 개념이 도입된다. 비유를 통해 설명하겠다.
도로명 주소는 딱 하나만 존재할 수 있다.
판교의 반포 자이는 "서울시 서초구 신반포로 270" 라는 도로명 주소를 갖는다.
이 주소는 대한민국에서 유일하다.
그렇지만 101동 202호라는 호수는 반포 자이 뿐 아니라 각 아파트마다 존재할 수 있다.
도로명 주소를 통해서 집을 찾아갈 수 있지만, 101동 202호만을 보고 집을 찾아갈 수는 없다.
공인 IP는 도로명 주소, 사설 IP는 동과 호수로 바꿔서 생각하면 쉽게 이해가 가능하다.
공인 IP는 앞서 계속 설명해 온 IP이다. 인터넷 상에서 유일하게 한 개만 존재할 수 있다.
사설 IP는 하나의 사설망 내에서만 사용되는 IP주소이다. 모든 네트워크마다 동일한 IP를 갖기 때문에 사설 IP는 외부에서 접근할 수 없다.
1.0.0.0 ~ 126.255.255.255 128.0.0.0 ~ 191.255.0.0 192.0.0.0 ~ 223.255.255.0
IP가 위의 범위에 해당한다면, 해당 IP는 사설 IP라는 걸 의미한다.
위의 사진에서 192.168.0.2가 200.200.200.2에 요청을 보내면
1. 192.168.0.2는 gateway에 요청을 전달한다.
2. gateway는 공인IP 100.100.100.1를 사용해 서버로 요청을 보낸다.
3. 서버는 100.100.100.1에 응답을 보낸다.
4. 받아온 응답은 gateway를 통해 192.168.0.2에 전달된다.
기존에는 딱 43억개의 IP만을 사용할 수 있었다면, 이제는 공인 IP를 사용해 사설망을 만든 뒤 여러 사설 IP를 사용해 훨씬 많은 IP를 사용할 수 있게 된다.
IP는 네트워크 ID, 호스트 ID로 나눌 수 있다.
네트워크 ID는 네트워크를 식별하고,
호스트 ID는 네트워크 내에서 어떤 컴퓨터인지 식별한다.
아래 클래스를 설명하면서 예시를 들겠다.
과거 IP를 나눠줄 때 사용하던 방식이다. 지금은 사용하지 않지만, 네트워크 ID와 호스트 ID의 예시를 들기 위해 설명한다.
네트워크 ID, 호스트 ID의 개념을 안다면 굳이 읽을 필요 없다.
IP를 할당할 때 각각 필요한 IP의 개수는 다르다.
서울시에서 IP를 할당받을 때와 아파트에서 IP를 할당받을 때, 각각 필요한 IP의 개수는 다를 수밖에 없다.
효율적으로 IP를 분배하기 위해 IP를 뭉텅이 단위로 나눠뒀다가, 필요할 때마다 건네주는 방식을 사용한다.
A 클래스는 IP의 첫 번째 블록만 네트워크ID, 나머지 블록은 호스트ID이다.
200.201.202.203 이라는 클래스 A의 IP가 있다면, 200이 네트워크 ID, 201.202.203이 호스트 ID가 된다.
A 클래스는 세 블록을 호스트로 갖기 때문에 하나의 네트워크에서 2의 24승만큼의 IP를 가져갈 수 있다.
B 클래스는 앞의 두 블록이 네트워크 ID, 나머지 두 블록이 호스트 ID이다.
하나의 네트워크에서 2의 16승만큼의 IP를 가져간다.
C 클래스는 세 블록이 네트워크 ID, 마지막 한 블록이 호스트 ID이다.
하나의 네트워크에서 2의 8승만큼 IP를 가져간다.
IP를 보고 네트워크와 호스트를 구별하기 위해 과거에는 네트워크마다 범위를 지정해줬다.
클래스를 사용하면 IP의 낭비가 일어난다. 소규모 네트워크에 할당하는 C클래스 기준 255개의 IP를 할당해줘야 한다. 만약 직원 50명의 소규모 회사에서 C클래스 IP를 할당받았다면, 155개의 IP가 낭비된다.
과거에는 IP가 널널했기 때문에 저렇게 뭉텅이 단위로 제공을 해줘도 됐지만 지금은 IP가 부족하다.
안그래도 부족한 IP를 낭비할 수 없어 이제는 클래스 개념을 사용하지 않는다.
더 적절하게 네트워크를 분할하기 위해 서브넷이라는 개념을 사용하게 된다.
서브넷은 하나의 네트워크를 분할한 sub network이다.
서브넷 마스크를 사용해 네트워크를 분할할 수 있는데, 예시를 통해 설명하겠다.
11000000.00001101.00000011.00000001
== 192.13.3.1(10진수)
위 IP는 클래스 C에 해당한다. 그렇다면 192.13.3은 네트워크 ID, 1은 호스트 ID가 된다.
서브넷 마스크는 네트워크 ID와 호스트 ID를 구분하기 위해 네트워크 ID인 부분을 1, 호스트 ID인 부분을 0을 넣어 만들 수 있다.
11111111.11111111.11111111.00000000
== 255.255.255.0(10진수)
아래 예시를 통해 서브넷 ID를 이해해보자.
예시 1 : 서브넷 마스크 255.255.255.0
IP : 11000000.00001101.00000011.00000001
서브넷 마스크 : 11111111.11111111.11111111.00000000
네트워크 ID: 11000000.00001101.00000011.0
호스트 ID: 0000000
=> 네트워크에 할당되는 IP 개수 : 256개(2의 8승)
예시 2 : 서브넷 마스크 255.255.255.128
IP : 11000000.00001101.00000011.00000001
서브넷 마스크 : 11111111.11111111.11111111.10000000
-> 네트워크 ID: 11000000.00001101.00000011.0
-> 호스트 ID: 0000000
=> 네트워크에 할당되는 IP 개수 : 128개(2의 7승)
192.13.3.1/24
IP 뒤에 붙는 숫자가 바로 사이더다.
IP와 서브넷 마스크를 함께 표현하기 위해 사이더를 사용한다.
단순하다. 그냥 서브넷 마스크 기준 앞에서부터 1의 개수를 적으면 된다.
사이더가 24라는 건 최상위 비트로부터 24개가 네트워크 ID라는 의미이다.
아래 서브넷 마스크와 동일한 의미를 갖는다.
IP : 11000000.00001101.00000011.00000001
서브넷 마스크 : 11111111.11111111.11111111.00000000
192.168.0.2/24 가 속한 네트워크는 몇 개의 호스트를 배치할 수 있을까?
256개라고 대답하겠지만 정답은 254개이다.
하나의 네트워크에서 2개의 IP는 사용이 불가능한데, 네트워크 주소와 브로드캐스트 주소가 디폴트로 고정되어있기 때문이다.
네트워크 주소의 역할은 전체 네트워크를 대표하는 역할, 브로드캐스트 주소는 네트워크 안에 있는 모든 IP에 응답을 전달하는 역할을 한다.
네트워크 주소는 네트워크의 첫 번째 IP, 위 예시에서 192.168.0.0가 되고,
브로드캐스트 주소는 네트워크의 마지막 IP, 위 예시에서 192.168.0.255가 된다.
아, 추가로 호스트 한 개는 게이트웨이의 역할을 해야 한다.
지금까지 우리가 이야기한 IP는 IPv4라는 방식이다.
계속 이야기했던 것처럼 IP는 약 43억개밖에 존재하지 않아 언젠가는 고갈될 자원이다.
미래를 대비하기 위해 새로운 프로토콜을 만들었는데, 그게 바로 IPv6이다.
미래에 IPv4를 대체할 수 있도록 현재 IPv4와 함께 사용되고 있다.
2001:0db8:0000:0000:8a2e:0370:7334
IPv4 방식은 8비트씩 4개의 블럭을 갖지만, IPv6 방식은 16비트씩 8개의 블럭을 갖는다.
16비트는 10진수로 한 번에 표현할 수 없기 때문에, IPv6를 표현할 때는 16진수를 사용해 표현한다. 그리고 블록을 구별할 때 콜론(:)을 사용해 표현한다.
IPv6 방식을 사용하면 2의 128승 만큼의 IP를 표현할 수 있는데, 정말 엄청나게 큰 숫자이기 때문에 아직까지 IP의 고갈을 걱정하지 않아도 된다.
다시 이 사진을 살펴보자.
해당 컴퓨터의 IP는 192.168.0.50이다.
서브넷 마스크를 통해 192.168.0.xx 라는 네트워크에 속해 있다는 걸 알 수 있다.
192.168.0.1이라는 IP가 게이트웨이의 역할을 한다.
게이트웨이, 네트워크 주소, 브로드캐스트 주소를 제외하고 총 253(256 - 3)개의 호스트를 사용할 수 있다.
또, 해당 IP는 사설 IP라는 사실도 알 수 있다. 그리고 IPv6 역시 미래를 대비해 함께 사용되고 있음을 확인할 수 있다.
https://hyoje420.tistory.com/32
https://jhnyang.tistory.com/503
https://imweb.me/blog?idx=102
https://www.youtube.com/watch?v=GK3h936Co-k
https://www.youtube.com/watch?v=gOMljj6K2V0
https://imweb.me/blog?idx=102
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-IP-%EA%B8%B0%EC%B4%88-%EC%82%AC%EC%84%A4IP-%EA%B3%B5%EC%9D%B8IP-NAT-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A7%90-%EC%89%BD%EA%B2%8C-%EC%A0%95%EB%A6%AC