레이블이 voip인 게시물을 표시합니다. 모든 게시물 표시
레이블이 voip인 게시물을 표시합니다. 모든 게시물 표시

2012년 5월 7일 월요일

VoIP SIP 알자/10. NAT와 방화벽/STUN/TURN/ICE/SBC

출처 : http://mongu2.blog.me/140123112694



@ NAT 와 VoIP 시그널과 RTP 전송 영향에 대한 알아보자.
   
1. VoIP 환경에서 NAT 를 사용하는 이유?
: 공인 IP 부족, 공인 IP 사용 시 서비스사를 바꿀 때마다 컴퓨터의 IP 주소를 변경해야 하는 번거로움 덜기.
: 보안의 이유(내부 정보 감추기)
   
2. VoIP 환경에서 NAT, Firewall 사용 시 문제?
: End-to-End 모델에서 큰 문제가 있다, one-way, 호 시도 fail 등,
   
3. VoIP 환경에서 NAT, Firewall 사용 시 대응 방법
- SIP Proxy 가 ALG(Application Level Gateway)로 NAT와 방화벽 제어
- SIP 시그널링 수정
- SIP 처리 할 수 있게 NAT와 Firewall 수정
- P2P 기반 NAT 및 방화벽 통화 기법 : ICE, STUN, TURN
   
   
[NAT]
1:1 NAT 의 경우 Layer3 IP 정보만 변환해주며 NAPT(Network Address and Port Translation, PAT) 경우
IP와 Port(Layer4) 까지 변환해준다. 아래 처럼 NAT에 의해 수정될 수 있는 field 이다.
   
!- 아래 처럼 NAT 환경에서 문제점. NAT는 L3,L4만 조절 가능, SIP 본문은 control 불가능
   
* NAT 종류
Symmetric NAT : 목적지에 따라 다른 공유기의 외부 IP:Port를 가지는 것(ex. NAT-PAT)
Cone NAT : 내부망의 IP:Port 에 대해 목적지에 관계없이 공유기의 외부IP:Port가 변하지 않는다는 것
(종류 - Full Cone, Restricted Cone, Port Restricted Cone) , (ex. 1:1 NAT)
   
   
#최근 IETF 지침#
프로토콜을 새로 만들 때 그 프로토콜이 NAT 환경에 영향을 받지 않도록 하는 지침 발표.
SIP 프로토콜은 그 이전에 만들어졌기 때문에 이러한 지침에서 벗어나는 부분이 있다.
지침의 핵심은 애플리케이션 계층에서 IP 주소나 포트 번호를 직접 다루지 말라는 것이다.(SIP는 다룬다 --;)
   
!- 위 그림은 NAT 환경에서 만들어진 SIP 메시지 이다. 문제점
a. Via 헤더의 주소가 사설IP 주소이기 때문에 위 메시지에 대한 응답 메시지들은 발신자에게 제대로 전달 불가
b. Contact 헤더의 주소 역시 사설IP 주소이기 때문에 향후 이 발신자에 대한 세션 설정 시도가 발신자에게 전달 불가
c. 아래쪽 SDP의 미디어 부문에 포함되어 있는 c= 헤더의 주소가 사설 IP주소이기 때문에
사용자 B가 보낸 RTP 패킷은 제대로 라우팅 되지 않는다.
   
위 3가지 문제중에서 SIP 자체로 해결 가능한 것은 첫번째(a)이다.
=> 위와 같은 메시지를 받은 SIP Proxy 서버나 수신측 UA가 메시지 내의 Via 헤더에 들어있는 IP주소와 패킷이 실제로
어디에서 온 것인지를 비교하여 두 주소가 서로 다르다면(즉, 사설 IP 주소를 사용하는 것이라면), 메시지에
received= 헤더를 추가하여 패킷의 출발지인 공인 IP 주소를 기록하도록 하는 것이다. 따라서 이후 이에 대한
응답메시지는 received= 헤더의 IP 주소를 따라 패킷의 발신지였던 NAT 장비로 전달되고, NAT 장비는 원래 가지고
있는 정보에 따라 사설 IP를 사용하고 있는 사용자 A에게 응답 메시지를 배달할 수 있다.
NAT 장비는 TCP 연결을 설정하면서 내부의 사설IP주소와 포트 번호를 자신의 공인 IP 주소와 포트 번호로 연관 시키는
바인딩을 만들어 유지하기 때문에 위의 방식은 NAT와 SIP 모두에게 별도의 부담이 없다. 그러나 b,c는 간단하지 않다.
   
