티스토리 툴바


Development/통신2012/04/12 01:21

Mobile IP 란,

위치에 상관없이 할당되는 이동 IP 로, 이동할 때에도 연결(Connection)을 유지한 상태로 데이터를 송수신 하기 위한 방법이다.

Mobile IP 주소지정 (Addressing)

Mobile IP의 주소지정은 IP 프로토콜을 사용하여 이동통신을 할때 해결되어야 할 가장 중요한 문제로, 정지호스트(Stationary Hosts)의 경우 아무 문제 없이 사용 가능하지만, 다른 장소로 이동하여 네트워크 주소가 변하면 기기에 연결되어 있던 주소는 유효하지 않게 된다.

이동호스트(Mobile Hosts)를 통해 이동에 따라 네트워크가 달라지면 IP 주소도 변경되게 해야한다.

① 주소 변경

- 호스트가 다른 네트워크로 갈때, 자신의 주소도 변경하도록 하는 것으로, 이때 새로운 주소 획득은 DHCP를 이용한다.

- 하지만 이에 따라 구성 파일이 변경되어야 하고, 호스트가 다른 네트워크로 갈 때마다 재부팅이 필요하고, 다른 호스트들이 변경된

내용을 알수 있도록 DNS 테이블이 변경되어야 하는 단점이 있다.

② 두 개의 주소 사용

- 가장 현실적인 해결책으로 홈 주소(Home Address)와 보조 주소(Care of Address)를 가진다.

Mobile IP 에이전트 (Agent)

○ 홈 에이전트 (HA : Home Agent)

- 일반적으로 이동호스트의 홈 네트워크에 연결된 라우터

- 원격호스트가 이동호스트에게 패킷을 보낼 때, 홈 에이전트는 이동호스트를 대신하여 동작함.

- 패킷을 수신하여, 이 패킷을 외지 에이전트(foreign agent)로 전달 = 프록시 ARP

○ 외지 에이전트 (FA : Foreign Agent)

- 일반적으로 외지 네트워크에 연결된 라우터

- 홈 에이전트로 받은 패킷을 이동호스트에게 전달

- 이동호스트가 외지 에이전트로 동작할 수 있음

○ 이동호스트(Mobile Host)가 외지 에이전트(Foreign Agent)로 동작

- 조건 : 이동호스트가 DHCP 등을 이용하여 CoA를 수신할 수 있어야 함.

외지 에이전트에 구현되어 있는 소프트웨어 요소를 필요로 함

- 이 때의 CoA를 동 위치의 의탁주소(co-location CoA)라고 함

- 두 개의 주소가 응용 프로그램들에 투명(Transparent)해야 함

Mobile IP 세 단계 (Three Phases)

○ 세 단계 (Three Phases)

- 이동 호스트는 세단계 과정을 거침

- 1단계 : 에이전트 발견 (Agent Discovery)

- 2단계 : 등록 (Registration)

- 3단계 : 데이터 전송 (Data Transfer)

○ 에이전트 발견 (Agent Discovery)

- 이동 호스트는 자신의 홈 네트워크를 떠나기 전에 홈 에이전트의 주소를 알아야 함

- 이동 호스트는 외지 네트워크에 들어간 후 외제 에이전트를 발견해야 함

- 광고(Advertisement), 간청(Solicitation) 메시지를 사용

- 에이전트 광고(Agent Advertisement)

= ICMP 라우터 광고메시지 사용

= 외지 에이전트는 패킷에 에이전트 광고를 추가할 수 있음 (Piggyback)

- 에이전트 간청(Agent Solicitation)

= 이동호스트가 다른 네트워크로 이동한 후에도 에이전트 광고를 수신하지 못했을 경우에는 에이전트 간청메시지를 전송

○ 등록 (Registration)

- 이동호스트는 외지 네트워크로 이동하고 외지 에이전트를 발견한 후에는 등록을 해야함

- 요구 사항

① 외지 에이전트에 등록

② 홈 에이전트에 등록(이동호스트 대신 외지에이전트가 수행)

③ 등록만료시, 등록을 갱신해야함 (전원이 나가거나 기타 이상이 생긴 상태로 이동을 하게 되면 정상적인 통신 불가)

④ 홈 네트워크로 다시 돌아오면 등록을 취소해야 함

- 등록 요청(Registration Request)

= 이동호스트가 외지에이전트에게 요청메시지 전송

= 외지 에이전트는 위 요청메시지를 수신하고 등록한 후, 홈 에이전트에게 전달함

= 즉, 홈에이전트는 외지에이전트의 주소를 획득

