프로그래밍/네트워크

네트워크 IP, 라우터(IP주소 종류, 공인IP, 서브넷마스크, 게이트웨이 등)

브래드 킴 2022. 12. 21. 16:09
728x90

인터넷 또는 다른 네트워크간 통신을 위해서는 네트워크간에 식별할 수 있는 식별자인 공인IP가 필요하다. 공인IP는 인터넷서비스제공자인 ISP로부터 부여 받는다. 그래서 현실에서는 통신사와의 계약을 통해 집 wifi 또는 휴대폰에 IP를 부여받게 되는 것이다.

IP주소의 종류

IP는 앞서 말한바와 같이 ISP로부터 부여받는 공인IP(주로 라우터와 인터넷직접연결PC)와 랜을 사용하여 private하게 할당하여 자유롭게 사용하는 사설IP가 있다. 보통 라우터의 DHCP기능등을 사용하여 할당하게 된다.

*DHCP란 라우터의 기능으로서, IP주소를 자동으로 할당하는 프로토콜을 말함.

IP주소의 버전

IP버전에는 IPv4와 IPv6가 있다.

IPv4는 32비트 체계로서 xxx.xxx.xxx.xxx 체계를 갖고 있고, 대략 43억개 가량의 경우의 수가 나온다. 각 xxx마다 8비트씩 부여되므로, 2^8의 범위인 0~255까지의 숫자를 갖게 된다.

IPv6는 128비트로 구성되어 있고 부족해진 ip를 대체하기 위해 등장했다. 이로 인해 거의 무한한 경우의 ip수를 갖게 되었다.앞으로는 IPv6를 많이 사용하게 되겠지만, 현재는 여전히 IPv4를 많이 사용하고 있다. 그래서 부족한 ip를 대체하여 사설 IP를 활용하고 있는 상황이다.

IP주소의 구성

IP주소는 네트워크 ID와 호스트ID로의 구성

IP주소는 기본적으로 ipv4를 사용한다는 가정하에, 이 xxx.xxx.xxx.xxx 4자리 ip구성은 네트워크ID+호스트ID로 구성이 돼 있다. 네트워크 ID는 어떤 네트워크인지를 나타내고, 호스트ID는 해당 네트워크의 어떤 컴퓨터를 나타낸다고 볼 수 있겠다.

만약 어떤 IP주소가 192.168.1.1 이라하고, 192.168.1까지가 네트워크ID라고 가정하자. 그렇다면 호스트ID는 나머지 1이 될 것이다.

이 호스트ID가 의미하는 것이 사설IP를 의미하는 것은 아니니 착각하지 말자. 192.168.1까지가 하나의 네트워크로 묶이게 되고, 여기에 속하는 네트워크에 속하는 모든 호스트ID들은(192.168.1.0 ~ 192.168.1.255) 브로드캐스팅시에 모든 데이터를 한꺼번에 수신받게 되는 브로드캐스트 단위가 된다. 이게 호스트ID로 구분짓는 주된 이유라고 볼 수 있을것이다. 자세한 내용은 뒤에 설명.

*브로드캐스팅 : 송신 호스트가 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식

공인IP와 사설IP의 범위

일단, 결론부터 아래표에 정리해보도록 하겠다. 아래표는 외워도 좋을것 같다.

클래스 공인IP 범위 사설IP 특징
A 1.0.0.0 ~ 126.255.255.255 10.0.0.0 ~ 10.255.255.255(사설IP)
127.0.0.0 ~ 127.255.255.255(local을 가리키는 루프백IP)
대규모 네트워크 주소

B 128.0.0.0 ~ 191.255.255.255 172.16.0.0 ~ 172.31.255.255(사설IP) 중규모 네트워크 주소
C 192.0.0.0 ~ 223.255.255.255 192.168.0.0 ~ 192.168.255.255(사설IP) 소규모 네트워크 주소


공인 IP의 종류를 A,B,C클래스를 나누고 있고, 각 클래스마다 사설IP 영역라는 것을 별도로 두고 있다. 즉 10 으로 시작하는 IP가 있다면, 이는 A클래스로 할당받은 공인IP에 속하는 사설 IP라고 보면 될 것이다.

공인IP가 다르다면, 사설IP가 같다고 할지라도 해당 랜의 범위내에서만 겹치지 않는다면 사용하는데는 문제가 없을 것이다.

그런데, 잘 보면 위에 표에 빠진 IP가 몇개 있다.

먼저, 0.0.0.0이 있는데, 이는 모든 IP를 의미하는 특별한 IP이다. 예를 들어 aws에서 allow 0.0.0.0라고 돼 있다면 모든 IP의 접근을 허용한다. 뭐 이런 의미로 사용이 된다.

