TCP (Transmission Control Protocol)
TCP는 연결 지향적인 프로토콜로 세그먼트 전송 전에 연결을 설정하고 연결 종료 시 연결을 해제한다. 또한, 데이터 전송 시 세그먼트의 전송 여부를 확인하고 손실된 패킷을 재전송하므로 데이터의 정확성과 완정성이 보장된다. 이때 사용되는 전송 방식이 3-way handshake(연결) 와 4-way handshake(해제) 이다.
3-way handshake
1단계(SYN) : 서버와의 연결을 위해 SYN(Synchronize) 플래그가 설정된 TCP 패킷을 전송하여 연결을 확인한다. SYN 플래그는 클라이언트가 연결을 초기화하는데 사용되는 플래그이다. 클라이언트는 시퀀스 번호를 무작위로 선택하여 패킷에 포함시킨다.
2단계(SYN+ACK) : 서버는 SYN 패킷을 받으면, 클라이언트에게 ACK(Acknoledgement) 플래그와 SYN 플래그를 설정한 TCP 패킷을 보내 연결을 수락한다. 서버는 클라이언트의 시퀀스 번호를 확인하고, 자체적으로 시퀀스 번호를 무작위로 선택하여 패킷에 포함시킨다. 또한, ACK는 클라이언트의 시퀀스 번호에 1을 더한 값으로 설정한다.
3단계(ACK) : 클라이언트는 ACK를 받으면 연결이 설정된 것으로 간주한다.
4-way handshake
1단계 : 클라이언트에서 서버로 연결 종료 요청
클라이언트는 서버에게 연결을 종료하고자 함을 나타내는 FIN(Finish) 플래그가 설정된 TCP 패킷을 전송한다. 이 패킷에는 클라이언트의 시퀀스 번호가 포함되어 있다. 패킷을 전송한 다음 클라이언트는 FIN_WAIT_1 상태가 되고 서버의 응답을 기다린다.
2단계 : 서버에서 클라이언트로 연결 종료 응답
서버는 클라이언트의 연결 종료 요청을 받으면, ACK 플래그와 클라이언트의 시퀀스 번호에 1을 더한 값을 ACK 번호로 설정한 TCP 패킷을 전송한다. 이때, 모든 데이터를 보내기 위해 CLOSE WAIT 상태가 된다.
3단계 : 서버에서 클라이언트로 연결 종료 요청
클라이언트는 서버가 보낸 ACK 패킷을 수신하면 FIN_WAIT_2 상태가 된다. 서버는 데이터를 모두 보냈다면, 더 이상 데이터를 전송하지 않을 것임을 나타내는 FIN 플래그가 설정된 TCP 패킷을 전송한다. 이 패킷에는 서버의 시퀀스 번호가 포함되어 있다. 클라이언트는 FIN이 1로 설정된 서버의 다른 패킷을 받으면 TIME WAIT 상태로 전환하여 일정 시간 동안 기다린다.
4단계 : 클라이언트에서 서버로 연결 종료 응답
클라이언트는 서버의 연결 종료 요청을 받으면 ACK 플래그와 서버의 시퀀스 번호에 1을 더한 값을 ACK 번호로 설정한 TCP 패킷을 전송한다.
서버는 ACK를 받은 이후 소켓을 닫는다. (Closed) TIME_WAIT 시간이 끝나면 클라이언트도 닫는다. (Closed)
4단계가 완료되면 클라이언트와 서버는 상호간에 연결을 안전하게 종료한다.
참고:
https://www.geeksforgeeks.org/tcp-3-way-handshake-process/
https://www.geeksforgeeks.org/tcp-connection-termination/?ref=lbp
'Computer Science > Network' 카테고리의 다른 글
[Network] HTTP & HTTPS (0) | 2023.07.07 |
---|---|
[Network] 대칭키 & 비대칭키 (0) | 2023.07.07 |
[Network] UDP (User Datagram Protocol) (0) | 2023.06.30 |
[Network] TCP/IP 흐름제어 & 혼잡제어 (0) | 2023.06.30 |
[Network] OSI 7 계층 (0) | 2023.06.23 |