○ 데이터전송 (Data Transfer)

- 에이전트 발견과 등록 이후, 이동호스트는 원격호스트와 통신 가능

① 원격호스트로부터 홈에이전트에게 데이터전달

= 이때, 원격 호스트는 발신지(송신자) 주소로 자신의 주소를 사용

= 목적지(수신자) 주소로 이동호스트의 홈 주소를 사용

= 위 패킷은 홈에이전트에 의해 가로채짐 (프록시 ARP 기술)

② 홈에이전트로부터 외지에이전트에게로 데이터전달

= 홈에이전트는 터널링 개념을 이용하여 외지에이전트로 패킷전송

= 이때, 홈에이전트는 발신지(송신자) 주소로 홈에이전트의 주소를 사용

= 목적지(수신자) 주소로 외지에이전트의 주소를 사용

③ 외지에이전트로부터 이동호스트에게 데이터전달

= 외지에이전트가 홈에이전트로부터 패킷을 수신하면 외지에이전트는 원래 패킷을 추출

= 외지에이전트는 등록테이블을 참조하여 이동호스트의 CoA를 발견

= 외지에이전트는 이동호스트에게 원래 패킷을 전달

④ 이동호스트로부터 외지에이전트에게 데이터전달

= 이동호스트가 원격호스트에게 패킷전송을 할때, 평소와 같은 방법 이용

= 발신지(송신자) 주소로 자신의 홈 주소를 사용

= 목적지(수신자) 주소로 원격 호소트의 주소를 사용

투명성 (Transparency)

- 위의 데이터 전송과정 중, 원격호스트는 이동호스트의 이동에 대해 인식못함

- 원격 호스트는 패킷 전송시, 목적지(수신자) 주소로 이동호스트의 홈 주소를 사용하기 때문

- 원격 호스트는 패킷 수신시, 이동호스트의 홈 주소가 포함된 패킷을 수신

- 따라서, 이동 호스트의 이동은 투명(Totally Transparent)하게 됨

Mobile IP의 비효율성

○ 더블 크로싱 (Double Crossing)

- 원격 호스트가 자신과 같은 네트워크로 이동한 이동호스트에게 패킷을 보낼 때 발생

- 원격 호스트가 이동호스트의 이동에 대해 인식하지 못하는 투명성(Transparency) 관련이 있음

○ 삼각형 라우팅 (Triangle Routing)

- 원격 호스트와 이동 호스트가 같은 네트워크에 연결되어 있지 않은 경우에 발생

- 더블 크로싱과 마찬가지로 투명성과 관련이 있음.

○ 해결방법

- 원격 호스트가 이동 호스트의 홈 주소와 CoA를 바인드(Bind) 하는 것

① 홈 에이전트가 원격 호스트로부터 패킷을 받음

② 이동 호스트로 전달함과 동시에 바인딩 갱신 패킷을 원격 호스트로 전달

③ 원격 호스트는 캐쉬에 바인딩 갱신 패킷의 내용을 보관, 이후부터는 바로 이동 호스트로 패킷전송

- 이동 호스트가 다른 네트워크로 이동하면, 홈에이전트는 원격호스트에게 경고패킷을 전송

[출처] Mobile IP|작성자 Just Blue

저작자 표시 비영리 변경 금지
Posted by Henry★

댓글을 달아 주세요

Development/통신2012/04/12 01:21

기존의 인터넷 IP 구조에서는 두 노드간의 통신중에 하나의 노드가 이동하게 되면 네트워크가 변경이 되어 IP 주소가 바뀌게 된다. 이때, 이동한 노드간의 통신을 중단시켜야 하며 새로운 주소를 받은 후 재부팅하는 과정을 수행해야 하고 재부팅하는 과정으로 인해 통신이 끊어지게 된다. 다시 말해 기존 네트워크 도메인 내부에서 통신중인 노드가 이동할 경우 범위내에서 움직이므로 통신을 계속 이어질 수 있지만, 네트워크 도메인 영역을 벗어나게 되면 범위가 닿지 않으므로 노드간의 통신을 지원하지 못하게 된다. 노드의 이동성을 보장하지 못하게 되면 MN는 통신을 하기 위해 새로운 통신 경로를 검색할 것이다. 이 과정을 통해 노드는 새로운 IP 주소를 얻을 수 있게 되지만 통신이 단절된 시각부터 새롭게 네트워크를 구성하는 과정 사이에는 노드간의 통신이 수초간 단절되는 문제점을 안고 있다.

