Network/Unix Network Programming

[UNP] SCTP Association Establishment and Termination

Binceline 2017. 3. 14. 21:48

SCTP는 Connection-Oriented(연결 기반) 통신이다. 그래서 SCTP 또한 Association establishment와 Termination에 대한 Handshake를 한다.


Four-Way handshake

시나리오는 TCP와 비슷하다. SCTP association이 establish되면 알 수 있다.


1. Server는 들어오는 Association을 받을 준비를 해야 한다. 이 준비는 일반적으로 socket, bind, listen을 사용하는 것으로 이루어 지고, 이것이 Passive Open 과정이다.


2. Client에서 connect를 호출하거나, 암묵적으로 association을 open하는 message를 보내면서  Active Open을 하게 된다.

Client SCTP가 Server에게 Client들의 IP주소 목록, Initial Sequence Number, Initiation tag(이 Association에 속한 모든 packet들의 고유값에 대한 tag), Client가 요청하는 OutputStream의 개수, Client가 제공할 수 있는 InputStream의 개수를 알려주기 위해 INIT message를 보낸다,


3. Server는 Client의 INIT message에 INIT-ACK message로 응답하는데, 이 message는 Server의 IP주소 목록, 

Initial Sequence Number, Initiation Tag, Server가 요청하는 OutputStream의 개수, Server가 제공할 수 있는 InputStream의 개수,

State Cookie를 포함하고 있다. State Cookie는 Server가 필요로 하는 Association의 유효성 보장, 그리고 유효성을 보장한다는 사실이 디지털로 명시되어 있는지에 관한 State의 모든 것을 포함한다.


4. Client는 Server가 State-Cookie를 보내면 COOKIE-ECHO message로 응답한다. 이 message는 같은 packet에 user data bundle을 담고 있을 수도 있다.


5. Server는 cookie가 올바른지, 그리고 Association이 establish되었는지에 대해 COOKIE-ACK로 응답한다. 이 message도 같은 packet에 user data bundle을 포함할 수도 있다.


이 작업에 필요한 최소 패킷 수는 4개이다. 그래서 이 과정은 SCTP의 Four-Way Handshake라고 말한다. 책에 과정 사진도 있음.

(윤창블로그 보자)


좀 더 간단히 요약해 보면

1. Server가 준비된다. 

- Passive open

2. Client가 Connection 요청(혹은 어떤 방법으로? 암묵적으로 Association을 open하는 message를 보냄). 

- Active open하며 Client 환경에 대한 온갖 정보들을 INIT packet에 담아 보냄

3. Server에서 INIT packet 받고 INIT-ACK로 응답.

- Server환경에 대한 온갖 정보들과 State-Cookie를 INIT-ACK packet에 담아 보냄

- State-Cookie : Server가 필요로 하는 Association의 유효성 보장, 유효성을 보장한다는 사실이 디지털로 명시되어 있는지

에 관 State의 모든 것을 포함

4. Client에서 INIT_ACK를 받으며 State-Cookie를 받은 후 COOKIE-ECHO packet(user data 포함될 수 있음)으로 응답. 

5. Server는 COOKIE-ECHO를 받고 cookie가 올바른지, 그리고 Association이 establish되었는지에 대해 COOKIE-ACK로 응답.

이다.


SCTP의 handshake 과정은 Cookie generation 과정을 빼면 TCP handshake와 거의 비슷하다.

INIT segment는 

- verification(검증) tag: Ta 

- Initial sequence number: J

와 함께 보내진다.


Ta tag는 Association이 살아 있는 동안에 peer에 의해 전송되는 모든 패킷에 존재해야 한다. 

Initial sequence number J는 Data chunks라고도 하는 DATA messages에 대한 시작 sequence number로 사용된다.


peer에서는 INIT을 받고, INIT-ACK를 보낸다.

- initial sequence number: K

- Verification Tag: Tz

- Cookie: C

를 보내는데, Association이 살아 있는 동안에 모든 packet들에 Tz가 존재하도록 한다.


Cookie는 SCTP Association에 필요한 모든 state를 포함하는데, 그렇기 때문에 Server의 SCTP 스택은 Client과의 Association에 대한 정보를 유지할 필요가 없다.



Four-Way Handshake에 대한 결론


Client side, Server side에서 각각 Primary Destination Address를 가지고 있어야 한다. 

Primary Destination Address는 Network 실패에 대한 부재상황에 data가 보내질 Default Destination Address로 쓰인다


반응형