!- 아래 처럼 NAT 장비를 지나 갈 때 Via:10.0.0.1;received=172.34.5.1;rport=34123 을 추가한다.
   
=> 두번째 문제는 영구적 TCP를 사용한다면 해소될 수 있다. 즉, 일단 한번 세션이 시작되면 이에 대한 TCP 연결을
계속 유지함으로써 상대방이 자신의 Contact 헤더의 주소를 사용할 필요(ex INVITE, BYE)자체를 없애는 것이다.
   
=> 세번째 문제는 RTP 흐름을 상호 대등하게 만들면 부분적으로 해소될 수 있다. 이 경우 NAT 사설망 안에서
RTP 패킷을 제대로 주고받을 수 있는 단말은 단 하나로 제한된다. 상대방은 이 쪽에서 보낸 SDP에 들어있는
IP주소, 즉 사설 IP 정보는 무시하고, RTP 스트림을 받을 때 그 패킷을 보낸 NAT 장비의 IP주소와 포트 번호로
RTP 패킷을 보낸다.
   
NAT의 용도가 내부의 망 정보들을 노출시키지 않기 위해서라면 이러한 세 가지 SIP와 RTP에 대한 문제점 이외도
내부 사설 IP 정보의 누출도 문제가 될 수 있다. 시그널링이나 미디어 전송 관점에서는 별로 중요하지 않지만
보안 관점에서는 Call-ID 헤더 또한 망 정보를 누출시키는 요인이 될 수 있다.
   
   
[방화벽]
* 내부망의 UA가 UDP로 세션을 처리하는 경우
INVITE 메시지를 받은 외부 Proxy서버는 UDP로 응답하게 되는데 이 UDP 패킷은 내부망의 UA와 미리 설정 연결이
없기 때문에 방화벽에 의해 차단된다.
   
* 내부방의 UA가 TCP로 세션을 처리하는 경우
내부망 UA가 외부로 메시지를 보낼때 미리 TCP 연결을 설정하기 때문에 외부 Proxy 서버의 응답 메시지는 차단하기
않고 UA로 전달된다. 하지만 미디어 패킷인 RTP는 앞의 TCP 연결과 무관하기 때문에 외부에서 들어오는 RTP 패킷은
모두 방화벽에 의해 차단된다. 결과적으로 통화는 내부에서 외부로 가는 소리만 들리게 된다.
역시 외부 UA가 방화벽 안쪽에 있는 UA에게 INVITE 호 시도를 할 경우 역시 방화벽에 의해 차단된다.
   
* 외부에서 내부로 호 시도를 방화벽을 통과 하기 위한 방안
=> 방화벽에 SIP 관련 패킷을 통과하도록 허용. 하지만 허용 범위를 넓히는 것 자체가 방화벽 본래의 목적에
반하기 때문에 보안 담당자들이 SIP 패킷의 차단을 일부러 해제하지는 않을 것이다.
   
[STUN,TURN,ICE]
NAT 를 통과하기 위한 ITEF의 표준은 3가지 이다.
STUN (Simple Traversal of UDP through NAT)
TURN (Traversal Using Relay NAT)
ICE (Interactive Connectivity Establishment)
   
   
!- STUN Signal/RTP flow
   
!-TURN Signal/RTP flow
아래 media 그림이 잘못 된 것 같다. 모든 media가 TURN Server를 경유해서 가야지 않을까?
   