Mobile IP는 무선 네트워크중에서도 이동성을 가지는 노드들이 통신을 하면서 이동하는 도중에도 끊김 없는 데이터 전송 서비스 제공을 목표로 한다.

1. Mobile IP 프로토콜

Mobile IP는 이동중인 사용자가 언제, 어디서나 장소에 관계없이 통신이 가능한 네트워크에서 필요한 서비스를 제공받을 수 있는 환경을 지원하는 것이다.

간단히 말해 IP 주소를 가진 노드가 이동시에도 연결을 항상 보장하는데 필요한 기술이다. 현재의 IP 주소는 인터넷에 접속하는 노드의 위치가 고정 되어 있고, 같은 네트워크에서의 고정된 IP 주소를 사용한다는 가정 하에 서비스가 이뤄지고 있어 다른 네트워크로 이동할 경우 접속할 수 없는 결과를 초래한다. 그러나 Mobile IP에서는 이원화된 주소 체계를 통해 이동성을 지원한다.

Mobile IP는 HA(Home Address 혹은 Home Agent)와 CoA (Care-of-Address)의 주소 체계로 이루어진다. Mobile IP의 구성도는 <그림 1>과 같다.

HA는 통신이 시작되는 시점부터 끝날 때까지 MN(Mobile Node)의 영구적 주소(Permanet Address)를 나타내는 것으로 이동하는 노드가 통신 시작시에 속해 있는 네트워크 주소를 말한다.

FA(Foreign Address 혹은 Foreign Agent)는 MN이 Home Network를 벗어나서 다른 네트워크에 속하게 될 때의 네트워크 주소를 말하며, 이 네트워크 도메인을 Foreign Network라고 한다.

CoA는 MN이 이동한 지역의 네트워크 FA로부터 가상의 주소를 부여 받아 CN(Corresponding Node)과의 통신을 할 수 있도록 연결해주는 중계 역할을 한다. 실질적으로 MN은 CoA와 Permanet Address의 2가지 주소를 가지게 된다.

여기서 CN은 MN와 통신을 하는 노드를 말한다.

Mobile IP의 동작은 크게 Agent Discovery, Registration, Tunneling의 3가지 기능으로 구분할 수 있다2).

▪ Agent Discovery : Mobile IP에는 HA나 FA가 MN에게 자신이 제공할 수 있는 서비스를 알려주기 위해서 사용하는 프로토콜들과 MN가 FA나 HA에게 서비스를 요청하기 위해서 사용하는 프로토콜들에 대한 정의가 있다.

▪ Registration : Mobile IP에는 MN 또는 FA가 MN의 HA와 CoA를 등록 및 해제하기 위해서 사용하는 프로토콜들에 대한 정의가 있다.

▪ Turneling : Mobile IP에는 데이터그램(Datagram) 포워딩 규칙, 오류 조건 처리 규칙, 다양한 형태의 캡슐화처럼 HA가 데이터그램을 MN으로 포워딩하는 방법에 대한 정의가 있다.

2. Mobile IP의 라우팅

MN은 Foreign Network에서 CoA를 획득하게 되면 자신의 Home Network에게 CoA를 알려주게 된다. 이 경우 HA가 MN의 IP 주소를 알고 있으므로 CN이 MN의 Permanent Address로 데이터그램을 전송한다고 하여 통신이 이루어지는 것은 아니다. 그러므로 이를 해결하기 위한 추가 기능으로 간접 라우팅 및 직접 라우팅 방법이 정의되어 있다.

간접 라우팅 방식에서는 CN이 MN의 위치를 모른 체 데이터그램의 Destination Address를 MN의 Permanent Address로 전송하게 된다. Mobile IP에서는 CN이 MN의 이동한 위치를 알 필요가 없다. HA에 등록되어 있는 MN의 실제 위치를 가르키는 CoA 주소가 있으므로 HA는 MN에게 CN에서 보낸 데이터그램에 CoA를 Destination Address로 캡슐화 하여 전송하게 된다. FA는 자신의 테이블에 등록되어 있는 주소와 비교하여 같은지를 확인하고 MN에게 전달하게 된다. 이를 수신한 MN은 Source Address를 확인하고 HA로 보낼 필요없이 바로 CN에게 전달하게 된다. 지금까지의 방식을 다른 표현으로 삼각 라우팅이라고도 한다. 간접 라우팅 방식은 네트워크에서 최적 경로보다 필요 이상의 통신 비용이 들어 트래픽 과부하를 초래할 수 있다. 이를 보완한 것이 직접 라우팅 방식이다.

