안녕하세요 마무입니다. 오늘은 "0.0.0.0 의미"와 "0.0.0.0 127.0.0.1 차이", "디폴트 라우트"에 대해서 자세히 포스트를 해보려고 합니다!
이 포스트를 이해하려면 '네트워크 독학 페이지'에 있는 '기초 네트워크 지식' 섹터에 있는 글들을 전부 읽어야 합니다.
네트워크 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_15.html
-----목차-----
1. 0.0.0.0이란
i) 라우터에서 0.0.0.0
ii) 서버 컴퓨터의 0.0.0.0
iii) 디폴트 라우트란
iv) DHCP(Dynamic Host Configuration Protocol)에 속한 기기에서 0.0.0.0
2. 0.0.0.0과 127.0.0.1차이
3. 정리
---------------
더 다양한 네트워크 지식들은
네트워크 독학 페이지 : https://mamu2830.blogspot.com/p/blog-page_15.html
에서 찾아보세요!
1. 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(사설 네트워크 포함)이라고 했었습니다.
이 중 127.0.0.0 네트워크는 다른 포스트에서 이미 다뤘기에 그 포스트에서 보고 오시면 되고
루프백 인터페이스, 주소(127.0.0.0 네트워크와 127.0.0.1), 목적, lo0
이 포스트에서 주로 다룰 '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가지가 있습니다.
a) 방화벽을 만들 게 해주는 프로그램(대표적으로 iptables)은 기본적으로 공유기의 'NAT(사설 네트워크와 공인IP 변경)'기능과 포트포워드(특정 포트 패킷은 사설망 내 특정 컴퓨터로 보내는 것)를 당연히 지원
b) 공인 IP주소와 사설 IP주소는 당연히 같은 네트워크에 속할 수 없음
c) 인터넷과 연결되는 곳에 공인 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'을 가집니다.
제가 '1. 0.0.0.0이란' 초중반에서 네트워크 관련 프로그램들은 항상 3가지 요소(프로토콜, 출발지 IP주소, 목적지 IP주소)가 필요하다 고 했었잖아요?
그렇기 때문에 부팅 직후 아직 DHCP에게 IP주소를 받지 못한 컴퓨터들은 DHCP 서버를 찾고 IP주소를 할당해달라는 브로드캐스트를 보낼 때 '출발지 주소'에 이 '0.0.0.0'을 적습니다.
즉, DHCP(프로토콜), 0.0.0.0(출발지 주소), 255.255.255.255(목적지 주소) 이렇게 보낸다는 것이죠. 물론 데이터링크 계층을 위한 '브로드캐스트 맥주소(FF:FF:FF:FF:FF:FF)'와 '자신의 맥주소'도 같이 사용합니다.
자신의 맥 주소도 보냈기에, DHCP서버가 컴퓨터를 구분하고 답장을 할 수 있는 것이죠.
물론 'windows 운영체제인 컴퓨터'인 경우 DHCP 서버에게 IP주소를 할당받지 못한 경우 '169.254.x.x/16'인 IP주소를 갖게 됩니다.
이처럼 DHCP 서버를 이용하는 클라이언트도, 부팅 직후 IP주소가 없을 때 '특정 주소를 지정하지 않음'이란 의미인 '0.0.0.0'이란 주소를 사용한다는 것이죠.
2. 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'은 위에서 알려드린 것처럼 '특정한 주소를 지정하지 않음, 모든 주소'라는 의미로 다양하게 쓰였죠.
3. 정리
a) '0.0.0.0'의 뜻은 '지정된 주소가 없음'이란 의미며, 쉽게 '모든 주소'라고 해석해도 된다
b) '0.0.0.0'은 라우터에서 '디폴트 라우트 정책'에 쓰인다
c) '디폴트 라우트'란 정책에 해당되지 않는 패킷들이 들어왔을 때 기본적으로(default) 보낼 인터페이스(길, route)을 만들어두는 정책
d) 다른 컴퓨터가 접속하는 '서버' 컴퓨터에서도 '0.0.0.0'은 '지정된 주소 없음, 모든 주소'란 의미지만, '로컬(컴퓨터와 연결된) 주소'에서의 '0.0.0.0'은 로컬 주소이기에 '내 컴퓨터랑 연결된 모든 주소'가 된다
e) DHCP 서버에게 동적으로 IP주소를 할당받는 컴퓨터들은 IP주소를 할당받지 못했을 때 '0.0.0.0' IP주소를 갖는다, '윈도우즈 운영체제' 컴퓨터인 경우 '169.254.x.x/16' 주소를 갖는다.
오늘은 이렇게 많이 헷가리는 0.0.0.0과 127.0.0.1, 디폴트 라우트에 대해서 자세히 다뤄봤습니다. 꼭 도움이 되셨으면 좋겠고! 도움이 되셨다면 따뜻한 댓글 및 팔로우 클릭을 해주시면 저에게 큰 힘이 됩니다!
그럼 다음에 더 좋은 포스트로 찾아뵙겠습니다.
nginx와 docker등에서 0.0.0.0를 사용하면서 궁금하여 찾아봤는데 이렇게 좋을 글을 보게되었네요 쉽게 설명해줘서 감사합니다!
답글삭제도움이 돼 정말 다행입니다!! 힘이나는 따뜻한 댓글 감사합니다!
삭제