!- ICE Signal/RTP flow
   
   
* STUN(RFC 3489, updated RFC 5389)
STUN 서버, STUN 클라이언트로 구성된다.
UA스스로가 NAT 내부, 즉 사설망에 있는지 여부와 그렇다면 어떤 종류의 NAT이고 NAT 장치의 공인 IP주소가
무엇인지를 찾아내도록 도와주는 프로토콜이다. UA가 외부 공중망에 있는 STUN 서버에게 STUN 패킷을 보내면
STUN 서버는 패킷을 보낸 장치의 IP 주소와 포트 번호를 담아 응답합니다. UA는 자신의 IP주소와 STUN 서버가
보내온 IP 주소를 빅하여 두 주소가 같으면 NAT가 없음을 알게 되고, 반면에 두 주소가 다르면 NAT 내부에 있는
것이므로 UA는 이후 SIP과 SDP에 포함될 IP 주소를 STUN 서버가 보내준 공인 IP 주소로 수정하여 호를 시도한다.
결과적으로 UA 스스로가 NAT문제를 해결할 수 있게 된다. 그러나 STUN 방식은 두 UA가 모두 NAT 내부에
있을 때에는 제대로 동작하지 않는다. 또한 Symmetric NAT에서는 지원하지 않는다(?). 이 해결책은 TURN이다.
   
a. STUN UA -> STUN Server 에 보내는 메시지
: 해당 패킷은 STUN UA에서 만 캡쳐 한 내용.
   
b. STUN Server -> STUN UA 에게 응답 메시지
: 응답 내용의 XOR-MAPPED-ADDRESS 에 자신이 사설IP를 쓰고 있으며 공인IP는 무엇인지를 파악
   
c. SIP INVITE는 STUN Server 에게 보낸다.
: SIP INVITE를 D-IP는 STUN Server 이며 SIP 메시지에 Contact는 자신의 공인IP/Port 주소이다.
   
   
* 윈도우 기반 STUN/SIP 서버
   
   
* TURN
UA로 하여금 외부 공중망에 있는 TURN 서버를 경유하여 호를 설정하도록 하는 방식이다.
즉 두 UA가 서로 직접 메시지를 주고받는 것이 아니라 공중망에 위치한 TURN 서버와 세션을 설정하도록 하여
TRUN 서버가 이를 중계하는 방식이다. 두 UA가 경로가 다소 우회된다.
하지만 Symmetric NAT나 방화벽이 있을 경우에도 호를 설정할 수 있는 유일한 방법은 TURN이다.
   
   
* ICE
STUN이나 TURN을 사용할 때 P2P 방식을 통해 최적의 라우팅을 제공하려는 기법이다.
세션 설정 과정에서 자신이 알 수 있는 모든 주소들을 동원하여 시그널링을 시도한다.
* UA가 사용 할 수 있는 주소 들
UA 자신의 사설 IP 주소
STUN 서버가 알려준 NAT 장치의 공인 IP 주소
패킷을 중개할 TURN 서버의 IP 주소
주소들의 우선순위는 직접 통신 가능한 주소가 우선이고, TURN 서버 주소와 같은 간접 통신을 위한 주소는
뒤에 배치된다. 세션 설정 후 망 상황이 바뀌거나 세션이 변경되면 ICE에 의한 주소 교환을 처음부터
다시 수행한다. ICE 방식은 일반 P2P 파일 공유 애플리케이션에서 NAT나 방화벽을 통과할 때 사용되는 기법과 흡사.
   
!- a. Caller 가 가능한 모든 주소를 수집한다.
   
!- b. 이후 다양한 방법으로 호를 시도한다.
만약 내부망(사설)의 경우로 호 성공 시 최적 라우팅 경로로 호 완성된다.
   
   
* STUN/TURN/ICE 서버
http://www.myvoipapp.com - 윈도우 기반, 20일 무료 사용 가능, STUN/SIP 서버 가능
http://www.pjsip.org/pjnath/docs/html/index.htm - STUN/TURN/ICE linux 기반 library
http://numb.viagenie.ca/ - 무료 STUN/TURN 서버 서비스 제공
http://www.eyeball.com/nat-traversal.htm - 유료 STUN/TURN/ICE 기반 서버
   
   
[애플리케이션 계층 게이트웨이(ALG)/SBC]
STUN/TURN/ICE 는 모두 UA의 관여를 필요한다. 즉 UA에 STUN/TURN/ICE 처리 가능해야 된다.
즉 전화기에 해당 기능 구현이 가능해야 되는 단점이 있다. UA의 관여 없이 해결책으로는 ALG/SBC가 있다.
(통상 VoIP SIP ALG를 'SBC'라고 부르기고 하겠음)
   
