이 포스트는 널널한 개발자님 강의를 참조하며 작성하였습니다.
공유기라고 하는 것은 보통 인터넷 공유기이다. 이게 사실은 예전에 공유기를 구현한 기술이 여러개였지만 오늘날은 대부분 NAT기술을 이용한다. NAT는 Network Address Translation인데 여러개 Netwrok Address가 IP주소이다. 그래서 정확히는 인터넷 공유기보다는 IP주소 공유기라고 부를 수 있다. 그런데 IP주소에는 여러가지가 있는데 host에 붙는 유니크한 IP주소도 있고 Loopback도 있고 Multicast도 있고 broadcast도 있다. 그런데 이렇게 말고 IP주소를 다른 형식으로 분류하면 2가지로 나눌 수 있는데 public(global) IP주소와 private IP이다. private IP는 어느 특정구간을 사설주소라고 해서 뽑는 경우이다. 이 사설주소의 특징이 뭐냐면 public IP에서 유통될 수 없는 IP라는 것이다. 그러니까 테스트든 인터넷 자체를 사설로 구현하든 그런 용도로 쓰이는건데 그 주소대역을 쓰는 것이 일단 인터넷 공유기 즉, NAT기술이 적용이 되었을 때의 특징이다.
기본적으로 주소변환이란 개념은 IP header의 들어있는 정보를 조작기술을 적용해서 하나의 IP를 가지고 여러대가 동시에 쓸 수 있는 기술이다. NAT는 말 그대로 보면 주소를 제어하는 것 같지만 실제로는 포트번호까지도 제어를 한다. 그래서 port Address를 몽땅 변환한다. 그래서 이런걸 이용하다보니 IP주소부족 문제 또한 해결을 해준다. 그리고 공유기의 작동원리가 NAT라고 했을 때 방식이 여러개가 있다. 그 중에 Symmetric 방식의 경우 높은 보안성을 제공해준다. 그래서 거의 패킷 필터링 방화벽같다. 그리고 이 방화벽이 whitelist 혹은 allowed list 기반 방화벽과 비슷해서 외부에서 내부 유입을 막아준다. 그러니까 여러 호스트들이 있고 이 호스트들이 사용하는 공유기가 있는데 외부 인터넷에서 어떤 해커가 어떤 호스트들을 특정해서 공격이 불가능하다.
💡 참고
P2P통신을 할 때 NAT기술이 적용된 공유기를 사용하고 있으면 통신방해를 받는다.
조금 구체적으로 들어가서 NAT기반 공유기는 내부 논리적 구조에 따라서 크게 2가지로 나뉜다. 첫번째가 Cone방식을 쓰는 경우가 있고 두번째가 Symmetric방식을 쓰는 경우가 있는데 이들의 핵심이 무엇이냐면 외부포트를 지정할 때 호스트 단위면 Cone이고 TCP/UDP 세션단위면 Symmetric이다. 외부포트를 지정하는 것이 NAT의 결과적인 현상인데 그런 외부포트 지정이라는 결론을 호스트로 할것이냐 세션으로 할것이냐에 따라 달라진다.
💡 참고
Symmetric 방식이 보안성이 매우 뛰어나다. 그래서 많은곳에서 채택되었다.
IPv4 주소는 여러가지 분류가 있지만 크게보면 public IP가 있고 private IP가 있다. 그리고 인터넷이라는 것은 기본적으로 public IP이다. 그런데 NAT를 지원하는 공유기가 있으면 그 공유기를 중심으로 공유기 안쪽을 내부, 바깥쪽을 외부라고 나뉘는데 여기서 내부를 private 네트워크 대역이라고 한다. 그래서 내부에서 쓰는 주소들이 사설주소를 사용하게 된다. 그 사설주소 대역이 10.x.x.x, 172.16.x.x, 192.168.x.x의 경우가 있다. 과거의 IP주소 클래스 상 10.x.x.x가 A class, 172.16.x.x가 B class, 192.168.x.x가 C class로 나뉘는데 거기서 하나의 대역을 떼서 사설 IP로 묶어두었다.
💡 참고
사설 IP는 public 네트워크에서 사용이 불가능하다.
💡 참고
인터넷 + IPTV를 사용하는 경우 ISP쪽에서 IP주소를 대개 2개정도 부여한다.