TCP 3 Way HandShake
TCP/IP 프로토콜을 이용하여 통신을 하는 응용프로그램이 데이터를 전송하기 이전에
서로가 연결이 성립되어있는지 확인하는 과정!
(정확한 전송을 보장하기 위해 서버와 사전에 세션을 수립하는 과정)
3 Way ?
3단계로 이루어진다!!!
사전 학습!!
ISN?
TCP기반 데이터 통신에서 각각의 새 연결에 할당된 고유한 32비트 시퀀스 번호를 나타냅니다. TCP 연결을 통해 전송되는 다른 데이터 바이트와 충돌하지 않는 시퀀스 번호를 할당하는 데 도움이 됩니다.
고유한 32비트 시퀀스를 생성할 때에는 난수를 생성하여 설정합니다.
Why???
연결을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용됩니다.
두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용하는 가능성이 존재합니다.
서버 측에서 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 number가 전송된다면 이전의 connection으로부터 오는 패킷으로 인식할 수 있다.
이러한 문제 발생 가능성을 줄이기 위해 ISN을 난수로설정!
SYN?
Synchronization, 연결 요청 플래그
ACK?
Acknowledgement, 응답 플래그
1단계(SYN 단계)
클라이언트는 서버에게 클라이언트의 ISN을 담아 SYN을 보냄
2단계(SYN + ACK 단계)
서버는 클라이언트가 전송한 SYN을 수신하고 서버 자신의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄
3단계(ACK 단계)
클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄
Sever에서는 LISTEN의 상태일 때 SYN을 받을 수 있습니다!!!
LISTEN?
서버가 클라이언트의 연락을 기다리는(대기하는) 상태
3 Way HandShake를 TCP가 쓰는 이유!
TCP와 UDP의 대표적인 차이점 : 신뢰성의 유무
TCP는 3 Way HandShake를 이용하여 신뢰성을 보장하고 있다고 표현한다.
UDP ? : 신뢰성 없어~ 그런 검사 안해~
정리
3 WayHandShake 과정이 존재하여 TCP는 신뢰성이 있다.
UDP는 이러한과정이 없기 때문에 신뢰성이 없다.라고 말합니다
TCP 4 Way HandShake
會者定離(회자정리)
만나는 사람은 반드시 헤어지게 된다(3 WayHandShake로 만났으니 헤어짐도 있는 법!)
TCP/IP 프로토콜을 이용하여 통신을 하는 서버와 클라이언트가 연결을 해제하는데 하는 과정!
(연결되었던 서버와 세션 종료하는 과정)
4 Way ?
4단계로 이루어진다!!!
사전 학습!!
FIN?
더 이상 전송할 데이터가 없음을 표현! , 연결 종료 플래그
TIME_WAIT? (★★★)
지연 패킷이 발생했을 때 데이터 무결성을 해결
소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점을 해결
연결을 올바르게 닫힌상태로 만들기 위해 존재
: 서버가 CLOSED가 아닌 LAST_ACK로 되어 있으면 그 다음 연결 때 오류가 나타납니다
두 배의 최대 세그먼트 수명(MSL) 시간을 기다린다.
Default MSL : 2분
특정 OS에 따라 다를 수도 있습니다.
1단계(FIN 단계)
클라이언트가 서버에게 클라이언트의 FIN으로 설정된 세그먼트 전송!
클라이언트는 상태를 FIN_WAIT_1로 변경 후 서버의 응답(ACK)을 기다린다.
2단계(ACK 단계)
서버는 클라이언트에게 FIN에 대한 ACK라는 승인 세그먼트를 전송한 뒤 CLOSE_WAIT상태로 변경
클라이언트는 ACK를 받고 FIN_WAIT_2로 변경 후 서버의 응답을 기다린다.
3단계(FIN단계)
서버는 연결을 종료할 준비가 끝나면 클라이언트에게 FIN으로 설정된 세그먼트 전송!
서버는 LAST_ACK(LAST_WAIT)상태가 되며 클라이언트에 응답(ACK)를 기다린다.
4단계(ACK 단계)
클라이언트는 서버의 FIN에 ACK를 서버에 보낸다.
서버는 클라이언트의 ACK를 받으면 CLOSE상태로 변경된다.
클라이언트는 TIME_WAIT 상태로 변경된다.
결론
그래서… TCP 3/4 Way HandShake를 왜 사용합니까???
TCP는 신뢰성을 보장해야하기 때문이다~
※ 잘못된 정보가 있다면 댓글을 남겨주시면 감사하겠습니다.!!!!!
'CS' 카테고리의 다른 글
DB connection Pool (0) | 2023.04.10 |
---|---|
Blocking, Non-blocking & Synchronous, Asynchronous (0) | 2023.04.03 |
HTTP & HTTPS (0) | 2023.03.30 |
대칭키(비밀키) & 비대칭키(공개키) (0) | 2023.03.23 |
댓글