SBC는 방화벽이 인정하고 신뢰하는 서버로써 SIP/RTP 의 Proxy 역활을 한다.
방화벽은 SBC에서 만들어 지거나 SBC로 보내어지는 SIP/RTP만 통화를 허용하고 그 외는 차단한다.
SBC는 NAT에서도 적용 가능하다. SBC는 Proxy된 모든 SIP 메시지를 조사하여 본문의 사설 IP 정보들을
모두 해당 공인 IP 주소로 변경한다.
   
   
위 그림에서 왼쪽의 SIP Proxy 에 Firewall 이 있다고 해도 왼쪽의 UA가 중간에 SBC로 향하는 signal/RTP는
허용 되며 또한 SBC가 오른쪽에 전달하는 signal/RTP 역시 허용되게 된다.
위 처럼 방화벽은 SIP SBC에 대한 최소한의 허용만으로 signal/RTP 패킷 통과를 보장하게 된다.
또한 SBC 중간에 NAT/Firewall 이 있는 경우 cache table 을 계속 지속해서 pin hole 을 뚫는 방법등이
필요하게 된다. UA의 register 을 cache table 의 만료 시간보다 짥게 하거나 아니면 cache table 만료 시간을
길게 하거나 또는 dummy RTP를 사용해서 외부 UA가 내부로 먼저 들어오게 되는 RTP 세션을 잘 통과하기도 한다.
   
또 다른 방법주에서 SIP 방화벽 Proxy 를 사용하는 방법. SIP 방화벽 Proxy는 UA에 대한 인증,확인등을 대신하고
INVITE나 200ok 메시지를 보고 UA들의 IP주소와 포트번호를 알아내어 방화벽에게 이들 IP주소와 포트 번호에 대해
잠시 차단을 해제 할 것을 요청한다. 또한 NAT의 경우 방화벽 Proxy는 UA의 사설IP 주소와 공인 IP 주소의 바인딩
관리를 통해 메시지의 SDP에 들어있는 사설IP 주소를 공인IP 주소로 변경해 줌으로써 UA간의 직접적인 RTP 패킷
교환이 가능하게 한다. BYE 메시지에 의해 세션이 종료 될 경우 방화벽 Proxy는 다시 원래대로 차단하게 하고
NAT 장비역시 바인딩 정보를 삭제도록 한다.
하지만 아직 방화벽이나 NAT 장비가 SIP Proxy와 직접 처리하기 위한 프로토콜은 없다.
   
위 SBC 모델은 단점은 SBC 자체가 SIP의 구성 요소가 아니기 때문에 SIP의 단대단 특징을 무시한다.
그 결과 SIP 의 TLS와 같은 보안 메카니즘을 지원하지 않을 수 있다. 또한 S/MIME으로 메시지 본문을 보안 처리 할 때
SBC가 S/MIME 기능 처리를 못하거나 메시지 내용을 손상 할 수 있다.
이런 이유로 SBC보다는 STUN/TURN/ICE 사용이 권장된다. 또한 SBC 경유 시 추가 지연이 발생한다.
<= 하지만 사업자 모델에서는 중앙 제어가 가능한 SBC가 권장된다.
   
* SBC 제품
http://www.acmepacket.com/ - acme packet(SBC)
http://www.cwti.kr/ - 크로스위브 사이페리아 VoIP FW(SBC)
http://www.nablecomm.com - nXer SBC 네이블커뮤니케이션즈(SBC)
   
   
[개인정보유출]
기존 PSTN에서는 발신자 신상을 숨기는 일이 어렵지 않다. 공중전화를 사용하는 것이 하나의 방법이다.
하지만 SIP 세션에서는 상당히 많은 정보들이 교환되어 정보 유출을 피할 길이 없다.
SIP에서 익명을 제공하는 길은 B2BUA를 사용하는 방법이다.
신원 확인이 필요한 경우 P-Asserted-Identity 헤더를 사용할 수 있다.
   
   
* 참고 사이트
http://www.nexpert.net/75 - NAT 에 대한 이해

2012년 5월 1일 화요일

