SlideShare a Scribd company logo
1 of 31
XMPP
XMPP
The Extensible Messaging and Presence Protocol
Real-Time IM, 그룹 채팅, 주소록, 상태확인, 음성/영상 통화
Jeremie Miller (1998)
XML Based
Open Standard(예 : TCP/IP, HTTP, SMTP ...)
IETF RFC 3920, RFC 3921 (2004년)
RFC 6120, RFC 6121, RFC 6122 (2011)
RFC 7395 WebSocket(2012)
XMPP.ORG 최신 버젼 확인 가능
XMPP Server
AGPLv3
- 수정 소스 코드 public 공개 (범위 확인 필요
)
- 구입 하게 되면 공개 안해도 됨
Apache License 2.0
- 소스 코드 공개 의무 없음
누가 XMPP 사용하는가
http://xmpp.org/software/projects.html
XMPP 주요기능
Authentication [RFC 3920]
Presence [RFC 3921]
Contact list [RFC 3921]
One to one messaging [RFC 3920]
Bidirectional-streams Over Synchronous [RFC 7395]
Channel encryption [RFC 3920]
Multi-party messaging [XEP-0045]
Notifications [XEP-0060]
Peer to peer media sessions [XEP-0166]
- voice chat, video chat, file transfer etc
user@domain/resource
예)
jun562@tts.com/mobile
jun562@tts.com/work
jun562@tts.com/home
JID (Jabber Identifiers)
Server-client
JID
전영규@tts.com
현빈@tts.com
[Client]
정보 디스플레이, 메시지 전송, 메시지 디스플레이
[Server]
packet routing, 메시지 관리
[Streams]
client와 server간의 XML을 전송하는 구간
tts.com
Server
Xml stream
Xml stream
Xml stream
Federation (Server to Server)
tts.com
Server
couping.com
Server
JID
전영규@tts.com
현빈@tts.com
JID
송중기@couping.com
송혜교@couping.com
chat.tts.com
chat.hhs.com
jun562@chat.tts.com scott@chat.tts.com
jun562@chat.hhs.com scott@chat.hhs.com
jun562@chat.ggb.com scott@chat.ggb.com
jun562@chat.qqa.com scott@chat.qqa.com
Virtual server
같은 도메인 끼리 대화 가능
XML Stream step-by-step
1. Stream 시작
2. 인증
3. Resource and Session 설정
4. 주소록 가지고 오기
5. Presence 업데이트
6. 메시지 보내기
Stream 클라이언트 시작
①<stream:stream 으로 시작
②JID의 domain 정보만 입력(virtual server)
③default namespace
④stream namespace
⑤XMPP version (항상 1.0)
<stream />를 닫지 않고 다른 element 추가. 세션 끊을 때
</stream:stream>
<stream:stream
to='chat.tts.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
①
②
③
④
⑤
<?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="chat000"
id="9s0vb2xznv" xml:lang="en" version="1.0">
<stream:features>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>SCRAM-SHA-1</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
Stream 서버 응답
Stream features 정보
① server domain
② unique stream id
③sasl(Simple Authentication and Security Layer)
통해 인증.
④데이터는 zlib로 압축
①
②
③
④
인증 1
<auth xmlns=”urn:ietf:params:xml:ns:xmpp-sasl”
mechanism=”DIGEST-MD5”>
</auth>
<challenge
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
cmVhbG09ImNoYXQwMDAiLG5vbmNlPSIw
RWFMc01VWVhBelRSazlWOGY1QmNFdH
h6cXdJZXgzd2pjdjRPMWtVIixxb3A9ImF1d
GgiLGNoYXJzZXQ9dXRmLTgsYWxnb3Jpd
GhtPW1kNS1zZXNz</challenge>
BASE64 DECODE
realm="chat000",nonce="0EaLsMUYXAzTRk9V8f5Bc
EtxzqwIex3wjcv4O1kU",qop="auth",charset=utf-
8,algorithm=md5-sess
CLIENT SERVER
인증 2
<response xmlns="urn:ietf:params:xml:ns:xmpp-
sasl">
Y2hhcnNldD11dGYtOCx1c2VybmFtZT0ianVuNTY
yIixyZWFsbT0iY2hhdDAwMCIsbm9uY2U9IjBFYU
xzTVVZWEF6VFJrOVY4ZjVCY0V0eHpxd0lleDN3
amN2NE8xa1UiLG5jPTAwMDAwMDAxLGNub25j
ZT0iMEo1NDRpa3MraHEvYmxQWEJNNkM4ZFp
CMEtiYklJZHJRVVUvbFVxQyIsZGlnZXN0LXVyaT
0ieG1wcC9jaGF0MDAwIixtYXhidWY9NjU1MzYsc
mVzcG9uc2U9YTFjMGYzY2MzZGMyZTNhOGUx
MzE4ZGIzNjY5NTI3ODgscW9wPWF1dGgsYXV0
aHppZD0ianVuNTYyIg==
</response>
<success
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
cnNwYXV0aD1mYjVjMzIzMmQwZWJiNDRj
NzY2NzkxM2VmNDU2MTJiNQ==
</success>
BASE64 DECODE
rspauth=fb5c3232d0ebb44c7667913ef45612b5
CLIENT SERVER
Resources and Session 설정
<?xml version='1.0' encoding='UTF-8'?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="chat000"
id="29wtdvsbbi"
xml:lang="en" version="1.0">
<stream:features>
<compression
xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
<session xmlns="urn:ietf:params:xml:ns:xmpp-
session">
<optional/>
</session>
<sm xmlns='urn:xmpp:sm:2'/><sm
xmlns='urn:xmpp:sm:3'/>
SASL 인증이 완료 된후 다른 기능 설정을 위한 요청
- resource binding 설정
- XMPP session 설정
Resource Binding
<iq id="3iX62-0" type="set">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-
bind">
<resource>Spark</resource>
</bind>
</iq>
CLIENT SERVER
<iq type="result" id="3iX62-0" to="chat000/29wtdvsbbi">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-
bind">
<jid>jun562@chat000/Spark</jid>
</bind>
</iq>
XMPP Session
<iq id="3iX62-1" type="set">
<session
xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</iq>
CLIENT SERVER
<iq type="result" id="3iX62-1"
to="jun562@chat000/Spark"/>
주소록 가지고 오기
<iq id="3iX62-2" type="get">
<query xmlns="jabber:iq:roster"></query>
</iq>
CLIENT SERVER
<iq type="result" id="3iX62-2"
to="jun562@chat000/Spark">
<query xmlns="jabber:iq:roster">
<item jid="홍길동@chat000" name="........."
subscription="both"><group>.......</group>
</item>
</query>
</iq>
Presence 업데이트
<presence type=’available’ />
인증 단계 이후 presence의 상태는 unavailable
바로 presence available로 업데이트
모바일 환경 에서는 presence 필요 없음
메시지 보내기
<message id="3iX62-207"
to="홍길동@chat000"
from="jun562@chat000/Spark"
type="chat">
<body>TEST</body>
</message>
CLIENT 남정민 CLIENT
<message id="3iX62-207"
to="홍길동@chat000"
from="jun562@chat000/Spark"
type="chat">
<body>TEST</body>
</message>
세션 종료
</stream:stream>
Message Type
normal 즉시 배달되는 메시지. 상대가 오프라인 일때 서버에 저장.
1:1/그룹 채팅방과 상관없이 받는 메시지 (예 : 네이트온 쪽지)
chat 1:1 대화. 오프라인 일때 서버 저장, 온라인 일때 메시지 수신
groupchat 그룹채팅
headline 공지사항 메시지. 상대가 오프라인 이어도 서버에 저장 안함
error 바로 전의 message에 대한 에러 상태
out-of-band <message> element 안에 X element. 일반적으로 파일 다운로드 경로,
FTP 경로, URL 링크, App 다운로드 링크
Out of band message
Chat Bot
Packet capture
WEB, APP 접속 이슈
Browser
APP
XMPP
server
Long-lived TCP 지속 어려움
Stateless HTTP
BOSH(Bidirectional-streams Over Synchronous)
RFC 7395, XEP-0124
Reverse Ajax, Comet
Http Binding
Connection manager가 proxy 역할
Websocket
RFC 7395
BOSH 동작
Comet demo
이슈
Presence가 offline 일때 메시지를 저장 하고 있다가 online 일때 다시 보내줌. DB 용량 이슈는 없을까?

