IP 0.0.0.0/0 정리
aws 라우팅 테이블을 접해보면 0.0.0.0/0 이란 걸 보게 된다. 이게 정확히 무얼 뜻하는지 알아보자.
0.0.0.0/0
'네트워크 클래스'에서 00000000.00000000.00000000.00000000(0.0.0.0)~01111111.11111111.11111111.11111111(127.255.255.255)인 A클래스 네트워크는 사실 그 사이에 있는 0.0.0.0 네트워크와 127.0.0.0 네트워크가 특별한 용도의 예약된 주소라 제외 되기에
실제 'A클래스 네트워크'는 1.0.0.0~126.255.255.255(사설 네트워크 포함)이다.
그리고 '0.0.0.0' 네트워크의 의미는 바로 IP주소를 적어야 하는데, 적을 게 없을 때 쓰는 '지정된 주소 없음' 용도이다.
적을 게 없을 때 쓰는 '지정된 주소 없음'이라니 뭔가 난해하다.
일단 이 말을 이해하려면 네트워크 분야에서 반드시 필요한 3가지 요소를 알아야 한다.
그 3가지 요소란 바로
- '프로토콜 종류(포트 번호)'
- '출발지 IP주소(Source IP address)'
- '목적지 IP 주소(Destination IP address)'
이다.
왜 이 3가지가 필수 요소이냐면, 네트워크 관련된 프로그램들은 사용될 때 "[출발지 IP주소] [목적지 IP 주소]"처럼 IP주소를 적어야하는 경우가 많고, 네트워크 정보를 표현할 때도 "출발지 IP주소 | 목적지 IP주소" 형태와 같이 IP주소를 표시해야 하는 경우가 많기 때문이다.
그런데 만약 위와 같은 네트워크 프로그램에서 "IP주소를 적을 수 없는 상황"이 온다면 어떻게 해야 할까?
여기서 보통 사람들이라면 '그냥 빈 칸으로 두면 되지 않나?' 란 생각이 들 수 있지만, 위에서 말했듯 네트워크 관련 프로그램들은 주소를 적어야 하는 공간을 '빈 칸'으로 두면 안되는 경우가 많다.
그래서 이렇게 '빈 칸'으로 두면 안되니 뭐라도 적어야하는데, 적을 게 없을 때 쓰는 것이 바로 이 '지정된 주소 없음' 의미인 '0.0.0.0'이라는 것이다.
물론 이렇게 말로만 하면 이해가 안되니, 이해를 돕기위해 여러 가지 예시를 들어보겠다
i) 라우터에서 0.0.0.0
'네트워크 엔지니어'는 네트워크와 네트워크를 구분해주는 '라우터'에 특정 라우팅 프로토콜 패킷이 오면 어떤 인터페이스(연결된 데이터 전송로)로 보내라~, 특정 IP 대역 네트워크에서 온 데이터는 어떤 인터페이스로 보내라~ 와 같은 '정책'을 설정한다.
만약 이때 설정한 정책 중 그 어느 것에도 해당되지 않는 패킷이 라우터로 들어왔을 때는 어떻게 해야 할까? 당연하지만 이런 예외 패킷이 라우터로 들어왔을 때를 대비한 정책을 따로 설정해 놓아야 할 것이다.
그리고 이때 사용하는 정책이 바로 '디폴트 라우트(default route)'란 정책이다.
ii) 디폴트 라우트(default route)란
디폴트 라우터란 말 그대로 정책에 해당되지 않는 패킷들이 들어왔을 때 기본적으로(default) 보낼 인터페이스(길, route)을 만들어두는 정책이다.
그리고 이 '디폴트 라우트'를 설정하는 방법 중 하나가 ip route 0.0.0.0(IP주소) 0.0.0.0(서브넷마스크) [보낼 인터페이스 IP] 이렇게 설정하는 것이다.
아까 '0.0.0.0'의 의미는 '지정된 주소 없음'이라고 했다.
특정 IP 주소나, 네트워크 주소를 어떤 인터페이스로 보내라고 설정하는 '라우터'에서 '0.0.0.0.', 즉 지정된 주소가 없다라 설정하는 것은 무슨 의미일까?
바로 '모든 IP 주소'이다.
지정된 주소가 없다는게 왜 모든 IP주소가 될까? 왜냐하면 정책이 적용될 IP주소를 특정하지 않았으니, 이 말은 즉 지정되지 않은 IP주소들(0.0.0.0~255.255.255.255)이란 소리이고, 즉 '모든 IP 주소'가 되는 것이다.
같은 의미로 서브넷 마스크 자리에 놓은 '0.0.0.0'도,따로 지정한 마스크가 없다(모든 네트워크다)는 의미가 되는 것이다.
여기서 '디폴트 라우트'라는 것에 대해서 조금만 더 자세히 설명하자면, 원래 '라우터'에 네트워크 관리자가 특정 정책을 설정하면, 정책마다 우선순위가 부여된다.
이때 수 많은 정책 중 '디폴트 라우트'는 가장 낮은 '우선순위'를 가진다.
가장 낮은 우선 순위를 가져야지 라우터에 들어온 모든(모든 IP주소) 패킷이 높은 우선순위를 가진 정책에 먼저 비교가 된 후, 어떤 것에도 적용되지 않을 때 가장 낮은 우선 순위인 '디폴트 라우트' 정책이 반영되는 것이다.
이처럼 모든 라우터에서 예외 상황을 대비한 '디폴트 라우트' 정책을 설정할 때 '지정한 IP주소 없음' 의미인 '0.0.0.0'을 쓴다.
iii) 서버 컴퓨터의 0.0.0.0
다른 컴퓨터들이 접속하는 '서버' 역할을 하는 컴퓨터에서 '0.0.0.0'이란 주소를 쓰는 경우가 있다. 이때의 '0.0.0.0('지정한 IP주소 없음)'도 '모든 IP 주소' 라는 의미가 된다.
현재 자기 개인 컴퓨터(PC)에서 cmd -> 'netstat -an'을 치면
이렇게 netstat(network statistics) -an(all, number)란 명령어 뜻대로 현재 컴퓨터의 '모든(-a) '네트워크 정보에 대한 통계'를 숫자로(-n)보여준다.
위 그림의 경우 맨 위를 보면 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 이렇게 써져있다.
외부 주소에 있는 '0.0.0.0:0'은 우리가 아는 '따로 지정된 주소가 없음', 즉 '모든 IP주소의 모든 포트 번호' 임을 쉽게 알 수 있다.
'로컬 주소'에 있는 '0.0.0.0:135'인 경우에도 당연히 '따로 지정된 주소가 없음'이니 '모든 IP주소'라 볼 수 있는데, 여기서 주의해야 하는 것은 '로컬 주소의 0.0.0.0'이라는 점이다.
로컬(내 컴퓨터에 연결된) 주소에서 '0.0.0.0(모든 IP 주소)'은 당연히 내 컴퓨터에 연결된 모든 주소를 의미한다.
물론 여기서 "내 컴퓨터에 연결된 모든 주소"라는 글을 보고 이런 의문이 들것이다.
"내 컴퓨터에 연결된 모든 주소??? 무슨 소리지? 원래 컴퓨터에는 IP 주소가 하나밖에 없지 않나?"
아시는 분은 아시다시피, 원래 컴퓨터에 ip주소를 할당 받으려면 '랜 카드'라는 장치가 필요하다, 그리고 이 말은 달리 말하면 '랜 카드'를 여러 개 장착시 여러 개의 IP 주소를 가질 수 있다는 소리가 된다.
위에서 말했듯 '랜 카드'가 여러 개면 IP주소를 여러 개 가질 수 있다고 했다.
만약 내 컴퓨터에 공인 IP 주소를 할당받은 랜 카드가 2개 있다면, 내 컴퓨터는 IP 주소가 2개 인 것이다.(물론 따로 정책을 정하지 않았을 시, 보통 우선순위에 따라 1개의 랜카드만 사용된다.)
예를 들어 내가 갖고 있는 공인 IP 주소가 '155.23.43.2', '155.23.43.3' 두개라고 해보자.
그리고 이렇게 IP주소가 여러개 일 때 '로컬주소'에 있는 '0.0.0.0:135(135는 RPC 프로토콜 포트번호입니다)'의 의미는, 자연스럽게 '155.23.43.2:135', '155.23.43.3:135'와 같은 의미가 되는 것이다.
물론 위와 같이 여러 개의 IP 주소를 가질 일이 얼마나 있겠냐 의문이 들것이다.
사실 개인이 사용하는 개인 컴퓨터(PC)인 경우 쓸 일이 없다. 그러나 다른 컴퓨터가 접속하는 서버나 패킷이 경유하는 중간 컴퓨터라면 쓸 일이 많다. 이러한 중간 컴퓨터의 대표적인 장비로는 '라우터'가 있다(라우터도 운영체제, CPU, 메모리, 전력, 저장공간을 가진 컴퓨터이다)
그리고 다른 중간 컴퓨터이자 서버로도 쓸 수 있는 여러 개의 IP 주소를 가지게 하는 대표적인 컴퓨터로는 대표적으로 외부망과 내부망을 나누고 다른 정책을 적용하는 '방화벽'이 있다.
외부망(인터넷)-----방화벽(컴퓨터)-----스위치-----내부망(사설망) 컴퓨터들과 서버들
위는 가장 간단한 방화벽 구조로, 이 때의 '방화벽'은 외부망과 내부망사이에 껴서 인터넷에서 들어오는 악성 패킷을 걸러주고 내부망 서버로 보내거나, 내부망에 있는 컴퓨터들의 패킷을 외부망으로 보내주는 것이다.
위와 같은 기능이 가능한 이유는 일단 3가지가 있다.
- 방화벽을 만들 게 해주는 프로그램(대표적으로 iptables)은 기본적으로 공유기의 'NAT(사설 네트워크와 공인IP 변경)'기능과 포트포워드(특정 포트 패킷은 사설망 내 특정 컴퓨터로 보내는 것)를 지원
- 공인 IP주소와 사설 IP주소는 당연히 같은 네트워크에 속할 수 없음
- 인터넷과 연결되는 곳에 공인 IP주소를 할당 받아야하니 외부용 랜카드 1개, 내부망(사설)과 연결되는 랜카드 1개, 총 2개가 필요
이렇게 간단한 방화벽 구조를 짜도 최소 랜 카드가 2개가 필요하고, 이렇게 랜 카드 2개를 쓰는 방화벽 입장에서 PC와 똑같이 '로컬(내 컴퓨터와 연결된) 주소에 ''0.0.0.0:80' 이렇게 정책을 짜놓으면 이것은 '외부망과 연결된 공인 IP주소에서 오는 80번 포트 패킷'과 '내부망과 연결된 사설 IP주소에서 오는 80번 포트 패킷' 둘다 허용 이렇게 되는 것이다.
이렇듯 컴퓨터(서버)에서 사용되는 '0.0.0.0'도 '따로 주소를 지정하지 않음'이고, 이것은 곧 '모든 IP 주소'가 된다는 것이다.
iv) DHCP(Dynamic Host Configuration Protocol)에 속한 기기에서 0.0.0.0
동적으로 IP 주소를 할당해주는 'DHCP서버'의 서비스를 받는 컴퓨터들은, 당연히 컴퓨터가 부팅된 직후엔 IP주소가 없다.
그리고 이 때 IP주소가 없기 때문에 '특정 주소를 지정하지 않음' 의미인 '0.0.0.0'을 가진다.
위에서 네트워크 관련 프로그램들은 항상 3가지 요소(프로토콜, 출발지 IP주소, 목적지 IP주소)가 필요하다 고 했다.
그렇기 때문에 부팅 직후 아직 DHCP에게 IP주소를 받지 못한 컴퓨터들은 DHCP 서버를 찾고 IP주소를 할당해달라는 브로드캐스트를 보낼 때 '출발지 주소'에 이 '0.0.0.0'을 적는다.
즉, DHCP(프로토콜), 0.0.0.0(출발지 주소), 255.255.255.255(목적지 주소) 이렇게 보낸다는 것이다. 물론 데이터링크 계층을 위한 '브로드캐스트 Mac주소(FF:FF:FF:FF:FF:FF)'와 '자신의 Mac주소'도 같이 사용한다.
자신의 Mac 주소도 보냈기에, DHCP서버가 컴퓨터를 구분하고 답장을 할 수 있는 것이다.
물론 'windows 운영체제인 컴퓨터'인 경우 DHCP 서버에게 IP주소를 할당받지 못한 경우 '169.254.x.x/16'인 IP주소를 갖게 된다.
이처럼 DHCP 서버를 이용하는 클라이언트도, 부팅 직후 IP주소가 없을 때 '특정 주소를 지정하지 않음'이란 의미인 '0.0.0.0'이란 주소를 사용한다.
0.0.0.0과 127.0.0.1차이
그런데 내가 알기론 127.0.0.1이란 IP주소는 자기 자신을 가리키는 특별 주소인데.. 그럼 0.0.0.0과 다를 게 뭘까?
사실 이미 위에서 0.0.0.0의 용도를 보면 알겠지만, 그냥 딱 짚어서 말하자면 '127.0.0.1'은 자기 자신을 가리키는 용도, 그 딱 한개뿐이다.
하지만 '0.0.0.0'은 위에서 봤다시피 '특정한 주소를 지정하지 않음, 모든 주소'라는 의미로 다양하게 쓰인다.
127.0.0.1
127.0.0.1은 로컬 호스트 즉 자기 스스로를 가리키는 IP이다.
- 동일한 기계에서만 액세스할 수 있음
- 포트가 인터넷이나 네트워크가 아닌 PC 자체의 연결만을 수신
255.255.255.255
255.255.255.255: 브로드캐스트 용도로 사용하기 위해 예약된 IP 주소이다.
예약된 IP는 일반적으로 소프트웨어, 개인 네트워크, 호스트, 서브넷, 문서, 변환, 멀티 캐스트, 브로드 캐스트, 로컬 통신, 루프백, 릴레이, 링크, 매핑, 테스트 및 향후 사용과 같은 특수 목적으로 사용된다.
::/0
0.0.0.0의 IPv6 버전을 말한다.
정리
- '0.0.0.0'의 뜻은 '지정된 주소가 없음'이란 의미며, 쉽게 '모든 주소'라고 해석해도 된다
- '0.0.0.0'은 라우터에서 '디폴트 라우트 정책'에 쓰인다
- '디폴트 라우트'란 정책에 해당되지 않는 패킷들이 들어왔을 때 기본적으로(default) 보낼 인터페이스(길, route)을 만들어두는 정책이다.
- 다른 컴퓨터가 접속하는 '서버' 컴퓨터에서도 '0.0.0.0'은 '지정된 주소 없음, 모든 주소'란 의미지만, '로컬(컴퓨터와 연결된) 주소'에서의 '0.0.0.0'은 로컬 주소이기에 '내 컴퓨터랑 연결된 모든 주소'가 된다
- DHCP 서버에게 동적으로 IP주소를 할당받는 컴퓨터들은 IP주소를 할당받지 못했을 때 '0.0.0.0' IP주소를 갖는다, '윈도우즈 운영체제' 컴퓨터인 경우 '169.254.x.x/16' 주소를 갖는다.
참고
- https://elecs.tistory.com/146
- https://ko.eyewated.com/0-0-0-0%EC%9D%80-%EC%9D%BC%EB%B0%98-ip-%EC%A3%BC%EC%86%8C%EA%B0%80-%EC%95%84%EB%8B%99%EB%8B%88%EB%8B%A4/
- https://malragasi.tistory.com/14
- https://www.reddit.com/r/aws/comments/uh0hzm/is_there_a_difference_between_00000_and_000032/
- http://daplus.net/server-ip-%EC%A3%BC%EC%86%8C-0-0-0-0%EA%B3%BC-127-0-0-1%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C/
- https://www.scienceall.com/%EB%A3%A8%ED%94%84%EB%B0%B1-%EC%A3%BC%EC%86%8Cloopback-address/
- https://www.quora.com/What-is-the-significance-of-the-IP-address-255-255-255-255