[VoIP SIP 알자/11-2. SIP 서비스 Call Flow]

출처 : http://blog.naver.com/mongu2/140123155328



[고급 전화 서비스]
SIP 기반 전화서비스에 대한 기본적인 기대는, 이 서비스가 인터넷에서 구현될 수 있고, 서비스사간의 경계를 없애며,
나아가 개별 회사의 제품이나 소프트웨어에 구애 받지 않을 것이라는 점이다.
   
* 전화통신의 고급 서비스 기능
PBX 및 센트릭스 기능들
사설 구내 교환 서비스(CLASS:Custom Local Area Signaling Services) 기능들
지능망(Advanced Intelligent Network) 서비스
   
기존 PBX 제품들은 상호 연동을 기대할 수 없다. 하지만 인터넷 기반 PBX 서비스들에 대한 표준화는 그 자체로
기존 PBX 시장에 지각변동을 일으키기에 충분하다.
   
[PBX 및 CLASS(사설 구내 교환 서비스) 기능]
   
ㄱ. 호 전환(Call Transfer)
ㄴ. 통화중 대기(Call waiting)
ㄷ. 호 보류(Call Hold)
ㄹ. 호 교체(Call Park and Pickup)
ㅁ. 착신 전환(Call Forwarding)
ㅂ. 발신자 표시(Calling Line Identification)
ㅅ. 수발신 호 걸러내기(incoming and outgoing call screening)
ㅇ. 자동 콜백(automatic callback and recall)
ㅈ. 단축 다이얼
ㅊ. 컨퍼런스 콜
ㅋ. 음성메일
ㅌ. 음성 자동 안내 시스템(IVR)
ㅍ. 최적 라우팅 서비스
ㅎ. 데이터베이스 관련 서비스
   
   
ㄱ. 호 전환(Call Transfer)
크게 4가지의 형태(Unattended, Attended, Consultation Hold, Instant Messaging)가 있으며 REFER 메소드로 구현된다.
   
a. Unattended (무조건 확인 없이 전환)
: 전화를 돌려주는 측이 REFER 메시지를 보낸 후 바로 BYE 메시지를 보내 호 전환 결과에 무관하게 현재 호를 종료한다.
! 아래는 Alice<->Bob 간 통화 중 Alice 가 Carol 로 호를 전환 해주는 과정의 Flow 이다.
   
   
b. Attended (확인 후 전환)
: 일시적인 3자간 컨퍼런싱과 같다. 돌려주는 측은 호 전환 진행상황을 주시하다가 호 전환이 이루어진 것을 확인 한 후
호에서 빠진다. 즉, 통화 연결음 후 통화 완료 후 전환 후 빠지는 방법
! 아래는 Alice<->Bob 간 통화 중 Bob 가 Carol 에게 호를 전환 해주고 빠지는 과정의 Flow 이다.
   
   
c. Consultation Hold (확인 없는 호 전환)
: 돌려주는 측이 REFER 요청에 대한 응답을 기다리는 동안 발신자도 기다리게 한다. REFER 요청에 대한 결과로 호 전환이
성공하면 BYE 메시지를 보내 기존 호를 종료한다. 즉, 통화 연결음만 듣고 전환 후 빠지는 방법
   