More Related Content

What's hot

HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형Minchul Jung
 
네트워크 공격 실습 보고서
네트워크 공격 실습 보고서네트워크 공격 실습 보고서
네트워크 공격 실습 보고서Dong-Jin Park
 
Wiznet Academy - WizFi250 기초교육 및 실습
Wiznet Academy - WizFi250 기초교육 및 실습Wiznet Academy - WizFi250 기초교육 및 실습
Wiznet Academy - WizFi250 기초교육 및 실습Steve Kim
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조Logpresso
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcpxyzlee
 
Wiki academy sysadmin 5_day
Wiki academy sysadmin 5_dayWiki academy sysadmin 5_day
Wiki academy sysadmin 5_dayJo Hoon
 

What's hot (6)

HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
 
네트워크 공격 실습 보고서
네트워크 공격 실습 보고서네트워크 공격 실습 보고서
네트워크 공격 실습 보고서
 
Wiznet Academy - WizFi250 기초교육 및 실습
Wiznet Academy - WizFi250 기초교육 및 실습Wiznet Academy - WizFi250 기초교육 및 실습
Wiznet Academy - WizFi250 기초교육 및 실습
 
하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조하이퍼레저 패브릭 데이터 구조
하이퍼레저 패브릭 데이터 구조
 
Icmp Attak Against Tcp
Icmp Attak Against TcpIcmp Attak Against Tcp
Icmp Attak Against Tcp
 
