SCTP 프로토콜이란?
간단하게 이야기 해서 UDP와 TCP프로토콜의 장점을 합친 차세대 프로토콜이다. 멀티 스트리밍과 멀티 호밍을 지원하며 TCP에서 문제점으로 재기 되었던 TCP-SYN 공격 문제 및 "half-open closing" 문제들을 해결할 수 있다. VoIP 신호 전달 외에도 다중 미디어를 전송하는 웹 응용, WebRTC등의 프로토콜에서 사용된다.
UDP와 TCP의 특징은?
위 설명에서 SCTP 프로토콜은 UDP와 TCP 프로토콜의 장점을 모은 차세대 프로토콜이라고 하였다. 그럼 여기서 이야기 하는 UDP TCP 프로토콜은 무엇일까?
세가지 프로토콜 모두 OSI 7계층에서 4 Layer인 Transport Layer에 속해있다.
3 Layer인 IP를 이용하여 실제 라우터로 연결되어있는 네트워크 망에 경로를 찾아가는 것을 의미한다면 4계층은 End to End를 어떻게 연결할 것인가에 대한 기능을 하는 계층이다. 데이터가 손실 없이 잘 도착했는지 "오류제어"와 적절한 흐름으로 전송되는지에 대한 "흐름제어" 등의 역할을 한다. 이곳에서 구분하는 기준은 Port를 기준으로 구분한다.
그럼 대표적인 프로토콜인 UDP와 TCP의 차이점은 무엇일까?
TCP 프로토콜
TCP프로토콜은 한국어로 전송제어 프로토콜이며 Transmission Control Protocol의 약어이다.
이름에서 유추할 수 있듯이 인터넷 망을 통해 데이터를 전송할때 전송을 제어하는 프로토콜이라는 의미이다. UDP 프로콜과 가장 크게 대비되는 부분이 이것이다. 3계층인 IP와 합쳐서 TCP/IP 프로토콜이라고 부르기도 한다.
TCP 프로토콜은 오류제어와 흐름제어를 하기때문에 (순서를 보장해아 함) 헤더내에 Sequence number와 Acknowledgment number(Ack시에)를 포함하여 보내며 이를 통해서 순서를 재조합과 오류제어를 한다. 2계층(Data Link Layer)에서 네트워크 계층을 거쳐오며 데이터 자체 문제 여부를 판단하기 위한 Checksum을 포함하고 있으며 이는 UDP에서도 포함하고 있다.
(추가적으로 Sliding Window, 혼잡제어 방식 등 여러가지 기법이 추가적으로 존재하는데 이에 대한 자세한 내용은 TCP의 내용을 자세히 작성하도록 하겠다.)
TCP는 전송하기 전에 연결 수립과정을 거치는데 3 Way Handshake라고 한다. 말그대로 3번 악수를 한다고 생각하여도 무방하다.
그림은 아래와 같다.(왼쪽이 클라이언트, 오른쪽이 서버이다.)
1. 처음에 서버측으로 클라이언트가 SYN를 보낸다. 클라이언트에서 임의로 시퀀스 번호 A를 넣어서 보낸다.
2. 그걸 받은 서버는 받은 SYN+1 값(A+1)을 ACK로 보내고 서버에서도 임의로 설정한 SYN B를 보낸다.
3. 클라이언트는 받은 SYN+1 값(B+1)를 서버로 다시 ACK로 보내면 연결이 수립되며 데이터 전송을 시작한다.
이와 마찬가지로 연결을 끊는 과정도 Handshake과정을 거치지만 끊는 과정은 4 Way Handshake 과정을 거친다.
그림은 다음과 같다.(마찬가지로 클라이언트가 왼쪽 서버가 오른쪽이다.)
1. 처음에 서버측으로 클라이언트가 FIN을 보낸다. 클라이언트에서 임의로 시퀀스 번호 A를 넣어서 보낸다.
2. 그걸 받은 서버는 받은 FIN+1 값(A+1)을 ACK로 보낸다.
3. Server에서 더 이상 보낼 데이터가 없다면 그때 서버에서 임의로 시퀀스 번호(B)를 넣어서 클라이언트로 보낸다.(Half Close상태)
4. 클라이언트는 받은 FIN+1 값(B+1)를 서버로 다시 ACK로 보내면 연결이 종료된다.
여기서 TCP에서는 Half Close상태를 이용한 Attack이 존재하는데 이에대한 내용은 SCTP가 어떻게 해결했는지에 대해서 다음 글에서 쓴다.
UDP 프로토콜
UDP(User Datagram Protocal)의 약어로 데이터를 Datagram 단위로 보내겠다는 의미이며 TCP와는 달리 비연결 프로토콜이다. TCP와 가장 큰 차이점은 데이터를 보내고 이것에 대한 전송 확인을 하지 않는다. 네트워크 환경에서 따라 모든 패킷들은 각기 다른 경로로 보내지고 도착하는 시점이 다른데 TCP의 경우는 만약 데이터가 유실되거나 순서가 바뀌면 재조합을 해주지만 UDP는 그 과정이 없고 유실된 데이터에 대해서는 재전송을 요청하지 않는다. 체크썸을 통해서 해당 데이터가 올바르게 왔는지 여부정도만 체크한다.
따라서, 연결에 대한 추가적인 작업이 필요 없기때문에 TCP에 비해서 속도가 빠른편이며 전송의 신뢰가 필요한 경우에는 일반적으로는 쓰지 않으며 스트리밍과 같은 서비스에서 주로 사용한다.
이 두가지의 장점을 합친 SCTP 프로토콜에 대해서는 본격적으로 다음에 다루도록 한다.
'Stove Dev Camp' 카테고리의 다른 글
Spring Boot 일정시간마다 실행시키기 (0) | 2021.02.03 |
---|---|
Spring-boot "Handshake failed due to invalid Upgrade header: null" Error (Spring boot Websocket 연결 에러) (0) | 2021.02.01 |
WebRTC Data Channel (0) | 2021.01.18 |
WebRTC란? (STUN과 TURN 서버의 이해) (2) (3) | 2020.12.29 |
WebRTC란? (1) (0) | 2020.12.22 |