1.1. Overview

  • Strongswan은 IPsec 기반 VPN Solution으로 주로 Key를 관리하고 Linux Kernel과 Netlink로 교류한다.

    00-analysis-flow-v1-20161229-strongswan-overview.png
    [PNG 그림 (217.92 KB)]


1.2. starter

  • starter 는 charon daemon을 실행 및 관리(재시작, 종료)해주는 기능 "ipsec.conf" 설정파일을 관리함
  • charon 을 실행관리하고 설정파일을 charon에 넘겨주는(stroke protocol) 역할

    01-analysis-flow-v1-20161229-strongswan-starter(launcher).png
    [PNG 그림 (269.47 KB)]


1.3. charon

  • charon 는 starter에 의해서 실행되며 IKE key를 관리하는 strongswan daemon의 main 에 해당함.
  • 실제 각 동작부들(libcharon의 plugin)는 기능의 확장(추가)를 위한 addon부분과 Worker thread-pool를 사용한 작업처리부로 구현된 집합의 동작이라고 볼 수 있음.

    02-analysis-flow-v1-20161229-strongswan-charon(main).png
    [PNG 그림 (267.74 KB)]


1.4. libcharon

  • charon에 의해서 구동되며 실제 libcharon/plugins/* 들을 초기화 및 Worker-thread-pool을 통해서 Multiple Core를 효율적으로 구동하도록 고안됨

    03-analysis-flow-v1-20161229-strongswan-libcharon.png
    [PNG 그림 (195.26 KB)]


  • 내부 Worker thread의 갯수는 DEFAULT_THREADS 값을 통해서 사용함.
    • 기본값은 16이지만 최적은 CPU 갯수 * 2 로 맞추는게 좋음.
    • 통상적인 일반상황에서 최적의 Thread 갯수는 CPU갯수 및 Task/Job구현(비동기적 구현의 고려)에 따라 상이할 수 있음.
  • jobs 배열로 이루어진 linked list는 get_job() 함수에 의해서 각 Thread에 Conditional 접근을 통해서 Assign(할당)되고 Active(execute 활성) 됨.
  • job handler의 반환값에 따라서 다시 queue되거나 active 또는 1회 호출 후 종료되는등의 제어를 하게 됨. (위 flow 그림 참고)
  • 이러한 Worker thread(Thread-pool)와 Event (Timer, Multi-select, job, task등) 을 처리하는 방식에 대해서는 하기 링크의 libevent(libev) library 구현부에 대하여 먼저 보시면 도움이 될듯 합니다. (특히 chrome browser, node-js 에서 구현하는 방식) 결국 Multi-core 환경에서 가장 효율적으로 Core를 분배하여 사용하기 위한 하나의 개발에 대한 페러다임 방식이라고 할 수 있습니다. Proxy server등에서도 이러한 구조를 많이 도입합니다.
  • strongswan에서 그러면 fork에 의한 Process 와 pthread(POSIX Threads)에 의한 Thread 중에서 둘다 사용하는가?
    • 둘다 사용합니다. 다만 fork&execv에 의한 Process는 starter에서 charon daemon을 띄우기 위한 Launcher(process 감시기능)으로만 사용합니다.
    • 나머지 실제 모든 동작은 Thread pool (DEFAULT_THREADS 로 정의된 Thread 갯수만큼)을 job/task구조의 handler로 Assign하여 실행하는 구조라고 보시면 됩니다.




/*

[ FrontPage | PrintView | RawView | RSS ]

Copyright ⓒ MINZKN.COM
All Rights Reserved.

MINZKN

----

*/