<그림 2>는 간접 라우팅 방식의 동작 절차를 나타낸 것이다. 여기서 CN은 MN에게 데이터그램을 전송하기 위해 HA를 거치게 되고(①), HA는 이를 MN이 이동한 FN의 FA에게 CoA를 목적지 주소로 하는 데이터그랩을 캡슐화하여 전송한다(②). FA는 MN에게 데이터 그램을 전송하고(③), MN은 응답이나 데이터를 CN에게 바로 전송하게 된다(④).

<그림 2> Mobile IP의 간접 라우팅 동작 절차

직접 라우팅은 삼각 라우팅의 비효율성 문제를 해결하기 위해 HA에게 MN의 CoA를 요구하게 된다. 이는 MN의 최신 CoA 주소를 HA에 전송했다는 가정하에 이루어진다. CoA를 획득한 CN은 CoA를 Destination Address로 한 데이터그램을 전송함으로써 직접 라우팅 방법을 이용한다.

<그림 3> Mobile IP의 직접 라우팅 동작 절차

<그림 3>은 Mobile IP에서 직접 라우팅 방식의 동작 절차를 나타낸 것이다. 여기서 CN은 HA에게 CoA의 위치를 문의하고(①), HA는 자신의 테이블에 있는 FA의 CoA를 CN에게 알려주게 된다(②). CoA 주소를 획득한 CN은 CoA를 Destination Address로 하여 데이터그램을 전송하게 되고(③), FA는 MN에게 데이터 그램을 전달하고(④), MN은 CN에게 응답을 하거나 데이터를 전송한다(⑤).

<그림 4> 직접 라우팅을 통한 MN의 네트워크 이동

<그림 4>는 직접 라우팅을 이용하여 MN이 Foreign Network에서 새로운 Foreign Network로 이동하였을 때의 라우팅 방식의 동작 절차를 나타낸 것이다. 여기서 CN은 FA에게 데이터그램을 전송하다가(①) MN가 이동을 하여 다른 FN으로 옮겨 졌을 때(②) MN은 해당 FA에게 자신을 등록하게 된다(③). oFA(old FA)와 nFA(new FA)는 정보를 서로 교환하게 되며(④), 간접 라우팅 기법과 같은 방법으로 oFA는 자신에게 오는 데이터그램을 nFA에게 새 CoA를 Destination Address로 하는 데이트그램을 터널링하게 된다(⑤).

==================================

참고문헌

1) D. Johnson, C. Perkins, J. Arkko, “Mobility Support in IPv6", IETF RFC 3775, (2004. 6)

2) H. Soliman, C. Castelluccia, K. El Malki, L.Bellier, “Hierarchical Mobile IPv6 Mobility Management (HMIPv6)", IETF RFC 4140, (2005. 08)

3) James F.Kurose, Keith W.Ross "Computer Networking", Pearson Internatinal Edition pp.581-596 (2007)

4) Teail Shin, youngsong Mun, "A Fast Handoff between MAPs in Hierarchical Mobile IPv6", 전자공학회 논문지 제43권 TC편 제2호 pp.172-177, (2006. 02)

5) 노명화, 정충교, “계층적 모바일 인터넷에서의 비용 효율적인 MAP 선택 기법”, 한국정보과학회 가을 학술발표논문집 pp.445-450, (2006.)

6) 정현구외 “광대역 무선 통신 네트워크를 위한 효율적인 IP 이동성 관리 프로토콜” 한국통신학회논문지 06-4 Vol.31, pp.291-302, (2006)

7) 이우엽 조인휘 , "이동노드의 속도를 고려한 선택적 MAP 등록 기법" , 한국컴퓨터종합학술대회 논문집 Vol.35, No.1(D), pp.141-144, (2008)

8) 장성식 외 “HMIPv6에서 핸드오버 지연 및 패킷 손실 감소를 위한 2차 MAP 이용 기법”, 전자공학회논문지 42권 TC 제2호, pp.39-48, (2005)

9) OMNeT++ User Forum, http://www.omnetpp.org/forum/

10) INET Framework for OMNeT++/OMNEST, http://www.omnetpp.org/doc/INET/neddoc/index.html

11) Hierarchical Mobile IPv6, http://blog.naver.com/lkhmymi/100017196660

12) 김명근, 이양민, 이재기, “HMIPv6 환경에서 동적인 2계층 MAP 선택 방법에 관한 연구”, 한국정보처리학회 추계학술발표대회 논문집 제 15권 제2호, pp.1265-1267, (2008.11)

13) 신태일, 문영성, “HMIPv6에서의 고속 매크로 핸드오프 지원 방안”, 전자공학회 논문지 제 43권 TC편 제2호, pp.16-21, (2006)