또한 224~부터 시작되는 IP가 빠졌는데, 이는 D,E 클래스로 구분된다. 그러나, 일반적으로 사용되지는 않으니 설명은 생략하고 A,B,C클래스만 알아두자.

IP가 xxx.yyy.zzz.kkk 이렇게 생겼다고 가정할때, A,B,C클래스의 xxx의 IP 범위가 다르다는 것은 확인했다.

그런데, 그게 클래스를 나눈 목적인가? 그들의 차이가 무엇인지 살펴보자.

A클래스 B클래스 C클래스의 차이

위 표에는 나와 있지 않지만, 각 클래스마다 네트워크ID와 호스트ID의 범위가 다르다.

xxx.yyy.zzz.kkk 의 IP 구성 중에서
A클래스는 xxx만이 네트워크 ID이고 나머지는 호스트ID이다.
B클래스는 xxx.yyy까지가 네트워크 ID이고 나머지는 호스트ID이다.
C클래스는 xxx.yyy.zzz까지가 네트워크 ID이고 나머지는 호스트ID이다.

이렇게 네트워크의 크기를 구분짓기 위해 A,B,C클래스를 두는 것이고, 이는 곧 브로드캐스팅의 범위를 결정짓는다.

A클래스의 경우 기본적인 브로드캐스팅의 범위가 굉장히 넓은것을 알수가 있다. xxx.0.0.0 ~ xxx.255.255.255 까지가 모두 브로드캐스트를 공유하는 영역이 되기 때문이다.

B,C클래스로 갈수록 작아진다. 브로드캐스팅의 범위가 넓다는것은 같은 네트워크망을 공유하는 범위가 넓다는 뜻이고, 이로 인해 대규모 네트워크를 운용해야 하는 큰 기업이나 서비스에 할당된다고 보면 될것이다.

네트워크 주소와 브로드캐스트 주소

네트워크 주소는 각 클래스별 호스트ID가 0인 경우를 말한다. 브로드캐스트는 각 클래스별 호스트ID가 255인 경우를 말한다. 자세히 살펴보자.

네트워크 주소

네트워크 주소는 해당 네트워크를 가리키는 주소 역할을 한다. C클래스라면 xxx.yyy.zzz.kkk 중에 xxx.yyy.zzz가 네트워크id이라고 설명하였다. 이 네트워크 대역대에서 주소 역할을 하는 것이 네트워크 주소이고, xxx.yyy.zzz.0이라는 IP가 이 대역대의 네트워크 주소 역할을 한다.

브로드캐스트 주소
브로드주소 또한 해당 네트워크에 주소 역할을 하긴 하는데, 네트워크 주소와는 다르게 단순히 해당 네트워크의 위치로서의 주소가 아니라, 해당 네트워크 안에 모든 호스트ID에게 전달받은 데이터를 전파하는 용도의 주소 역할을 한다. 즉, 특정 네트워크에 데이터를 모두 전파하고 싶다면 브로드캐스트 주소인 xxx.yyy.zzz.255 인 브로드캐스트 주소로 데이터를 전송하면 된다.

서브넷의 구조

네트워크를 분할하는 것을 서브넷팅이라고 하는데, 다소 추상적으로 들릴 것 같다.

예를 들어, S기업에서 A클래스 대역대를 하나 ISP로부터 받았다고 해보자. A클래스이다 보니, 8비트는 네트워크ID 나머지24비트는 호스트ID를 가리키고 있다. 그런데 문제점은 S기업입장에서 호스트ID의 범위가 넓고, 브로드캐스팅 범위가 너무 넓다는 것이다. 브로드캐스트로 전송되는 패킷을 받다보니, 네트워크 자체가 혼잡하고 느리다. 그래서 할당받은 IP의 호스트ID의 범위를 줄이고자 한다.

이때 사용 되는 것이, 서브넷팅이라는 기술이고, 서브넷 마스크라는 것이 활용이 된다. 서브넷마스크는 마스크라는 단어처럼 뭔가를 가린다는 뜻인데, 이때 가린다는 것은 호스트ID를 가린다고 이해하면 될듯하다. 호스트ID를 가림으로서 호스트ID의 범위가 줄어들고, 그 자리만큼 서브넷ID라는 것으로 대체하게 되는 것이다. 이로 인해 브로드캐스팅 범위가 줄어들고, 네트워크가 쪼개지는 효과가 생긴다.

만약에, 123.10.10.10 이라는 IP가 있다고 가정해보자. 123으로 시작하니 A클래스의 IP라는 것을 알 수가 있다. 또한 A클래스이니 123은 네트워크ID이고, 뒤의 10.10.10이 호스트 ID를 가리킨다는 것도 알 수 있다.

