1. TCP 연결 3단계 핸드세이킹
ㅇ TCP는 안정적이고 연결지향적인 트랜스포트 계층용 프로토콜로써,
ㅇ 연결 세션 설정을 위해 3단계의 핸드세이킹 과정을 밟음
2. TCP의 3-way Handshaking 흐름도
※ [참고] ☞ TCP 세그먼트, 능동개방/수동개방, 초기 순서번호, TCP 제어플래그 등 참조
3. TCP의 3-way Handshaking의 각 단계
ㅇ 세그먼트 1 (SYN 세그먼트) : 연결 요청 (`초기 동기화 패킷` 라고도 불리움)
- TCP 제어 플래그 : 클라이언트가 SYN 플래그 = 1로 설정
- TCP 헤더 필드
. 순서번호 = ISN (클라이언트측)
. (확인응답 번호,윈도우 크기 필드는 미정의됨)
- `데이터 미 전송` 그러나, `하나의 순서번호`는 소비함
- TCP 옵션 : MSS 포함시킴
- TCP 상태 천이 : 클라이언트는 `SYN-SENT` TCP상태로 전이
ㅇ 세그먼트 2 (SYN+ACK 세그먼트) : 연결 허락
- TCP 제어 플래그 : SYN 플래그 = 1 및 ACK 플래그 = 1로 설정
- TCP 헤더 필드
. 순서번호 = ISN (서버측),
. 확인응답 번호 = (수신된 순서번호 + 1)
.. 클라이언트로부터 수신을 기대하는 다음 순서번호를 확인응답/승인하며 전송
. (윈도우 크기 필드는 정의됨)
- `데이터 미 전송` 그러나, `하나의 순서번호`는 소비함
- TCP 옵션 : MSS 포함시킴
- TCP 상태 천이 : 서버는 `LISTEN` → `SYN-RECEIVED` TCP상태로 전이
. 이를 절반 개방(Half Open)이라고도 함
ㅇ 세그먼트 3 (ACK 세그먼트) : 연결 설정
- 단순히 ACK 전송 만을 위함
- TCP 제어 플래그 : 클라이언트가 ACK 플래그 = 1로 설정
. 이때, 회선 설정이 이미 이뤄진 상태이므로 굳이 SYN 플래그를 설정 안해도 됨
- TCP 헤더 필드
. 승인번호 = (수신된 순서번호 + 1),
. 확인응답 번호 : (SYN+ACK 세그먼트)의 확인응답 번호를 그대로 복사 사용
- 일반적으로, 데이터 미 전송하며, 어떠한 순서번호도 소비하지 않음
- TCP 옵션 : 통상, 이 세그먼트에서는 비어 있게 됨
- TCP 상태 천이 : 양단 모두 `ESTABLISHED` TCP상태로 들어감
. (`SYN-SENT` → `ESTABLISHED` 및 `SYN-RECEIVED` → `ESTABLISHED`)
※ 여기서, 초기 순서번호(ISN) 이란?
- 랜덤 수를 선택한 후 상대에게 전송
. 순서번호 초기화 직후 상대와의 순서번호 동기화 목적
- TCP는 양방향이므로 각 방향 마다 다른 ISN 번호가 사용됨
※ [참고] ☞ TCP 헤더, TCP 제어 플래그, TCP 연결 종료 등 참조
4. TCP의 3-way Handshaking의 주요 목적 둘
ㅇ 연결이 시작됨과 옵션이 교환됐음을 알림
ㅇ ISN(랜덤한 초기 순서번호)를 생성하고 교환했음을 알림
5. TCP 연결과정에서 교환되는 주요 정보(유형) 셋
ㅇ ISN (초기 순서번호)
- 연결된 두 장비 간에 각 방향 마다 초기 순서번호를 서로 교환함
ㅇ 수신 기본 윈도우 크기 (rwnd)
ㅇ 옵션 정보 ☞ TCP 옵션 참조
- MSS 옵션
- 추가 윈도우 크기 스케일 옵션
- SACK 옵션 허용
- SACK 옵션 데이터 등