SCTPLIB 기반 msctp 핸드오버설계서 2006 년 8 월 경북대학교통신프로토콜연구실 이동화 (yiffie9819@gmail.com) 요약 본문서는 RAW socket을이용하여 user level에서구현한 SCTP STACK인 SCTPLIB와그추가확장규격인 Dynamic Address Reconfiguration(ADD-IP) 을이용하여수송계층에서 IP의이동성을제공함으로써이기종망에서의끊김없는핸드오버를지원할수있는시스템을설계함이그목적이다. 목 차 1. 서론.. 2 2. SCTPLIB 기반 IP 이동성지원모델. 2 2.1 SCTP 이동성기법 3 2.2 SCTP 핸드오버시나리오.. 4 3. 핸드오버구현을위한 SCTPLIB APIS.. 5 3.1 SCTPLIB의 ASCONF 모듈인터페이스설계. 5 3.1.1 sctp_bindx() 5 3.1.2 sctp_setpeerprimary(). 7 3.2 SCTPLIB API 사용순서.. 8 4. 결론.. 9 참고문헌. 9 1
1. 서론본문서는 RAW socket을이용하여 user level에서구현한 SCTP STACK인 SCTPLIB와그추가확장규격인 Dynamic Address Reconfiguration(ADD-IP) 을이용하여수송계층에서 IP의이동성을제공함으로써이기종망에서의끊김없는핸드오버를지원할수있는시스템을설계할수있음이그목적이다. 기본적으로 SCTPLIB의모든 API는 RFC 2960의 10장 "Interface with Upper Layer" 의내용에따라서크게 ULP-to-Upper 인터페이스와 SCTP-to-ULP Notification, 보조함수로구분되어서작성이되었으며, 각함수가사용하는인자들은부가적인설명이없이도개발자가쉽게이해할수있게설계되었다. 이동성지원을위해추가된함수역시기존 SCTPLIB의철학을따라서사용자에게친숙한형태를가지고있다. 본문서에서는 SCTPLIB 기반 msctp 핸드오버시스템의구조에대해서설명하고그시나리오에대하여분석하도록한다. 2. SCTPLIB 기반 IP 이동성지원모델 SCTP는 TCP/UDP에이은 3번째수송계층프로토콜로써종단간데이터신뢰전송기능을제공한다. 주요특징으로는 멀티스트리밍 (multi-streaming) 및 멀티홈잉 (multi-homing) 기능이있다. 먼저 SCTP 멀티스트리밍을통해하나의세션에서여러개의응용스트림을식별하여전송할수있으며, 멀티호밍특성을통해여러개의 IP 주소를 SCTP 세션에바인딩할수있다. 그림 1은 SCTP 멀티호밍개념을보여준다. SCTP는등록된여러 IP 주소중의하나로데이터를전송할수있다. 특히, 최근에개발중인 동적 IP 주소설정 (Dynamic Address Configuration) 방식에서는, 세션도중에새로운 IP 주소를추가하고 (Add-IP), 주요데이터전송경로를변경하거나 (Primary-Change), 기존 IP 주소를삭제하는 (Delete-IP) 기능이추가되었다. 그림 멀티홈잉 2
SCTP 이동성기법은상기와같은 멀티홈잉 특성및 동적 IP 주소설정 기능을활용하여, 이동단말의 IP 주소변경시에핸드오버를지원하는기술이다. 2.1 SCTP 이동성기법 SCTP 주요확장기능으로 ADD-IP 확장을들수있다. SCTP 기본규격에서는세션에사용되는 IP 주소를세션초기화단계에서만지정하도록되어있었으나, 본확장규격에서는세션도중에도신규 IP 주소를세션에등록하거나혹은삭제하는기능을제공한다. 또한세션도중에 primary IP 주소를변경하는기능도포함한다. 이러한 SCTP 세션에대한 IP 주소의재구성이필요할경우, 해당 SCTP는관련주소정보를 ASCONF (Address Configuration Change) 제어 Chunk에실어상대방에전송하며, 상대방은 ACSONF-ACK Chunk로응답할수있다. 위기능은특히이동단말이세션도중에다른 IP 망으로이전하게되는경우에, seamless handover 기능지원을위해필수적으로요구되는사항이다. 특히기존의 Mobile IP 경우, 핸드오버기능이취약하였으나 SCTP를통해핸드오버기능이상당히개선될것으로기대된다. 한편완전한 IP 이동성지원을위해서는핸드오버와함께, IP 단말에대한위치관리기능이제공되어야하며, 이를위해 Mobile IP의위치등록기능이함께사용될수있을것으로전망된다. 본절에서는 ASCONF 기능을활용한 seamless handover 절차에대해기술한다. 그림 2에보여지듯이, 이동단말이 SCTP를사용하며세션도중에 IP 지역을바꾸는경우핸드오버절차는다음과같다. (1) 먼저그림에서처럼, 세션초기화단계에서이동단말 (Mobile Node, MN) 은주소 2를, 상대단말 (Correspondent Node, CN) 은주소 1를사용하여 SCTP 세션을설정하였다고가정한다. (2) MN이다른 IP 영역으로이동하는경우, 중첩지역 (overlapping region) 에서신규주소 3을하위네트웍계층으로부터받게되면, 이를 ASCONF chunk를통해 CN 에게통지한다. 이를통해 MN은 dual-homing 상태가되며, CN으로부터의데이터를주소 2 뿐만아니라주소 3을통해서도받을수있게된다. (3) MN은무선계층의신호세기에따라 primary 주소를주소 3으로변경할수있다. (4) MN이중첩지역을벗어나는경우 ASCONF를통해기존주소 2를 SCTP 세션에서삭제할수있다. (5) 이러한절차가 SCTP 세션도주에 IP 지역을바꿀때마다되풀이된다. SCTP는이동단말 MT의이동으로 IP 주소가변경된경우에도, 바뀐주소를세션에바인딩함으로써세션이중단되지않는핸드오버기능을제공한다. 그림 2는 SCTP 핸드오버모델을보여준다. 3
그림 2. SCTP 핸드오버 2.2 SCTP 핸드오버시나리오상기핸드오버알고리즘은네트워크환경에따라다음두가지시나리오에적용될수있다. A. 시나리오 1 ( 그림 3(a) 참조 ): Dual-homing MT 3G-WLAN 혹은 3G-WiBro 연동처럼이종망간 Vertical Handover 상황에적용될수있다. MT 단말에두개의 NIC가탑재되고, 핸드오버동안에동시에두개의 NIC가활성화된다. 즉, MT는 dual-homing 상태에서패킷송수신을수행한다. B. 시나리오 2( 그림 3(b) 참조 ): Single-homing MT 3G 혹은 WiBro 등의동일망에서의 Horizontal Handover 상황에적용될수있다. MT는한순간에하나의 NIC 및 IP 주소를사용하며, single-homing 상태에서패킷송수신을수행한다. 그림 3에서처럼 시나리오 1 에서는중첩영역에서두개의 NIC가동시에활성화될수있는이종망간 Vertical 핸드오버를가정한다. 반면에 시나리오 2 에서는동일망간 Horizontal 핸드오버를가정하고, 한순간에 NIC를통해하나의 IP 주소만사용할수있다. 즉, 하위 L2/L3 계층에서 Link-Up 및 Link-Down이동시에발생하는 Hard Handoff를가정한다. 이경우, SCTP 계층에서 Add-IP, Primary-Change 및 Delete-IP 절차가거의동시에수행되어야한다. 4
그림 3. SCTP 핸드오버적용시나리오 SCTP 기반의핸드오버는기존의 MIP (mobile IP) 와는달리종단간수송계층에서이루어진다는특징이있으며, 따라서터널링등의네트워크라우터의도움이없이도적용가능하다. SCTP 핸드오버에대한유일한요구사항은 MN 및 CN에 SCTP가사용되어야한다는점이다. 이러한 mobile SCTP 기능은차세대 all-ip 기반이동통신망의 IP 이동성관리기법으로적용될수있을것으로전망된다. 3. 핸드오버구현을위한 SCTPLIB APIs 기본적으로 SCTPLIB의모든함수의 API는 RFC 2960의 10장 "Interface with Upper Layer" 의내용에따라서크게 ULP-to-Upper 인터페이스와 SCTP-to-ULP Notification, 보조함수로구분되어서작성이되었으며, 각함수가사용하는인자들은부가적인설명이없이도개발자가쉽게이해할수있게설계되었다. 이동성지원을위해추가된함수역시기존 SCTPLIB의철학을따라서사용자에게친숙한형태를가지고있다. Int sctp_bindx(int associationid, unsigned char addresses[][sctp_max_ip_len], Int noofaddresses, int flags); Int sctp_setpeerprimary(int associationid, unsigned char address[sctp_max_ip_len]); 3.1 SCTPLIB의 ASCONF 모듈인터페이스설계사용자인터페이스로서다음과같은 APIs의설계가필요하다. int sctp_getlocaladdress(unsigned int assoc_id, struct sockaddr **addrs); int sctp_getpeeraddress(unsigned int assoc_id, struct sockaddr **addrs); int sctp_freelocaladdress(struct sockaddr *addrs); int sctp_freepeeraddress(struct sockaddr *addrs); 3.1.1 sctp_bindx() 5
sctp_bindx() 의내부구현의전체적인흐름은리눅스커널코드를참조한다. 리눅스커널코드 SCTP_STATIC int sctp_setsockopt_bindx(struct sock* sk, struct sockaddr user *addrs, int addrs_size, int op) switch (op) case SCTP_BINDX_ADD_ADDR: err = sctp_bindx_add(sk, kaddrs, addrcnt); if (err) goto out: err = sctp_send_asconf_add_ip(sk, kaddrs, addrcnt); break; case SCTP_BINDX_REM_ADDR: err = sctp_bindx_rem(sk, kaddrs, addrcnt); if (err) goto out; err = sctp_send_asconf_del_ip(sk, kaddrs, addrcnt); break; default: err = -EINVAL; break; 위와같은형식을참조로 sctp_bindx() 의내부구현을다음과같이정의한다. int sctp_bindx(int SCTP_instance, struct sockaddr *addrs, int addrcnt, int flags) switch ( flags ) case SCTP_BINDX_ADD_ADDR: asc_add_ip(); => mdi_addaddresstoinstance()? mdi_xxx가맞는지고찰. => mdi_addlocaladdresstoassoc() asc_buildparam(); asc_sendrequest(); case SCTP_BINDX_REM_ADDR: 6
asc_del_ip(); => mdi_deladdressfrominstance() => mdi_deladdressfromassoc() asc_buildparam(); asc_sendrequest(); default: 3.1.2 sctp_setpeerprimary() sctp_setpeerprimary(). SCTP_STATIC int sctp_setsockopt(struct sock *sk, int level, int optname, char user *optval, int optlen) switch (optname) case SCTP_SET_PEER_PRIMARY_ADDR: retval = sctp_setsockopt_peer_primary_addr(sk, optval, optlen); break; static int sctp_setsockopt_peer_primary_addr(struct sock *sk, char user *optval, int optlen) chunk = sctp_make_asconf_set_prim(asoc, (union sctp_addr *)&prim.sspp_addr); if (!chunk) return -ENOMEM; err = sctp_send_asconf(asoc, chunk); 7
위와같은형식을참조로 sctp_setpeerprimary() 의내부구현은다음과같이구현한다 int sctp_setpeerprimary(int assoc_id, unsigned char address[sctp_max_ip_len) asc_buildparam(); asc_sendrequest(); 3.2 SCTPLIB API 사용순서 다음그림은 3.1 절의 SCTP 핸드오버알고리즘을구현하기위한 SCTPLIB API 사용법을순서 대로기술하고있다. 그림 4. 핸드오버를위한 SCTPLIB APIs 호출순서그림에서알수있듯이, MT의이동으로인해새로운영역의 Link-Up 신호가감지되고 IP 계층에서새로운 IP 주소를얻게되면, SCTP에서 sctp_bindx() 함수를호출하여 Add-IP 기능을수행한다. Add-IP 함수호출후에, SCTP ASCONF 패킷이 FS에게전달되며, FS는 ASCONF- ACK 패킷으로 MT에게응답한다. 새로운 Link 신호가강해지는경우혹은별도로정한규칙에의해, MT는 Primary-Change 패킷을 FS에게전송하고이를위해 sctp_setpeerprimary() 함수를호출한다. 구체적인 Primary- Change 발생시점은구현및적용시나리오에따라다를수있다. MT의추가적인이동으로기존 Link의신호를감지하지못하는경우, 기존 IP 주소는 SCTP 8
세션에서삭제되며이를위해 sctp_bindx() 함수가사용된다. 함수호출후에기존 IP 주소 는더이상 SCTP 세션에서사용되지않는다. 4. 결론 지금까지본고에서는 SCTPLIB를이용한핸드오버와그에해당하는 APIs에대하여살펴보았다. SCTP는 TCP 이후의차세대수송계층프로토콜로써지속적인표준확장및보급이이어질것으로전망된다. 시간이지남에따라 SCTP 보급이확대되면, 기존에 TCP를통해제공되던응용들도 SCTP를통해보다효율적으로제공될수있을것으로전망된다. 특히, 실시간멀티미디어전송및고도의신뢰성이요구되는응용에대해서는 SCTP의적용이선호된다. 또한, 차세대이동통신망에서의 IP 이동성제공측면에서도 SCTP의사용이긍정적으로검토될수있을것이다. 참고문헌 [1] Stewart R., et al., "Stream Control Transmission Protocol", IETF RFC 2960, October 2000 [2] Pastor J. and Belinchon M., SCTP Management Information Base, IETF Internet Draft, draft-ietf-sigtran-sctp-mib-08.txt, November 2002 [3] SCTP implementations by Linux, http://rivus.sourceforge.net/ [4] SCTP tutorial, http://www.iec.org/online/tutorials/sctp/ [5] Stewart, R., et al., " SCTP Dynamic Address Reconfiguration", IETF Internet Draft, draft-ietftsvwg-addip-sctp-19.txt, Jul 2007 9