Wiki academy sysadmin 5_day
Wiki academy sysadmin 5_dayWiki academy sysadmin 5_day
Wiki academy sysadmin 5_day
 

Similar to Xmpp

Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)wonyong hwang
 
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료choi kyumin
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기Hyperledger Korea User Group
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpointNAVER D2
 
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)AWSKRUG - AWS한국사용자모임
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig baseINSIGHT FORENSIC
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210Yong Joon Moon
 
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1Ji-Woong Choi
 
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개HANCOM MDS
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014Gruter
 
SNMP Overview (SNMP 소개)
SNMP Overview (SNMP 소개)SNMP Overview (SNMP 소개)
SNMP Overview (SNMP 소개)Ye Joo Park
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platformJay JH Park
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02정출 김
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)Hyunmin Lee
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Opennaru, inc.
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Nalee Jang
 

Similar to Xmpp (20)

Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)Hyperledger fabric practice(pdf)
Hyperledger fabric practice(pdf)
 
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
플랫폼데이2013 workflow기반 실시간 스트리밍데이터 수집 및 분석 플랫폼 발표자료
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
 
[164] pinpoint
[164] pinpoint[164] pinpoint
[164] pinpoint
 
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
DynamoDB를 이용한 PHP와 Django간 세션 공유 - 강대성 (피플펀드컴퍼니)
 
네트워크 기본
네트워크 기본네트워크 기본
네트워크 기본
 
Network researching
Network researchingNetwork researching
Network researching
 
(130511) #fitalk utilization of ioc, ioaf and sig base
(130511) #fitalk   utilization of ioc, ioaf and sig base(130511) #fitalk   utilization of ioc, ioaf and sig base
(130511) #fitalk utilization of ioc, ioaf and sig base
 
파이썬+네트워크 20160210
파이썬+네트워크 20160210파이썬+네트워크 20160210
파이썬+네트워크 20160210
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1[오픈소스컨설팅]Nginx jboss 연동가이드__v1
[오픈소스컨설팅]Nginx jboss 연동가이드__v1
 
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개
한컴MDS_Splunk 기반의 빅데이터 활용 사례 소개
 
Hadoop security DeView 2014
Hadoop security DeView 2014Hadoop security DeView 2014
Hadoop security DeView 2014
 
SNMP Overview (SNMP 소개)
SNMP Overview (SNMP 소개)SNMP Overview (SNMP 소개)
SNMP Overview (SNMP 소개)
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
카프카(kafka) 성능 테스트 환경 구축 (JMeter, ELK)
 
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
Apache Tomcat ( 아파치 톰캣 ) 설치 가이드
 
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차Red Hat OpenStack 17 저자직강+스터디그룹_2주차
Red Hat OpenStack 17 저자직강+스터디그룹_2주차
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 

Xmpp

Editor's Notes

  1. 이메일 아이디와 비슷
  2. Jabber는 xmpp 의 다른 이름. 전형적인 client-server 구조. 주요 core 기능, 비즈니스 로직을 server 쪽에서 구현하는 것이 xmpp의 철학인데.. But Case by case Xmpp server는 email 서버처럼 자기 도메인으로 들어온 이메일을 처리하고 보내주는 것처럼 xmpp server도 비슷하게 동작한다. Ssg.com의 도메인을 사용하고 있는 전영규가 서동훈 한테 메시지를 보내주거나 받아줄 수 있도록 한다.
  3. 다른 서버와 federation 즉 연합을 구축할 수 있는데요. 예를 들어ssg.com 도메인을 가지고 있는 회원이 couping.com 으로 등록한 회원과 메시지를 주고 받을 수 있다. 쉽게 얘기 하면 xmpp 프로토콜을 사용 하고 있다면 다른 조직과 메시징 전달이 가능함. 예를 들어 msn, facebook, 네이트온 끼리는 서로 메시지를 못 주고 받지만 xmpp를 사용하면 가능함.
  4. 하나 서버당 하나의 도메인 끼리만 메시지 전달이 가능 하도록 되어 있는데.. Virtual server 사용하게 되면 여러 도메인도 하나의 장비에서 운영할 수 있다. 우리 기획 요건 중에 동일 App 끼리만 대화가 가능 하다고 하였는대… ssg.com, emart.com, shinsegae.com 이렇게 JID를 분리하여 대화 가능 함. 나중에 SSG로 통합 한다고 할때는 하나의 JID만 발행하여 메시지 통합 가능