-
[네트워크] 3-way handshake 와 4-way handshake네트워크 2024. 5. 10. 22:57
이 글은 TCP의 접속과 해제 과정에 대해서 알아보는 글이다
기본적인 TCP 정보를 알고 싶으면 아래 글을 참고 하면 된다
https://hyeonni.tistory.com/44[네트워크] TCP 와 UDP
전송 계층 (Transport Layer)프로토콜 : TCP, UDP양 끝단의 사용자들이 신뢰성 있는 데이터를 주고 받을 수 있도록 해준다 💡전송 계층 (Transport Layer) vs 네트워크 계층 (Network Layer)전송 계층 : Application
hyeonni.tistory.com
💡 3-Way Handshake
3-Way Handshake는 한마디로 말하면 TCP의 접속 과정이다
- 데이터를 전송하기 위해 TCP 통신을 이용하여 네트워크 설정 하는 과정이다
- 양쪽에서 모두 데이터를 전송할 준비가 되었다는 것을 보장한다
- 실제로 데이터 전달이 시작하기 전에 다른 쪽이 준비되었다는 것을 알 수 있도록 한다
- 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해서 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다
메커니즘
TCP 통신은 PAR(Positive Acknowledgement with Re-transmission)을 통해 신뢰적인 통신을 제공
PAR을 사용하면 ACK을 받을 때까지 데이터 유닛을 재전송한다
작동 방식
Client(송신자) 는 서버(수신자)와 연결 하기 위해 3-way handshake를 통하여 연결 요청을 하게 된다
3-way handshake 작동 방식 - client는 서버와 커넥션을 연결하기 위해 SYN을 보냄
- 서버가 SYN을 받고 클라이언트에 받았다는 신호인 ACK와 SYN 패킷을 보낸다
- 클라이언트는 서버의 응답인 SYN + ACK를 받고 ACK를 보낸다
💡SYN? ACK?
SYN(Synchronization) : 연결 요청, 세션을 설정하는데 사용되고 초기에 시퀀스 번호를 보낸다
ACK(Acknowledgement) :
- 패킷 도착여부를 확인 하기 위해 사용되는것, TCP Header에 포함되어 있는 4Byte 크기의 정수 데이터
- 수신한 패킷의 Sequence Number와 Data의 크기에 따라 ACK 번호가 결정된다
- 공식은 SEQ + (Data Size)인데 만약, Data Size가 0 이라면 같은 ACK을 반복하게 보내고 받는다
- 이를 방지하기 위해 Data size가 0 이라면 Sequence 번호에 1을 더한 값을 ACK으로 설정한 후 패킷을 전달하게 된다
💡 4 - way Handshake
3-way Handshake는 TCP 연결을 할때 사용한다고 하면 4-way Handshake는 세션을 종료하기 위해 수행하는 과정이다
-> 다른 점은 3-way Handshake는 SYN 패킷을 보냈다면 4-way Handshake는 FIN 플래그를 전송한다
- FIN(finish) : 세션을 종료시키는데 사용된다, 더 이상 보낸 데이터가 없음을 의미한다
작동 방식
4-way Handshake 작동 방식 - client가 연결을 종료하겠다는 FIN 플래그를 서버에게 전송한다 -> 이때 client는 FIN_WAIT 상태가 된다
- 서버는 클라이언트의 FIN 요청을 받고 확인했다고 ACK 를 클라이언트에게 보낸다 -> 이때 자신의 통신이 끝날때 까지 기다린다 (이 상태가 TIME_OUT) 그리고 나서 CLOSE_WAIT 상태가 된다
- 서버는 모든 통신이 끝났으면 연결이 종료되었다는 FIN 플래그를 클라이언트에게 전송한다 -> 이때 서버는 LAST_ACK 상태가 됨
- 클라이언트는 확인했다는 ACK를 보낸다 하지만, 서버로부터 받지 못한 데이터가 있을수 있으므로 TIME_WAIT을 통해 기다린다 (실질적인 종료과정 CLOSED에 들어감)
- 이때 TIME_WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지
- 클라이언트는 이렇게 데드락에 빠지는 것을 방지하기 위해 서버로부터 FIN을 수신하더라도 일정시간 동안 세션을 남겨놓고 남은 패킷을 기다린다 -> 이것을 TIME_WAIT라고 한다
- 만약 에러로 인해 종료가 지연되거나 시간이 초과되면 CLOSED로 들어감
- 서버는 ACK를 받은 이후 소켓을 닫음 -> 이게 CLOSED
- TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫음 -> 이것도 CLOSED
'네트워크' 카테고리의 다른 글
[네트워크] Socket 이란? (0) 2024.09.01 [네트워크] TCP/IP 4계층 (0) 2024.07.11 [네트워크] OSI 7계층 7 Layer (0) 2024.07.09 [네트워크] 쿠키(Cookie), 세션(Session), 토큰(Token) (1) 2024.06.09 [네트워크] TCP 와 UDP (0) 2024.05.09