[출처] Mobile IP란|작성자 꼬양꼬양

 

저작자 표시 비영리 변경 금지
Posted by Henry★

댓글을 달아 주세요

Development/Android2011/07/06 23:43
// 웹페이지 띄우기
Uri uri = Uri.parse("http://www.google.com");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity
(it);


// 구글맵 띄우기
Uri uri = Uri.parse("geo:38.899533,-77.036476");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity
(it);


// 구글 길찾기 띄우기
Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=출발지주소&daddr=도착지주소&hl=ko");
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity
(it);


// 전화 걸기
Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity
(it);


Uri uri = Uri.parse("tel.xxxxxx");
Intent it = new Intent(Intent.ACTION_CALL,uri);
// 퍼미션을 잊지 마세요. <uses-permission id="android.permission.CALL_PHONE" />


// SMS/MMS 발송
Intent it = new Intent(Intent.ACTION_VIEW);
it
.putExtra("sms_body", "The SMS text");
it
.setType("vnd.android-dir/mms-sms");
startActivity
(it);


// SMS 발송
Uri uri = Uri.parse("smsto:0800000123");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it
.putExtra("sms_body", "The SMS text");
startActivity
(it);


// MMS 발송
Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it = new Intent(Intent.ACTION_SEND);
it
.putExtra("sms_body", "some text");
it
.putExtra(Intent.EXTRA_STREAM, uri);
it
.setType("image/png");
startActivity
(it);


// 이메일 발송
Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity
(it);


Intent it = new Intent(Intent.ACTION_SEND);
it
.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
it
.putExtra(Intent.EXTRA_TEXT, "The email body text");
it
.setType("text/plain");
startActivity
(Intent.createChooser(it, "Choose Email Client"));


Intent it = new Intent(Intent.ACTION_SEND);
String[] tos = {"me@abc.com"};
String[] ccs = {"you@abc.com"};
it
.putExtra(Intent.EXTRA_EMAIL, tos);
it
.putExtra(Intent.EXTRA_CC, ccs);
it
.putExtra(Intent.EXTRA_TEXT, "The email body text");
it
.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it
.setType("message/rfc822");
startActivity
(Intent.createChooser(it, "Choose Email Client"));


// extra 추가하기
Intent it = new Intent(Intent.ACTION_SEND);
it
.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it
.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
sendIntent
.setType("audio/mp3");
startActivity
(Intent.createChooser(it, "Choose Email Client"));


// 미디어파일 플레이 하기
Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it
.setDataAndType(uri, "audio/mp3");
startActivity
(it);


Uri uri = Uri.withAppendedPath(
MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity
(it);


// 설치 어플 제거
Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity
(it);


// APK파일을 통해 제거하기
Uri uninstallUri = Uri.fromParts("package", "xxx", null);
returnIt
= new Intent(Intent.ACTION_DELETE, uninstallUri);


// APK파일 설치
Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt
= new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);


// 음악 파일 재생
Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt
= new Intent(Intent.ACTION_VIEW, playUri);


// 첨부파일을 추가하여 메일 보내기
Intent it = new Intent(Intent.ACTION_SEND);
it
.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it
.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");
sendIntent
.setType("audio/mp3");
startActivity
(Intent.createChooser(it, "Choose Email Client"));


// 마켓에서 어플리케이션 검색
Uri uri = Uri.parse("market://search?q=pname:pkg_name");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity
(it);
// 패키지명은 어플리케이션의 전체 패키지명을 입력해야 합니다.


// 마켓 어플리케이션 상세 화면
Uri uri = Uri.parse("market://details?id=어플리케이션아이디");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity
(it);
// 아이디의 경우 마켓 퍼블리싱사이트의 어플을 선택후에 URL을 확인해보면 알 수 있습니다.


// 구글 검색
Intent intent = new Intent();
intent
.setAction(Intent.ACTION_WEB_SEARCH);
intent
.putExtra(SearchManager.QUERY,"searchString")
startActivity
(intent);

 

저작자 표시 비영리 변경 금지
Posted by Henry★

댓글을 달아 주세요

  1. 나는 아주 이쪽으로 즐길입니다. 그 좋은 주제. 그것은 몇 가지 문제를 해결하기 위해 절 그다지 도움이됩니다. 그 기회가 너무 빠른 너무 환상적이고 일하는 스타일입니다. 난 당신이 모두 도움이 될 것 같아요. 감사

    2012/01/30 00:14 [ ADDR : EDIT/ DEL : REPLY ]