d. Instant Messaging
: 돌려주는 측이 메시지에 URI를 보내어 URI를 선택하면 발신자와 호 연결이 된다.
   
   
tip. 시스코 IOS 장비에서 transfer-system
   
   
ㄴ. 통화중 대기(Call waiting)
: SIP 네트워크는 '회선'이라는 개념이 없기 때문에 이와 정확히 일치하는 서비스는 없다. 하지만 수신측에서 현재
통화중인 상태임에도 불구하고 180Ringing 응답을 보낸 후, 현재 호를 중단하고 새로운 호를 받을 지, 아니면 두 번째
호 발신자를 그냥 무시할 지를 결정할 수 있다.
! 아래는 시스코 의 Call waiting 의 Call Flow 이다.
! SIP A<-> SIP B 통화 중 SIP C가 SIP B로 통화를 하게 되면 SIP B에 display 에 두번째 통화가 표현이 되고
! SIP B는 SIP C를 받게 되면 SIP A는 잠시 Hold 상태가 된다. 이후 SIP B는 SIP C와 통화를 한다.
! 중간에 SIP B가 SIP A에게 미디어를 단방향으로 전달하게 하는 INVITE(a=sendonly)로 보내는 것 알 수 있다.
! 이후 SIP B가 SIP A와 통화를 재게 하기 위해서 INVITE(a=sendrecv)를 다시 보내는 것 을 알 수 있다.
   
   
ㄷ. 호 보류(Call Hold)
PSTN에서 이 기능은 매우 다양한다. 간단하게는 전화기의 '보류' 버튼을 눌러서 수화기의 스피커와 마이크를 차단하는
것에서부터 PBX나 ISDN 시스템의 고급 서비스에까지 걸쳐 있다. SIP 에서는 통화중에 re-INVITE 메시지를 보내
미디어 스트림을 양방향 통신에서 단방향(보내기만 하는) 통신으로 변경함으로써 호 보류 기능을 제공할 수 있다.
초기 버전에서는 SDP의 IP 주소를 0.0.0.0 으로 설정한 re-INVITE 메시지가 이 기능을 담당했다. 호 보류의 해제는
0 이 아닌 IP 주소의 re-INVITE 메시지를 보내 양방향 통신으로 변경함으로써 이루어 진다.
! Alice 와 Bob 이 통화 중 Bob 이 hold 후 hole 해제 후 통화 과정의 Flow 이다.
   
   
ㄹ. 호 교체(Call Park and Pickup)
현재 호를 잠시 보류하고 다른 장소에서 호를 재개하는 기능.
SIP에서는 REFER 를 이용한 방식제3자 호 제어re-INVITE를 통한 방식 등이 있다.
!- Call Park 아래는 Alice<->Bob 통화 중 Bob이 REFER 로 Call Park 후 Carol 이 Alice 와 통화를 재개하는 방식이다.
   
!- Call Pickup, Alice 가 Bob에게 전화를 하지만 Bob이 부재중이라서 Bill 이 대신 Bob에게 걸려온 전화를 pickup 한다.
   
   
ㅁ. 착신 전환(Call Forwarding)
착신 전환은 3가지로 형태로 나누어진다. 즉 '통화중/부재중/무조건 착신전환' 이다.
SIP 착신 전환은 [7. SIP 서비스] 에서 알아보았습니다. Proxy 나 UA에서 기능 제공될 수 있습니다.
   
a. 무조건 착신 전환(Unconditional)
! SIP A가 SIP B에게 전화를 하였지만 무조건 착신 전환에 의해 SIP C에게 전화가 걸리게 됩니다.
   
!- 아래는 Alice 가 Bob에게 전화를 하였지만 Proxy에서 Bob의 착신전화측은 PSTN(Gateway측)으로 INVITE 보냄
   
b. 퉁화중 착신 전환(Busy)
! Alice 가 Bob에게 통화를 시도하였으나 현재 Bob(B1) 은 통화 중이라서 486 메시지 후 Bob(B2)로 INVITE 한다.
   
c. 부재중 착신 전환(No Answer)
일정 기간 동안 전화를 받지 않을 시 다른 쪽으로 호를 전환하는 방법이다.
! Alice 가 Bob(B1)에게 전화를 하였으나 일정 기간 동안(TIMEOUT!) Bob(B1)이 응답하지 않으면 Bob(B2)에게 호 전환.
   
   
ㅂ. 발신자 표시(Calling Line Identification)
위 기능은 모르는 사람으로 부터 오는 전화는 미리 차단할 수 있다. SIP 에서는 From 헤더 정보를 통해 간단히 구현 됨.
문제는 From 헤더가 발신 UA에 의해 작성되는 것이기 때문에 정확하지 않을 수 있다. 대안으로 [9. SIP보안]에서 살펴본
Identity 헤더를 통해 From 헤더의 정확성을 검증 할 수 있다.
   
   
ㅅ. 수발신 호 걸러내기(incoming and outgoing call screening)
이 기능은 Proxy 나 UA에서 구현 가능. 메시지의 Request-URI 나 From 헤더를 미리 저장된 허용 또는 차단 URI 목록과
비교하여 적절한 동작을 수행한다. 예를 들면 차단 URI에 해당되면 403 Forbidden 응답을 보내고 호를 차단한다.
발신 호의 경우 UA가 항샹 Outbound Proxy 를 기본으로 사용하도록 설정되어 있다면 그 Proxy 에서 걸러내기 기능을
수행할 수 있다. 수신 호의 경우에도 UA가 Inbound Proxy 하고만 통신하도록 설정되어 있다면 수신 호 걸러내기 기능은
Inbound Proxy 에서 제공될 수 있다.
   
