SCTP 는 SCTP 사용자 애플리케이션 계층과 IP 네트워크 계층 사이에 있으며' 연결' 이라는 용어를 사용하여 정보를 교환하는 두 피어 SCTP 사용자 간의 프로토콜 상태를 정의합니다. SCTP 도 접속 지향적이지만 개념적으로 SCTP "연결" 은 TCP 연결보다 더 광범위합니다. TCP 연결에는 하나의 소스 주소와 하나의 대상 주소만 있으며 SCTP 는 각 SCTP 끝점이 다른 피어 엔드포인트에 전송 주소 세트 (전송 주소 = IP 주소 세트+포트 번호 세트) 를 제공할 수 있는 방법을 제공합니다.
TCP 기능 상속을 기반으로 SCTP 는 다음과 같은 몇 가지 추가 기능을 제공합니다.
1. 여러' 스트림' 에서 사용자 데이터를 순차적으로 전송
' 스트림' 은 TCP 에서 일련의 바이트를 지정하고 SCTP 에서는 SCTP 사용자는 연관을 설정할 때 연관에서 지원하는 스트림 수를 지정할 수 있습니다. 이 숫자는 소스 측과 합의된 것이며, 사용자 메시지는 스트림 수와 연관되어 있다. 링크에서 SCTP 는 피어로 전송되는 각 메시지에 스트림 일련 번호를 할당합니다. 수신측에서 SCTP 는 지정된 스트림에서 메시지가 순차적으로 전송되도록 합니다. 또한 한 스트림이 순서가 지정되지 않은 다음 사용자 메시지를 기다리는 동안 다른 스트림의 전송이 계속됩니다.
2. 검색된 경로 MTU (최대 전송 단위) 크기에 따른 사용자 데이터 분할 < P > 하위 계층으로 전송되는 SCTP 패킷이 경로 MTU 와 일치하는지 확인하기 위해 SCTP 는 사용자 메시지를 조각화합니다. 수신측에서 슬라이스는 재구성된 후 상위 SCTP 사용자에게 전달됩니다.
3. SACK (선택적 확인) 및 정체 제어 < P > 패킷 손실 검색에 대한 선택적 확인, TCP 에서 확인 일련 번호는 발신자가 데이터 바이트 일련 번호 (확인 일련 번호로 표시된 바이트 제외) 를 성공적으로 수신한 반면 SCTP 피드백은 발신자에게 손실되고 재전송이 필요한 메시지 일련 번호를 반환합니다.
SCTP 는 느린 부팅, 혼잡 방지 및 빠른 재전송을 포함한 TCP 의 혼잡 제어 기술을 활용합니다. 따라서 및 TCP 응용 프로그램 * * * 이 존재할 때 SCTP 응용 프로그램은 SCTP 에 속하는 네트워크 리소스 부분을 수신할 수 있습니다.
4. 블록 (chunk) 바인딩
즉, 여러 사용자 메시지를 하나의 SCTP 패키지에 선택적으로 바인딩하고 하나 이상의 SCTP 데이터 구조인' 블록' 에 메시지를 배치함으로써 SCTP 는 애플리케이션의 메시지 프레임 경계를 유지합니다. 서로 다른 유형의 블록을 SCTP 패키지에 바인딩할 수 있지만 제어 블록은 데이터 블록 앞에 배치해야 합니다.
5. 경로 관리
SCTP 경로 관리 기능은 주로 원격으로 제공되는 전송 주소 세트 중에서 대상 전송 주소를 선택하는 역할을 하며, SCTP 사용자 지침과 현재 도달 가능한 자격 대상을 기준으로 대상 주소를 선택합니다. 다른 흐름 제어가 도달 가능성 정보를 제공할 수 없는 경우 경로 관리 기능은 정기적으로 링크의 도달 가능성을 스캔하고 원격 전송 주소의 변경 사항을 SCTP 에 보고합니다. 또한 SCTP 경로 관리 기능 모듈은 링크가 설정될 때 사용 가능한 로컬 주소를 원격으로 보고하고 원격으로 반환된 전송 주소를 SCTP 사용자에게 알릴 책임이 있습니다.
6. 다중 호스트 지원
SCTP 가 대상 IP 주소로 패킷을 전송할 때 해당 IP 주소가 도달 불가능한 경우 SCTP 는 메시지를 대체 IP 주소로 다시 라우팅할 수 있습니다. 이렇게 하면 연결된 한쪽 끝이나 양쪽 끝에서 네트워크 수준 오류를 용인할 수 있습니다.
7. 서비스 거부 (DoS) 공격 방지
DoS 를 공격하는 방법에는 여러 가지가 있습니다. 가장 기본적인 DoS 공격은 합리적인 서비스 요청을 활용하여 너무 많은 서비스 자원을 차지하므로 합법적인 사용자가 서비스에 대한 응답을 받지 못하게 하는 것입니다. SYN Flooding 공격은 DoS 공격의 한 예이며 현재 가장 효과가 좋은 해커 공격 방식이다. SYN Flooding 의 타겟 호스트 공격에 저항하기 위해 SCTP 는 관련 초기화 단계에서 안전한' 쿠키' 메커니즘을 구현했습니다.
8. 다양한 전송 모드 지원
TCP 와 같은 엄격하게 순차적 전송, per-stream 과 같은 부분 순차 전송 및 UDP 와 같은 무질서한 전송.
2 SCTP 패킷 구조
SCTP 패킷 구조, 패킷 헤더는 하나 이상의 가변 길이 블록을 따를 수 있습니다. 블록은 TLV (유형-길이-값) 형식을 사용합니다. 소스 포트, 대상 포트 및 검사 코드의 의미는 TCP 의 의미와 유사합니다. SCTP 핸드쉐이킹에서 처음 교환된 초기 레이블의 값이 레이블에 저장되어 있는지 확인합니다. 연관에서 SCTP 패킷에 이러한 레이블이 포함되어 있지 않으면 도착하면 수신측에서 폐기됩니다.
각 블록에서 TLV 에는 블록 유형, 전송 처리 표식기, 블록 길이가 포함됩니다. 서로 다른 블록 유형을 사용하여 제어 정보 또는 데이터를 전송할 수 있습니다. < P > 전송 일련 번호 (TSN) 와 스트림 일련 번호 (SSN) 는 서로 다른 두 가지 일련 번호입니다. TSN 은 연관된 전체 신뢰성을 보장하고 SSN 은 전체 스트림의 순서를 보장하므로 전송 시 데이터 신뢰성을 질서와 독립적으로 분리할 수 있습니다.
3 SCTP 데이터 전송
4.1 SCTP 4 방향 핸드쉐이킹 및 SYN Flooding 공격에 저항하는 원칙
SCTP 연관은 [호스트 a 의 IP 주소 세트]+[호스트 a 의 포트]+[호스트 b 의 IP 주소 세트] 로 정의됩니다 따라서 각 끝의 해당 그룹에 있는 모든 IP 주소는 해당 소스/대상 주소로 이 연결을 표시할 수 있으며, 4 방향 핸드셰이크를 통해 양쪽 끝 SCTP 호스트가 통신 상태를 교환할 수 있습니다.
SYN Flooding 은 TCP/IP 의 고유 취약점을 활용하며, 연결 지향 TCP 세 번의 핸드쉐이킹은 SYN Flooding 의 존재의 기초입니다. SYN Flooding 공격의 원칙은 악의적인 공격자가 SYN 메시지를 서버에 대량으로 보내고, 서버가 SYN+ACK 응답 메시지를 보낸 후 클라이언트의 ACK 메시지를 받을 수 없고 (세 번째 핸드셰이크는 완료할 수 없음), 서버측은 매우 큰 반접속 목록을 유지하기 위해 많은 CPU 시간과 메모리 자원을 소모하고, 이 목록에 있는 IP 를 지속적으로 syn+ 서버측은 공격자가 위조한 TCP 연결 요청을 처리하느라 고객의 정상적인 요청을 무시할 겨를이 없을 것이며, 정상적인 고객의 관점에서 볼 때 서버가 응답하지 않습니다.
반면 SCTP 4 방향 핸드쉐이킹에서는 INIT 메시지 수신측이 상태 정보를 저장하거나 자원을 할당할 필요가 없어 SYN Flooding 과 같은 DoS 공격을 방지합니다. INIT-ACK 메시지를 보낼 때 발신자가 자신의 상태를 설정하는 데 필요한 모든 정보가 있는' 상태 쿠키' 라는 메커니즘을 사용합니다.
SCTP 상태 쿠키를 생성하는 프로세스는 다음과 같습니다.
1. 수신된 INIT 및 전송된 INIT- ACK 블록의 정보를 사용하여 연관된 TCB (전송 제어 블록) 를 작성합니다.
2. TCB 에서 현재 날짜를 생성 날짜로 설정하고 프로토콜 매개변수' 유효 쿠키 시간' 을 생존 기간으로 설정합니다.
3. TCB 에 따라 TCB 재구성에 필요한 최소 정보 하위 집합을 수집하여 해당 하위 집합과 키를 MAC (정보 인증 인코딩) 로 생성합니다.
4. 위에서 설명한 최소 정보 하위 집합을 MAC 과 결합하여 상태 쿠키를 생성합니다.
5. 상태 쿠키 매개 변수를 포함한 INIT ACK 을 보낸 후 발신자는 TCB 및 새 연관과 관련된 모든 로컬 리소스를 삭제해야 합니다.
INIT 및 INIT-ACK 에는 초기 상태를 설정하는 데 필요한 매개변수가 포함되어야 합니다. 신뢰할 수 있는 전송의 초기 TSN 을 보장하는 IP 주소 세트, 수신된 각 SCTP 패킷에 포함되어야 하는 초기 레이블, 각 끝에서 요청한 스트림 수 및 각 끝에서 수신된 스트림 수를 지원할 수 있습니다. 이러한 메시지를 교환한 후 INIT 의 발신자는 쿠키-echo 메시지로 상태 쿠키로 다시 전송됩니다. 수신측은 수신된 쿠키-echo 의 상태 쿠키를 기준으로 자신의 상태를 완전히 재구성한 다음 쿠키-ack 을 반환하여 연관이 설정되었는지 확인합니다. 쿠키-echo 와 쿠키-ack 모두 사용자 데이터 메시지를 해당 패키지에 바인딩할 수 있습니다. < P > 이런 식으로 더 많은 INIT 메시지를 받더라도 수신측에는 자원 소비가 없습니다. 시스템 자원을 할당하거나 새로 연결된 상태를 저장하지 않고 해당 재구성 상태에 사용되는 상태 쿠키를 매개 변수로 사용하여 각 반송된 INIT-ACK 메시지에 포함합니다.
2.2 SCTP 데이터 교환
두 SCTP 호스트 간 정상적인 데이터 교환. SCTP 호스트는 수신된 각 SCTP 패킷을 확인하기 위해 SACK 블록을 보냅니다. SACK 은 수신측의 상태를 완전히 설명할 수 있기 때문에 SACK 에 따르면 송신자는 재전송 판결을 내릴 수 있다. SCTP 는 TCP 의 빠른 재전송 및 시간 출력 재전송 알고리즘과 유사한 것을 지원합니다.
패킷 손실 검색의 경우 SCTP 와 TCP 는 매우 다른 메커니즘을 사용합니다. TCP 가 수신 일련 번호에 간격이 있음을 발견하면 간격이 채워질 때까지 일련 번호가 누락된 패킷보다 높은 데이터를 보내지 않습니다. 그러나 SCTP 는 수신 일련 번호에 간격이 있거나 순서가 어수선한 것을 발견하더라도 후속 데이터를 전송합니다.
3.3 SCTP 셧다운 연결
연결 지향 전송 프로토콜인 SCTP 도 3 방향 핸드셰이킹을 사용하여 연결을 닫지만 TCP 와는 한 가지 차이점이 있습니다. TCP 터미널은 연결 셧다운 중 연결을 열어 종단에서 새 데이터를 받을 수 있지만 SCTP 는 TCP 를 지원하지 않습니다 1. 호스트 A 는 "셧다운 (SHUTDOWN)" 블록을 발행하여 호스트 B 와의 연관을 종료하고, 호스트 A 는 "SHUTDOWN- PENDING" 상태로 들어가고, 이에 상응하는 작업은 상위 응용 프로그램의 데이터를 더 이상 받아들이지 않고, 대기열에 남아 있는 데이터만 전송하여 "입력" 합니다.
2. 호스트 B 가 "종료" 블록을 수신하면 "SHUTDOWN-RECEIVED" 상태로 들어갑니다. 호스트 A 와 마찬가지로 상위 응용 프로그램의 데이터는 더 이상 허용되지 않고 대기열에 남아 있는 데이터만 전송됩니다.
3. 호스트 A 는 호스트 B 가 보낸 나머지 데이터가 도착했음을 알리고 연결이 종료되고 있음을 재확인하는 "종료" 블록을 다시 보냅니다.
4. 두 번째로' 종료' 블록을 받으면 호스트 b 가' 종료 확인' 블록을 보냅니다. 그런 다음
5. 호스트 a 는 "종료 종료" 블록을 보내 이 연관의 종료를 완료합니다.
4 결론
SCTP 는 전송 신호 비즈니스 흐름을 위해 개발되었지만 TCP 보다 우수한 고급 프로토콜 메커니즘 (예: 선택적 확인, 빠른 재전송, 무질서한 전달 등) 을 갖추고 있어 고성능 전송의 요구 사항을 충족함으로써 더 넓은 애플리케이션 요구 사항을 충족할 수 있습니다. 현재 Linux, AIX, Solaris, Windows, FressBSD 등 다양한 운영 체제에서 SCTP 를 지원합니다. 서로 다른 프로토콜 구현 간의 상호 운용성 테스트의 성공은 SCTP 가 상용 제품으로 향하는 길을 보여 줍니다.
IEFT 는 IPv6 주소 지원, IPv6 에 대한 엔드 투 엔드 site-local, link-local 주소 연결 없음 문제 해결, 기존 연관에서 IP 주소 재부팅 없이 동적으로 추가 또는 제거와 같은 차세대 애플리케이션 요구 사항을 충족하기 위해 SCTP 추가 수정에 주력하고 있습니다 < P > 또한 3 세대 이동통신에서는 SCTP 를 신호 호스팅 계층의 대안으로 사용할 수 있으며, 애플리케이션 및 성능 평가도 아직 검토되지 않았습니다.