1. TCP 연결종료
ㅇ TCP는 안정적이고 연결지향적인 트랜스포트 계층용 프로토콜로써,
- 3단계 핸드세이킹 과정을 밟고 회선을 개설한 후, (ESTABLISHED)
- 해당 세션에서 데이터 전송을 완료한 후,
- 보통, 4번(3번도 가능)의 패킷 교환으로 회선 연결을 정상적으로 끊게됨
* [참고용어] ☞ TCP 헤더, TCP 연결 설정, TCP 제어 플래그
2. TCP 연결종료 특징
ㅇ TCP 연결 종료는, TCP 연결 설정 보다는 복잡
- 여러 종료 상황이 있을 수 있음
- 한 방향 연결이 종료되어도, 다른 방향은 계속 오픈 상태일 수 있는 등
ㅇ 정상 종료인 경우에, TCP 연결 종료는, 양방향 2개 연결을 각 측이 독립적으로 닫게 됨
- `FIN 및 그에대한 FIN-ACK`의 2 쌍(4개 세그먼트)으로써,
- 즉, 4-way 핸드세이크로써 종료함
3. TCP 연결 종료 구분
ㅇ 정상 종료 (Normal Close)
- `4단계 핸드세이킹`에 의해 양방향 모두 종료되는 것
. 실제로는 자주 있는 경우가 아니고 반 종료 등이 오히려 일상적임
ㅇ 반 종료 (Half Close)
- 양측이 동시에 회선 종료 않고, 한쪽 연결이 열린채로 놔두고 종료하는 것
. 즉, 송신은 가능하지만 수신은 불가능 또는 수신은 가능하지만 송신은 불가능
ㅇ 동시 종료 (Simultaneous Close)
- 거의 동시에 양측에서 FIN 세그먼트를 보내는 경우
ㅇ 강제 종료
- TCP Reset 요구(RESET 세그먼트) 기능
4. TCP 연결종료 : 4단계 핸드세이킹 (정상 종료인 경우)
ㅇ FIN 세그먼트 : (클라이언트측의 연결 종료 요청) (능동 종료 요청측에서 발송)
- TCP 제어 플래그 : FIN 제어 비트 => `1`
- 순서번호 : `K` (연결된 상태에서 마지막 순서번호 보다 하나 높은 값 임)
- 확인응답 번호 : `-`
ㅇ ACK 세그먼트 : (연결 종료 요청에 대한 서버측의 응답)
- TCP 제어 플래그 : FIN 제어 비트 => `1`, ACK 제어 비트 => `1`
- 순서번호 : `L`
- 확인응답 번호 : `K+1` (이전 FIN 세그먼트의 순서번호 보다 하나 높은 값임)
ㅇ FIN+ACK 세그먼트 : (서버측의 종료 알림)
- TCP 제어 플래그 : FIN 제어 비트 => `1`, ACK 제어 비트 => `1`
- 순서번호 : `L`
- 확인응답 번호 : `K+1`
ㅇ ACK 세그먼트 : (클라이언트측의 최종 종료 알림)
- TCP 제어 플래그 : ACK 제어 비트 => `1`
- 순서번호 : `K`
- 확인응답 번호 : `L+1`