! incoming call screening (수신호 걸러내기)
Alice 가 Bob 에게 전화를 하였지만 Bob의 차단 List 에 Alice 가 있어서 차단 되고 차단에 대한 간단한 응답 멘트를 들음.
   
! outcoming call screening (발신호 걸러내기)
   
   
ㅇ. 자동 콜백(automatic callback and recall)
PSTN 자동 콜백은 발신자 표시 서비스를 이용하여 받지 못한 전화를 다시 걸어준다. SIP에서는 성공하지 못한 이전
INVITE 메시지들의 From 헤더를 이용한다. PSTN 자동 재시도는 상대방이 통화중으로 인해 실패했던 호에 대해
상대방이 통화를 마치는대로 다시 연결해주는 서비스이다. SIP에서는 상태정보 서비스로 간단히 해결된다.
상대방에게 통화를 끝내는대로 알려줄 것을 요청하는 SUBSCRIBE 메시지를 보내고 NOTIFY 메시지를 통해 자동으로
INVITE 메시지를 다시 보내도록 한다. [6장] 참고
   
! Alice 가 Bob 에게 전화를 하였으나 Bob 이 통화 중이다. Bob은 AutoCallBack 기능에 의해서 Subscirbe/NOTIFY 을
통해 Bob가 이후 전화 가능 상태가 되면 NOTIFT를 보내엇 Alice 가 다시 INVITE 가 보내어지게 한다.
   
!- 아래는 시스코의 CallBack 서비스 실행 후
   
   
ㅈ. 단축 다이얼
작은 갯수의 번호만으로 전화를 걸 수 있는 기능. 단축 다이얼 정보는 전화기 또는 망에 저장된다.
! 시스코의 스피드 다이얼 설정 화면(단축 다이얼)
   
   
ㅊ. 컨퍼런스 콜
[14장]에서 다루기로 한다.
   
   
ㅋ. 음성메일
[12장]에서 다루기로 한다
   
ㅌ. 음성 자동 안내 시스템(IVR)
시스템이 자동으로 전화를 받아 음성 안내나 음성 멘트를 내보낸다. 발신자의 음성이나 DTMF 신호(키 패드 입력)
로부터 정보를 수집하여, 필요 시 담당자에게 호를 연결, 즉 전환한다. 이 뒤 제3자 제어 방식으로 구현 가능.
   
ㅍ. 최적 라우팅 서비스
호 설정 경로를 시간, 발신 위치, 트래픽 상황 등에 따라 최적화하여 제공하는 서비스, Proxy 서버에 의해 제공 된다.
   
ㅎ. 데이터베이스 관련 서비스
PSTN망에서는 망과 DB가 분리되어 있어 DB에 접근하는 일이 매우 민감한 문제이다. 반면 SIP은 SIP 장비나 DB 서버나
모두 같은 인터넷에 있기 때문에 DB에 접근하는 것도 간단하다. 보통 HTTP나 FTP가 사용되고 간단한 질의 서비스는
SIP Redirect Server 를 통해 제공된다.
   
   
* 참고
http://www.flypiggy.org/mtwin/tech-invite/ <- SIP Call Flow(강추!)


* 쏠라구구 생각
위 기능들은 대부분의 PSTN에서 제공하는 기술로 VoIP 에서도 거의 필수적으로 구현되야만 하는 기술이라 생각합니다.
해당 서비스 기술들이 어떠한 Call Flow 를 통해서 제공되는지 명확히 알고 있어야 '기능 구현/장애 처리/고객과대화' 를
유연하게 처리할 수 있을거라 생각합니다. 물론 장비/단말에서도 지원이 되어야 겠지요.