-
모바일 네트워킹의 모빌리티(Mobility)SE General 2021. 7. 28. 21:43반응형
넓은 의미에서 모바일 노드(mobile node)는 시간에 따라 네트워크의 연결 포인트를 변경하는 노드입니다.
'물리적 모바일 유저'는 네트워크 연결 포인트에서 어떻게 움직이냐에 따라 많은 차이가 있습니다. 빌딩 내에서 와이어리스 네트워크 인터페이스 카드가 있는 노트북을 들고 움직이는 유저가 있다면, 반대로 150 키로로 달리는 BMW를 타고 핸드폰을 사용하며 여러 와이어리스 접근 네트워크를 거치며 끊기지 않는 TCP 연결을 원하는 유저가 있을 수 있습니다.
모바일 노드는 이러한 다양한 이동 형태의 스펙트럼에 따라서 주소를 일정하게 유지해야할 필요가 있거나, 없기도 합니다. BMW를 타며 핸드폰을 사용하는 경우 끊임없이 요청과 응답을 주고 받아야 하기에 그 동안 같은 주소를 유지해야 합니다. 반면 학교에서 노트북을 사용하다가 끄고, 집으로 이동해 다시 켜서 사용하는 경우 주소는 변경되어도 문제가 없습니다.
위의 상황들에서는 암시적으로 모바일 유저가 연결될 수 있는 인프라가 있다고 가정하지만, (두 노드가 커뮤니케이션 가능 거리 안에 있다면) 최근 부상하고 있는 기술인 'Ad Hoc Network'를 사용하여 다른 네트워크-레이어 인프라 없이 네트워크를 구축할 수 있습니다. 하지만 이러한 'Ad Hoc Network'는 논의에서 제외하였습니다.
이 글에서는 그러한 모바일 네트워킹의 모빌리티를 이루는 요소들을 알아보도록 하겠습니다:
- 홈네트워크
- 주소 부여
- 모바일 노드로 라우팅
홈네트워크
모바일 유저가 네트워크를 이동하며 끊김없는 연결을 유지하는 것은 사람의 교류에 비유할 수 있습니다. 20대 초반의 성인은 집을 나가서 기숙사나 원룸에 살며 주소를 바꾸게 됩니다. 만약 오래된 친구가 연락을 하려면 어떻게 친구의 주소를 찾을 수 있을까요? 한 방법은 가족에게 연락하여 자주 주소가 바뀌는 친구가 가족에게 알려준 주소를 얻어 연락을 하는 것입니다. 가족의 집은 영속적인 주소를 가지고 있어서 계속 바뀌는(mobile) 친구 주소의 위치를 얻을 수 있는 곳이 되는데요. 이후의 찾는 친구 - 찾을 친구 간의 커뮤니케이션은 직접 또는 간접적으로 이뤄질 수 있습니다.
네트워크 환경에서 모바일 노드의 영속적인 집에 해당되는 것은 홈 네트워크입니다. 이 홈 네트워크는 이동하는 모바일 노드인 홈 에이전트를 위해 여러 모빌리티 관리 활동을 수행합니다. 현재 모바일 노드가 거주하고 있는 네트워크는 foreign(또는 visited) 네트워크인데, foreign 네트워크는 모바일 노드의 모빌리티 관리에 도움을 주며 foreign 에이전트라고 부릅니다. Correspondent는 이러한 모바일 노드와 커뮤니케이션하고자 하는 객체에 해당됩니다.
주소 부여
위에서 모바일 노드가 계속 네트워크 상에서 접근가능하도록 하기 위해서는 이동하며 동일한 주소를 유지하는 것이 핵심이라고 말씀드렸습니다. 모바일 노드가 foreign 네트워크 상에 존재할 때, 해당 노드의 영속적인 주소로 향하는 트래픽은 모두 foreign 네트워크로 라우팅되어야 합니다.
모바일 노드로 향하는 트래픽을 라우팅하는 방법들
위의 목적을 달성하기 위한 한 가지 방법은 foreign 네트워크가 다른 모든 네트워크에게 모바일 노드가 현재 자신의 네트워크 안에 존재한다고 알리는 것입니다. 이것은 기존에 존재하는 라우팅 인프라에서 몇 가지 변경을 통해 평상시의 intradomain 그리고 interdomain 라우팅 정보 교환 시에 수행할 수 있습니다. foreign 네트워크는 단순히 주변 네트워크에게 해당 모바일 노드가 존재함을 알리고, 그 주변 네트워크들은 이것을 전파할 수 있습니다. 모바일 노드가 새로운 foreign 네트워크로 이동하면 이전의 foreign 네트워크는 라우팅 테이블에서 모바일 노드 관련 라우팅 정보를 제거하고, 새로운 foreign 네트워크는 추가하게 됩니다.
위와 같은 방법은 2가지 문제를 해결합니다. 먼저 인프라에 큰 변경 없이 이뤄질 수 있습니다. 또한, 다른 네트워크들이 모바일 노드의 위치를 알기에 모바일 노드로 데이터그램을 라우팅하기 쉽습니다. 포워딩 테이블이 데이터그램을 foreign 네트워크로 보낼 것이기에 특별한 변경이 필요 없습니다.
그러나 중요한 단점은 확장성의 한계입니다. 모빌리티 관리가 네트워크 라우터의 책임이 된다면, 라우터는 수백만개까지 될 수 있는 모바일 노드를 위한 포워딩 테이블 엔트리를 유지해야하고 노드가 이동할 때 이것을 업데이트해야 합니다.
다른 대안적인 방법으로는 모빌리티 기능을 네트워크 코어에서 네트워크 엣지로 push하는 것입니다. 이것은 모바일 노드의 홈 네트워크를 통해 이뤄질 수 있습니다. 앞선 예시에서 20대 성인 자식의 위치를 부모가 트래킹하는 것과 같이, 모바일 노드의 홈 네트워크에 있는 홈 에이전트는 모바일 노드가 어디에 있는지 foreign 네트워크를 트래킹할 수 있습니다. 모바일 노드(또는 모바일 노드를 나타내는 foreign 에이전트)와 홈 에이전트 간의 프로토콜은 모바일 노드 위치 업데이트를 위해 꼭 필요합니다.
Foreign 에이전트
위 이미지와 같은 간단한 foreign 에이전트 구성에서는 foreign 에이전트는 foreign 네트워크의 엣지 라우터에 존재합니다. Foreign 에이전트의 한 가지 역할은 모바일 노드를 위한 care-of address (COA)라는 것을 생성하는 것인데요. 그렇기에 하나의 모바일 노드에는 2가지 주소가 연결되어 있습니다. 하나는 permanent 주소이고, 다른 하나는 foreign 주소라고도 불리는 COA입니다.
위 이미지에서 모바일 노드의 permanent 주소는 128.119.40.186입니다. 네트워크 79.129.13/24를 모바일 노드가 방문하는 경우에, 모바일 노드는 79.129.13.2의 COA를 가지게 됩니다.
Foreign 에이전트의 두 번째 역할은 홈 에이전트에게 모바일 노드가 현재 자신의 네트워크에 존재하며 특정 COA를 가지고 있다는 사실을 알리는 것입니다.
위에서 모바일 노드와 foreign 에이전트를 나누었지만, 모바일 노드도 foreign 에이전트 역할을 할 수 있습니다.
모바일 노드로의 라우팅
위에서 모바일 노드가 COA를 얻고 홈 에이전트에게 그 주소를 알리는 부분까지 알아보았습니다. 하지만 이것만으로는 데이터그램이 어떻게 모바일 노드로 포워딩되는지가 설명되지 않습니다. 이 부분을 위해서는 direct 또는 indirect 라우팅이 필요합니다.
모바일 노드로의 간접 라우팅
한 상대방이 모바일 노드에 데이터그램을 송신하려 할 때, 간접 라우팅 방식에서는 상대방은 단순하게 데이터그램을 모바일 노드의 permanent 주소로 보냅니다. 그러한 데이터그램은 먼저 모바일 노드의 홈 네트워크로 라우팅되게 됩니다.
홈 에이전트는 모바일 노드의 COA를 트래킹하기 위해 foreign 에이전트와 연동할 뿐만 아니라 현재 foreign 네트워크의 존재하는 모바일 노드를 향해 전달된 데이터그램도 확인합니다. 홈 에이전트는 이러한 데이터그램들을 인터셉트하여서 모바일 노드로 포워딩합니다. 데이터그램은 먼저 COA를 사용해 foreign 에이전트로 포워딩 되고, 이후 foreign 에이전트에서 모바일 노드로 포워딩 됩니다 (2스텝).
홈 에이전트가 받은 데이터그램을 위와 같이 포워딩하는 것은 tunneling과 동일하게 처리됩니다. 즉, 홈 에이전트는 받은 데이터그램을 encapsulate하여 새로운 데이터그램으로 만들어 전달하고, foreign 에이전트는 홈 에이전트로부터 받은 데이터그램에서 홈 에이전트가 더한 부분을 빼고(decapsulate) 원본만을 모바일 노드에 전달합니다.
모바일 노드가 상대방에게 데이터를 전달하기 위해서는 단순하게 모바일 노드의 permanent 주소를 사용해 라우팅 필요 없이 보낼 수 있습니다.
위와 같은 간접 라우팅을 통한 모빌리티 제공을 위해 부분별로 아래와 같은 프로토콜이 필요합니다:
- 모바일 노드 - foreign 에이전트 간의 프로토콜: 모바일 노드는 foreign 네트워크에 '붙을 때' foreign 에이전트 정보와 같이 등록됩니다. 유사하게, 네트워크에서 제거될 때 foreign 에이전트를 제거합니다.
- foreign 에이전트 - 홈 에이전트 등록 프로토콜: Foreign 에이전트는 홈 에이전트에 모바일 노드의 COA를 등록합니다. 모바일 노드가 새로운 COA를 등록하며 이전 등록된 것이 처리되기에, Foreign 에이전트는 모바일 노드가 네트워크를 떠나면 명시적으로 COA 등록 취소를 할 필요가 없습니다.
- 홈 에이전트 데이터그램 캡슐화 프로토콜: 상대방의 원본 데이터그램을 새로운 데이터그램으로 캡슐화하고 COA로 포워딩합니다.
- foreign 에이전트 비캡슐화 프로토콜: 상대방의 원본 데이터그램을 캡슐화된 데이터그램에서 꺼내어 모바일 노드로 포워딩합니다.
모바일 노드가 특정 네트워크 A에서 B로 이동의 간극이 크지 않다면, 상대방 - 홈 에이전트 - foreign 에이전트 - 모바일 노드로 전송되는 데이터그램을 손실할 확률은 매우 낮습니다. 만약 손실이 전혀 없는 커뮤니케이션이 필요하다면, 윗 레이어 메커니즘에 데이터그램 손실을 회복할 수 있는 기능이 존재하여야 합니다.
모바일 노드로의 직접 라우팅
위의 간접 라우팅 방식은 '삼각 라우팅 문제'라는 비효율성이 존재합니다. 데이터그램은 상대방 - 모바일 노드 간의 짧은 경로가 있더라도 반드시 홈 에이전트를 거쳐가야 되서 많은 비효율이 발생하고, 최악의 상황에서는 같은 네트워크에 있으면서도 홈 에이전트를 거쳐서 라우팅되어야 하는 상황이 있을 수 있습니다.
직접 라우팅은 좀 더 복잡한 방식으로 그러한 삼각 라우팅 문제를 극복합니다. 직접 라우팅 방법에서는 상대방의 에이전트는 먼저 모바일 노드의 COA를 찾습니다. 이것은 홈 에이전트가 모바일 노드의 최신 COA를 가지고 있다는 가정하에 홈 에이전트에게 확인하게 됩니다. 이후 상대방의 에이전트는 데이터그램을 모바일 노드 COA에 직접 tunnel합니다.
직접 라우팅은 간접 라우팅의 삼각 라우팅 문제를 해결하지만, 아래와 같은 어려움이 존재합니다:
- 상대방 에이전트가 홈 에이전트에 COA를 얻기 위한 쿼리 시 사용할 모바일-유저 위치 프로토콜이 필요합니다.
- 모바일 노드가 하나의 foreign 네트워크에서 새로운 네트워크로 이동하면 어떻게 데이터가 포워딩되어야 될지 해결해야 합니다. 간접 라우팅에서 이러한 문제는 간단하게 COA를 업데이팅하여 해결되었습니다. 하지만 직접 라우팅에서 상대방은 홈 에이전트에 COA를 한 번 질의 후에 사용하므로, 간접 라우팅 방식의 업데이트만으로는 해결되지 않습니다.
위의 2번째 어려움에 대한 해결책 중 하나는 상대방에게 COA 변경을 알리기 위한 새로운 프로토콜을 만드는 것입니다. 다른 하나는 실제로 사용되고 있는 아래와 같은 방법입니다.
먼저 데이터가 현재 모바일 노드가 세션을 처음 생성한 foreign 네트워크로 송신된다고 가정하겠습니다. 이렇게 모바일 노드가 처음 세션을 생성할 때 기반한 foreign 에이전트는 anchor foreign 에이전트라고 합니다. 모바일 노드가 새로운 foreign 네트워크로 이동하면, 모바일 노드는 새로운 foreign 에이전트와 등록되고, 새로운 foreign 에이전트는 anchor foreign 에이전트에 모바일 노드의 새로운 COA를 제공합니다.
이후 anchor foreign 에이전트가 캡슐화된 데이터그램을 받으면 새롭게 캡슐화한 데이터그램을 생성하여 새로운 COA로 포워딩하게 됩니다.
Reference
반응형'SE General' 카테고리의 다른 글
해시 알고리즘 특징 (0) 2021.09.27 도커의 보안(Security) 알아보기 (0) 2021.08.16 도커(Docker)의 네트워킹 (1) 2021.08.02 HTTP의 역사 (2) 2021.08.02 리눅스(Linux) 단일 호스트 부하 디버깅 (feat. 서버/인프라를 지탱하는 기술) (0) 2021.05.26 셀레니움 내부구조 (Selenium Internals) (1) 2021.03.29 테크니컬 라이터란? (Technical Writer) (2) 2021.03.28 오라클 DB 아키텍쳐 살펴보기 (Database, Instance, Files, Memory, Process) (0) 2021.03.12