근데 브로드캐스팅시 123으로 시작하는 모든 네트워크에 데이터가 전파되다보니, 너무 혼선이 생긴다. 그래서, 이 호스트ID의 범위를 10.10 정도까지만으로 줄여 브로드캐스팅의 범위를 줄이고 싶다면, 그때 사용하는 방법은 IP를 123.10.10.10/16이라고 표기하는 것이다.

저 표기법은 IP중에 앞의 123.10을 마스킹 처리한다는 의미이고, 123은 네트워크ID이니까 냅두고, 호스트ID인 10을 마스킹처리하여 이 10을 서브넷ID로 만들어버려 호스팅ID에서 제외시키는 것이다. 그렇다면 /16? 이 숫자가 의미하는 것은 무엇일까?

서브넷마스크의 구성도 일반 IP처럼 aaa.bbb.ccc.ddd의 구성을 가진다. 위의16이 의미하는 것은 서브넷마스크의 aaa.bbb가 255.255로 돼 있다는 것이다. 255라는 10진수 숫자는 2진수 1이 8개로 구성돼 있다는 것과 같은 것이고 255.255 이므로 1이 16개로 구성돼 있다는 의미이다.

11111111 11111111 00000000 0000000

이렇게 생긴, 서브넷마스크로 IP주소를 가려(마스킹)하여 1(2진수)이 있는 곳 중에 네트워크ID가 아닌 호스트ID가 있다면, 그 ID를 서브넷ID로 만들어 버려서 호스팅ID의 범위를 줄이도록 한다는 것이다.

아래 표와 같은 case가 나올 수 있으니, 참고해서 보면 더욱 이해하기 편할 것 같다.

A클래스 IP 서브넷마스크 서브넷마스크(2진수표기) 서브넷마스크 반영 IP표기 네트워크 ID와 호스트ID의 범위
네트워크ID 호스트ID
123.10.10.10 255.0.0.0 11111111.0.0.0 (8개) 123.10.10.10/8 123 10.10.10
255.255.0.0 11111111.11111111.0.0 (16개) 123.10.10.10/16 123.10 10.10
255.255.255.0 11111111.11111111.11111111.0(24) 123.10.10.10/24 123.10.10 10


서브넷마스크를 8, 16, 24가 아니라 20, 28 등으로 더 쪼개서 부여함으로서 네트워크를 더 세분하게 분할하는 것도 가능하다는 점 참고하시길 바란다.

 

라우터

라우터의 기본적인 역할은 랜에서의 스위치의 역할과 비슷하다.

 

일종의 허브, 브릿지 역할을 하여 스위치1 -> 라우터 -> 스위치2 -> 라우터 -> 스위치1 등의 연계 역할 + 네트워크를 분할하는 역할을 한다. 이게 무슨 말인가? 아래 그림을 보자

출처)https://yohanpro.com/posts/%EB%9D%BC%EC%9A%B0%ED%84%B0%EC%9D%98%20%EA%B5%AC%EC%A1%B0/

위의 그림과 같이 라우터는 private한 네트워크의 스위치들간에 허브역할을 하기도 하고, 네트워크를 2개로 분할하는 역할을 하고 있다. 더불어, private망을 벗어나 public 네트워크로 나가는 교두보가 된다. 전체적인 그림은 이러하고, 그 세부적으로 알아야할 어떤 개념들이 있는지 살펴보자.

 

게이트웨이

위의 사진을 보면, 스위치1에서 스위치2로 데이터를 전송하려면 라우터를 통해야 하고 라우터에는 스위치1의 요청을 받아 줄 수 있는 출입구와도 같은 IP가 필요하고(위의 192.168.1.1) 스위치2와 관련된 IP 또한(위의 192.168.2.1) 각각 있어야 한다. 이를 게이트웨이라 한다. 각각의 스위치에서는 다른 네트워크와 통신할때 이 게이트웨이 IP를 보고 요청을 하게 된다. 

라우팅테이블

라우팅이라는 것은 각각의 네트워크가 라우터를 통해 통신을 함에 있어 최적의 경로를 찾는 것이고, 이를 위해서는 라우터에 각각의 네트워크 정보가 등록이 되어 있어야 한다. 이를 라우팅테이블이라 한다.

 

NAT(Network Address Translation)

앞서 설명한 바와 같이, private 네트워크들간의 통신의 경우 라우터를 중간에 두고 게이트웨이 IP를 가지고 이용하지만, 외부 네트워크 또는 인터넷망으로 나갈때는 공인IP가 필요하다. 이때 라우터에 내장된 NAT기술을 통해, private IP에서 ISP로부터 할당받은 공인IP로 변환하는 작업을 NAT라고 한다. 즉, private 네트워크에서 외부네트워크로 데이터를 보낼때, private IP를 출발지 주소로 하는 것이 아니라 public IP로 변환하여 출발지 주소로 달고 나가게 되는 것.

 

 

728x90