자, 망에 붙었다! IP도 받았다! 발신하는 건 가능해졌다!

근데, 수신은 어떻게 하나... 또 단말기가 움직이면 어떻게 데이터가 쫓아오나...란 것이 뇌리를 스친다.

이동통신망 내 데이터망을 통한 스마트폰과 인터넷 간의 패킷 통신 (출처: 본인)

일단, 스마트폰이 받은 IP는 이동통신망의 구조상 사설 IP이다. IPv6의 시대가 도래한 것도 같지만, 아직 인터넷의 대부분은 IPv4로 동작하고, 전세계 이동통신 가입자 수를 생각해보면, IPv4의 공인 IP를 단말기에 주기에는 숫자가 부족하다. 따라서, 이동통신망 내에서 일단 사설 IP를 부여하고, 외부의 인터넷을 사용하려고 할 때, 공인 IP대역에 접속을 처리할 필요가 있다.

위의 그림상에서 빨간점이 P-G/W가 접속시에 할당한 통신사 데이터망의 사설 IP로, 단말기가 알고 있는 본인의 IP이다.

그래서, 단말기가 보내는 패킷의 발신자 주소에는 빨간점이 기록이 되고, 이 패킷이 인터넷으로 향할 경우, 인터넷상의 공인 IP(와 Port: 녹색점)로 바꾸어서 돌아다니게 해주는 장치가 방화벽/NAT(Network Address Translation)이다.

NAT 역할로 동작하는 경우는 미리 단말기로부터 발신된 패킷을 통해서 발착신자가 등록이 된 경우로, 단말기가 발신한 패킷의 발신자 주소 내 사설 IP를 공인 IP로 변경해주고, 단말기로 수신되는 서버측 패킷의 착신자 주소 내 공인 IP를 다시 사설 IP로 바꿔주어 단말이 착신하도록 주소 변경을 수행한다.

방화벽 역할로 동작하는 경우는 미리 등록되지 않은 주소로 패킷이 외부에서 들어온 경우로 이 경우에는 해당 패킷을 폐기하여 대응한다. 중국쪽에서 인터넷상 아무 주소나 찔러보는 패킷들이 상당히 많아, 그걸 그냥 통과하게 두면,해당 패킷이 벌일 수 있는 여러가지 문제 이외에도 단말기가 해당 패킷을 받기위해 깨어나야 해서 배터리 소모가 더 일어나게 된다.

기본적으로 NAT를 통과하는 경우 단말기에 할당되는 것은 IP와 TCP Port로 하나의 데이터 세션에 대해서만 할당이 되고, 그나마도 통신이 없을 경우 일정시간 이후에는 해당 IP/Port는 수거되어 더 이상 사용을 할 수 없게 된다. 이후 다른 단말기의 통신을 방해하지 않기 위에 일정시간을 미사용하다가, 다시 할당될 수 있는 상태가 된다. (정확히 하자면, Network(IP)단의 주소를 변경하는 것이 아닌 Port 단위의 주소 변경인 PAT(Port Address Translation)이지만, 다들 NAT라고 부른다.)

그래서 서버에서 단말기로부터 패킷을 받은 후 일정 시간 이내에는 해당 주소로 패킷을 던져서 착신시킬 수는 있으나, 해당 TCP/IP 세션을 서버가 들고 있는 것도 서버의 자원 이슈가 있어서, 단말의 App으로 착신시키는 Push 서버를 중간에 두고 해당 서버를 통해서 단말기로의 착신을 처리하는 구조를 OS 운용자들이 제공한다. 아이폰의 경우 APNS(Apple Push Notification Server)라 불리고, 안드로이드의 경우 구글 클라우드를 통해서 FCM(Firebase Cloud Messaging)을 통해서 착신시키는 것이 일반적이다.

단말기의 OS 단에서 APNS나 FCM 서버와 NAT의 주소 유지 시간보다는 짧게 Push 서버와 주기적 통신을 수행하는 구조를 만들어서, NAT 바깥쪽의 공인 IP/Port를 계속 살려두는 일을 수행한다. 이를 보통 Heartbeat나 Keep Alive 메시지라고 한다.

단말기의 App에서는 해당 OS단의 서비스를 이용해서, App과 단말기를 구분하는 토큰(Token)을 수령하여, App 서버쪽에 착신시 사용할 토큰을 전달한다. 

서버가 단말에게 뭔가를 착신시킬 것이 있다면, 해당 내용과 토큰을 Push 서버로 전달하면, Push 서버는 해당 토큰에 해당하는 IP로 Push 알림을 전달해서 단말기가 받을 수 있도록 처리하여 App의 착신이 수행된다.

 

그러나... 딱 그 시점에 단말기가 어느 기지국 영역에 있는지, 해당 기지국이랑 연결이 되어 있는지는 알 수가 없다. 

Tracking Area 간 단말기의 이동 및 착신 Paging (출처: 본인)


앞서, 망에 붙었을 때 교환기가 주는 내용 중에 '기지국 바뀌었다고 다시 안 알려줘도 되는 기지국 리스트(TAI list, Tracking Area Identity list)'가 있다고 했다. 교환기가 단말기로 착신할 데이터가 있는 경우, Paging 메시지라는 것을 전달하여(단어적으로 삐삐친다와 동일한 의미다), 단말기가 응답하도록 하는데, 한꺼번에 그 단말기를 찾기 위해서 Paging 메시지를 뿌리는 영역 단위가 TA(Tracking Area)이고, 각 Tracking Area를 구분하는 값이 TAC(TA Code)로 기지국에서 해당 값을 송출하여 단말기는 자신의 위치를 판단할 수 있다. 그래서, 이전에 받은 TAI list를 벗어난 새로운 TA에 속하는 기지국에 단말기가 진입하는 경우 단말기는 '나 위치 여기로 바뀌었음!'이란 TRACKING AREA UPDATE REQUEST메시지를 교환기로 보내고, 교환기는 단말기의 위치 변경을 기록해두고, 나중에 착신 패킷이나 착신 통화나 착신 SMS가 있는 경우 해당 위치로 Paging을 보내게 된다. Paging 메시지를 받은 단말기는 이전에 얘기했던 대로 기지국에 '뭔가 받을 게 있음'의 이유로 기지국에 접속 요청을 하여 망에서 기다리고 있는 패킷이나 착신 통화와 관련된 메시지를 받게 된다.

단말기는 자신이 발신할 것이 없는 경우 해당 Paging 메시지가 오는지만 확인하기 위해, 단말기들이 분산되어 수신할 수 있도록 정해진 알고리즘에 따른 타이밍에 기지국에서 주는 주기(0.32~2.56초) 별로 한번씩만 깨어나서 Paging 메시지를 확인한다. 이런 동작을 DRX(Discontinuous Reception, 비연속 수신)이라고 하며, 이를 통해서 단말기의 배터리를 아낄 수 있다.

이로써 미뤄뒀던 스마트폰의 데이터 사용이 설명되었다.

美泥.

PS: 아... 스마트폰 안이 아닌가... 이동통신망 안에서 인가... -_-a

: