어떻게 여러 기기, 하나의 주소, NAT
집에는 휴대폰도 있고 노트북도 있고 TV도 있다. 그런데 바깥세상이 보는 우리 집 주소는 단 하나뿐이다. 그 많은 기기가 어떻게 주소 하나로 함께 인터넷에 나갈 수 있을까? 그 비밀은 집 안의 공유기가 쥐고 있어요.
여러 기기, 하나의 주소
집 안에서 인터넷을 쓰는 기기는 하나가 아니다. 휴대폰, 노트북, TV가 모두 공유기에 연결되어 있고, 공유기는 기기마다 집 안에서만 통하는 주소를 하나씩 나눠 준다. 이것을 사설 주소라고 부른다. 아파트 안에서만 쓰는 호수와 비슷해요.
하지만 바깥 인터넷이 보는 우리 집 주소는 공유기가 가진 공인 주소 하나뿐이다. 그래서 기기들이 바깥으로 나갈 때는 공유기가 사설 주소를 떼고 공인 주소를 붙여서 내보낸다. 이 일을 NAT라고 하는데, '네트워크 주소 변환'을 뜻하는 영어 낱말의 첫 글자를 딴 이름이에요.
어느 기기를 눌러도 바깥으로 나가는 주소는 똑같았다. 휴대폰도 노트북도 TV도 결국 같은 공인 주소를 달고 나갔으니, 바깥에서 보면 셋 다 한 집에서 온 요청이다.
이렇게 주소를 나눠 쓰는 데에는 까닭이 있어요. 지금도 널리 쓰는 주소 체계는 만들 수 있는 주소의 수가 세계 인구보다도 적어서, 집집마다 기기 수만큼 공인 주소를 줄 수가 없다. 그런데 주소가 같으면 의문이 하나 생긴다. 응답이 돌아왔을 때 그것이 어느 기기의 몫인지 공유기는 어떻게 알까?
누가 보냈는지 표에 적는다
공유기는 바깥으로 나가는 요청마다 기록을 남긴다. 그 기록을 모은 것이 NAT 표다. 어느 기기가 바깥의 어느 서버로 보냈는지를 한 줄씩 적어 두는 것이다. 'TV가 영상 서버로 보냄' 같은 식이에요.
이때 앞에서 배운 포트 번호도 함께 적는다. 같은 서버로 두 기기가 동시에 요청을 보내도 줄마다 포트 번호가 달라서 짝이 섞이지 않기 때문이다. 나가는 요청마다 표에 한 줄씩 남으니, 나중에 응답이 오면 표만 찾아보면 된다.
기기를 눌러 바깥으로 보내 보자. 공유기가 '기기 ↔ 바깥 요청' 짝을 표에 한 줄씩 적어요.
기기를 보낼 때마다 표에 새 줄이 하나씩 쌓였다. 이제 표만 보면 어느 줄이 어느 기기의 요청인지 또렷하다.
이 표가 NAT의 핵심이에요. 주소는 하나로 묶어 내보내되, 누가 보냈는지는 표가 기억한다. 표의 줄이 영원히 남는 것은 아니어서, 한동안 오가는 것이 없으면 공유기가 지운다. 그렇다면 바깥에서 응답이 돌아올 때 이 표가 어떻게 쓰이는지 보자.
응답을 되돌린다
바깥 서버가 답을 보내왔다. 이 답은 먼저 우리 집 공인 주소, 곧 공유기에 도착한다. 집 안에는 기기가 여럿인데, 이 답은 누구에게 건네야 할까?
공유기는 아까 적어 둔 표를 찾아본다. 답에 적힌 포트 번호와 보낸 서버를 표의 줄과 맞춰 보면 'TV가 영상 서버로 보낸 요청의 답'이라는 것이 나온다. 그러면 공인 주소를 떼고 TV의 사설 주소를 다시 붙여 TV에게 정확히 건네줘요. 표 한 장이 돌아오는 길을 되짚어 주는 셈이다.
바깥에서 온 응답을 보고, 표에서 짝을 찾아 맞는 기기를 눌러 되돌려 줘요.
표가 가리키는 기기를 누르자 응답이 제자리를 찾아갔다. 다른 기기를 누르면 표와 맞지 않아 되돌려지지 않았다.
주소는 하나로 묶였지만 표 덕분에 헷갈릴 일이 없다. 나갈 때는 여러 주소를 하나로 모으고, 돌아올 때는 표를 보고 다시 갈라 준다. 집에서 동영상을 보고 메시지를 주고받는 동안에도 공유기는 이 일을 쉴 새 없이 되풀이해요.
바깥에서 먼저 못 들어온다
여기서 덤으로 얻는 것이 있다. 응답이 들어오려면 표에 짝이 있어야 했고, 그 짝은 안의 기기가 먼저 요청을 보낼 때 생겼다.
그렇다면 바깥에서 먼저 걸어오는 접속은 어떨까? 표에는 그런 짝이 없다. 공유기는 누구에게 건넬지 모르니 그냥 버린다. 안에서 시작한 연결만 돌아올 수 있는 것이다. 그래서 NAT는 천연 방화벽 노릇을 해요.
안에서 시작한 요청의 응답과, 바깥에서 먼저 거는 접속을 눌러 보자. 표에 짝이 있으면 통과하고, 없으면 막혀요.
안에서 시작한 요청의 응답은 표에 짝이 있어서 무사히 들어왔다. 바깥에서 먼저 건 접속은 짝이 없어 문 앞에서 막혔다.
누가 일부러 막으라고 정한 것이 아니다. 표를 보고 되돌리는 방식이라 저절로 그렇게 된 것이고, 그래서 '천연' 방화벽이라고 불러요. 다만 NAT는 처음부터 보안을 위해 만든 장치가 아니어서 이것만으로 집을 다 지켜 주지는 못한다. 무엇을 어떻게 지키는지는 보안 영역에서 따로 다룬다.
정리
한 줄로 모으면 이렇다. 집 안의 여러 기기는 저마다 사설 주소를 가지지만, 바깥으로 나갈 때는 공유기를 거쳐 공인 주소 하나로 나간다.
공유기는 누가 어디로 보냈는지를 포트 번호와 함께 표에 적어 두었다가, 응답이 오면 표를 보고 맞는 기기로 되돌려요. 그래서 주소 하나를 여럿이 함께 써도 헷갈리지 않는다. 바깥에서 먼저 들어올 수도 없으니 천연 방화벽 노릇까지 한다. 이것이 NAT다.
핵심을 차례로 눌러 되짚어 보자. (하나의 주소로 나감 → 표로 기억 → 응답 되돌림 → 천연 방화벽)
이제 한 집이 주소 하나로 어떻게 함께 인터넷을 쓰는지 알았다. 집 안의 기기들이 바깥과 데이터를 주고받는 길이 갖추어진 셈이다.
그렇다면 그 길로 실제로 무엇이 오갈까? 우리가 가장 자주 하는 일은 브라우저로 웹 페이지를 여는 것이에요. 다음 레슨에서는 브라우저와 웹 서버가 웹 페이지를 주고받을 때 쓰는 약속, HTTP를 다룬다.