3-Way Handshake 는 TCP의 접속,4-Way Handshake는 TCP의 접속 해제 과정이다.
3-way handshake
클라이언트, 서버 간의 논리적 접속을 성립하기 위해 사용하는 연결 확인 방식
- 클라이언트가 서버에 연결 요청 (SYN 단계)
- SYN Flag = 1
- Sequenct Number에 시퀀스 번호 a(ISN : 임의의 랜덤 숫자) 함께 전송
- 서버가 연결 허락 (SYN+ACK 단계)
- SYN Flag = 1, ACK Flag = 1
- Acknowledgment Number(a + 1), Sequenct Number(다른 ISN b) 전송
- 클라이언트와 서버 연결 설정 (ACK 단계)
- ACK Flag = 1
- Acknowledgment Number(b + 1) 전송
- max segment size 중 더 작은 값이 데이터 전송 시 사용된다.
ISN : TCP 기반 데이터 통신에서 각각의 새 연결에 할당된 고유한 32비트 시퀀스 번호.
TCP 연결을 통해 전송되는 다른 데이터
바이트와 충돌하지 않는 시퀀스 번호를 할당하는 데 도움이 된다.
4-way handshake
데이터의 송수신이 완료되고 TCP의 연결을 해제하는 과정
- 클라이언트가 서버에 연결을 종료하겠다는 FIN 플래그가 설정된 패킷 전송(FIN_WAIT_1)
- 서버는 ACK로 응답. 이후 자신의 통신이 끝날때까지 기다린다(CLOSE_WAIT). 추가로 전송할 패킷이 남아있다면 이어서 전송한다.
- 클라이언트는 서버의 ACK를 받게 되면 (FIN_WAIT_2) 상태로 변경된다.
- 서버에서 최종적으로 패킷이 전송되면 FIN을 클라이언트에 보내고(LAST_ACK), 클라이언트는 FIN을 받으면 ACK를 보낸 후 (TIME_WAIT) 상태로 변경되며 일정시간동안 대기한다.
- 일정시간동안 대기한 뒤, 클라이언트도 CLOSED 상태로 전환되며 통신이 최종적으로 종료된다.
TIME_WAIT
지연 패킷이 발생했을 때 데이터 무결성을 해결하기 위함. 두 배의 최대 세그먼트 수명(MSL) 시간을 기다리며. 기본적으로 MSL은 2분이다. 또한 연결을 올바르게 닫힌상태로 만들기 위해 존재한다. 예를 들어 CLOSED가 아닌 LAST_ACK로 되어 있으면 그 다음 연결 때 오류가 나타납니다.
ref.
TCP의 연결성립과정 : 3-웨이 핸드쉐이크 / 4-웨이 핸드 쉐이크
네트워크 스터디 3주차
velog.io
[네트워크] TCP/UDP와 3 -Way Handshake & 4 -Way Handshake
TCP / UDP / 3-Way Handshake / 4-Way Handshake
velog.io
'cs' 카테고리의 다른 글
라우팅, 라우터 (0) | 2024.07.02 |
---|---|
QUIZ2 (1) | 2024.07.01 |
TCP/IP 4계층: 응용 계층, 전송 계층, 네트워크 계층 (2) | 2024.07.01 |
MTU, MSS, PMTUD (0) | 2024.06.30 |
TCP/IP 4계층 (2) | 2024.06.30 |