전화기에 전화번호가 필요하듯, 인터넷 위에 있는 컴퓨터가 통신을 위해서는 ip주소가 필요하다. 그에 따른 IPv4 통신 규칙을 만들었고, 42억개의 주소를 표현할 수 있었다. 하지만! web, smartphone, cloud computing, IOT 등으로 인터넷에 연결되는 컴퓨터의 숫자가 기하급수적으로 증가하기 시작한다.
42억개의 IP주소가 동이 나고 있고, 새로운 IPv6가 등장한다. 앞으로 1,000년 후까지도 너뜬하게 사용할 수 있는 규약이다. 하지만 아직까지는 기존의 주소체계를 아껴써야 한다. 그 노력중에 하나가 공유기다. 하나의 아이피를 여러개의 컴퓨터가 나눠쓸 수 있다. 공유기에 연결된 컴퓨터를 웹서버로 사용해보자.
인터넷을 사용하기 위해서는 이 주소를 가지고 있어야 한다. 그래야 다른 컴퓨터와 통신을 할 수 있다. 요청과 응답을 할 수 있다.
통신사와 하나의 회선을 계약하고 공유기를 사용한다. 혼자 떨어져 있는 구멍에 WAN(광역네트워크), 같이 붙어 있는 구멍들에 LAN(지역네트워크)이라고 적혀있을 것이다. 통신사와 계약한 회선은 WAN에 꽂혀있을 것이다. 통신사로 발급받은 IP주소는 공유기에게 부여된다. 각각의 장치는 LAN에 뚫려있는 구멍들에 연결이 된다. 스마트폰 같은 무선 기기는 안테나를 통해 연결된다.
공유기를 중심으로 지역네트워크가 생성된다. 동시에 공유기는 전세계 가장 거대한 네트워크인 인터넷(광역 네트워크)에 소속되어 있다. 공유기는 WAN와 LAN 두 개의 네트워크 사이에 있는 교환원 같은 기계
다.
각각의 장치들이 공유기에 연결되는 순간 ip주소를 부여받는다. 공유기 또한 내부 네트워크의 소속으로 ip주소를 부여받는다. 내부 네트워크 안에서의 라우터의 ip주소를 Gateway address
혹은 Router address
라고 부른다. 지역 네트워크 안에서의 장치들이 부여 받은 ip 주소는 private IP address
라고 부른다. WAN 네트워크 안에서 공유기로 접속할 때의 ip주소는 public IP address
라고 부른다. 대표번호와 내선번호의 관계라고 생각하면 된다.
IPv4 주소 체계는 42억개가 있는데, 그림에 표 안에 있는 숫자들은 사설 ip로 쓰기로 약속을 해 놓은 거다.
NAT(Network Address Translation)이라는 기술 덕분에 사설(private) ip를 쓰고 있는 장치가 외부의 인터넷에 접속할 수 있게 된다. 그 과정을 살펴보자.
나는 192.168.0.4 사설 ip 주소를 가지고 있고, 위키피디아에 접속하고 싶은 상황이다.
위의 상황은 클라이언트일 때의 상황이다. 그렇다면 사설 아이피를 홈서버로 사용하기 위해서는 어떻게
해야할까? 같은 네트워크에 있지 않은 사용자가 장치에 어떻게 접속할 수 있게 할까?
우리 컴퓨터의 ip주소를 확인하는 방법과 지역네트워크의 입구/교환원에 해당하는 라우터의 Gateway address를 알아내는 방법을 알아보자. 그리고 마지막으로 결과적으로 우리의 네트워크가 외부에서는 어떤 ip address로 보여지는가, public ip address를 확인하는 방법도 알아보자. 운영체제별로 방법은 조금씩 달라진다. 우선, 제어판을 통해 네트워크 및 공유센터에 들어간다.
라우터 주소를 통해 관리자에 접속하면,
하나의 컴퓨터에 게임/채팅/미디어 등 다양한 형태의 서버들이 설치되어 있을 수 있다. 특정 컴퓨터에 접속해서 여러 서버들을 식별하기 위해서 port 번호를 사용할 수 있다. URl 형식을 보면 통신규약: IP/도메인네임 :port
port 번호가 들어간다는 걸 알 수 있다. 웹에서 80은 생략되는 것 같다.
포트번호에는 0번부터 65535번까지 숫자가 매겨져 있다. http는 웹페이지를 주고 받을 때 사용하는 통신규약이다. 웹은 http 프로토콜을 이용하는 통신시스템이다. 80번은 웹이 사용하도록 정해져 있다. 0 - 1023 포트는 이렇게 Well-known port라고 미리 예약된 포트
이다. 내가 만든 서버가 well-known port에 들어간다는 것은 대단한 일이다.
컴퓨터에 웹서버를 설치하면 80번에 연결되도록 약속되어 있다. 연결된다는 의미로 리스닝한다는 표현을 한다. 만약 컴퓨터에 서버를 하나 더 설치하게 되면, (아무데나 설치해도 관계는 없지만) 관습적으로 8000 혹은 8080포트에 설치하게 된다.
내가 설치한 서버에 접속하게 하기 위해서 public ip 주소를 알려주는데, 거기에 접속했을 때 내 사설 아이피를 어떻게 찾아 접속할 수 있을까? port 번호를 이용한다.
공유기에 port-forwarding 설정을 하면 된다. 라우터가 안내자 역할을 한다.
public ip address : 8081
로 접속했을 때, private ip address : 80
으로 넘겨주는(접속한 것과 동일한) 라우터 설정을 했다. 로컬 네트워크에 없는 컴퓨터에서도 public ip address : port를 통해서 접속을 할 수 있게 된다. 하지만 ip주소를 외부에 유출하는 것은 보안에 문제가 있을 수 있기 때문에 감안해야 한다.
만약 포트 번호도 없이 그냥 접속할 수 있게 하고 싶다면? http는 default port가 80이므로 외부포트를 80으로 설정하면 된다.
라우터로 들어온 포트번호가 무엇이냐에 따라서 내부 네트워크에 있는 특정 머신의 특정 포트로 포워딩
을 할 수 있다.
공용네트워크에 대한 방화벽 설정을 해지하니까, 연결이 되었다. 이제 public ip address를 통해서 나와 다른 네트워크에 있는 사용자도 private ip address에 접속할 수 있게 되었다.
ISP(Internet Service Provider, 통신사)와 계약을 맺어서 인터넷을 연결하면 ip주소가 생긴다. 집집마다 ip주소를 주게 되면 턱없이 부족하기 때문에, 유동 ip주소를 사용한다. 속된 말로 돌려막기를 한다. 가령, 오랫동안 인터넷을 사용하지 않게 되면 ip주소를 회수한다. 그리고 다음에 새로운 ip
를 주게 된다. 결국, ip가 계속 바뀌게 된다. 이런 방식으로, 거대한 가입자수를 관리한다.
하지만 유동 ip 주소의 경우, 컴퓨터에 웹서버를 설치할 때 문제가 생긴다. 외부에 공개한 주소가 바뀌면, 엉뚱한 주소로 들어오게 된다. 통신사에 금액을 더 주면 고정된 ip주소를 받을 수도 있다.
원래는 ip주소를 직접 설정을 해줘야 하는데, 수동으로 설정하려고 했더니 서브넷 마스크, DNS 등 어떤 지식들이 필요하고 번거롭다는 걸 알 수 있었다. 현실에서는 인터넷에 연결되면 자동으로 ip주소가 세팅
이 된다. 그 때 필요한 것이 DHCP Server
고, 공유기에 내장되어 있다. 인터넷을 사용하는 기기에도 DHCP Client
가 설치되어 있다. 우리가 사용하는 통신 부품에는 공장에서 기록된 고유한 식별자를 가지고 있다.
이게 없었다면 일일이 ip주소를 직접 설정해주고 매우 번거로웠을 것 같다. 현대의 모바일 기기처럼 인터넷의 연결과 해지의 순환주기가 빠른 경우를 떠올리면 더욱 그렇다.
라우터 ip 주소에 접속해서 관리자 모드에서 DHCP 설정을 볼 수 있었다. ip 대여 시간 부분이 재밌었다. ip주소를 재할당 받으면서 인터넷이 끊기거나 하는 문제는 없을까? 내 컴퓨터의 경우 3600sec로 되어 있었는데, 인터넷 끊김이 있었던 적은 없었다. 네트워크 안에 컴퓨터가 몇 대 없으면 임대기간을 길게 잡는 게 효율적이고, 많은 경우 대여 시간을 짧게 잡아서 빠르게 순환되게 하는 것이 나을 것이다.
DHCP 설정에서도 직접 ip주소를 줄 수 있는데, 그건 고정(static) ip address가 된다.
인터넷 관련해서 더 나아갈 수 있는 키워드들