3-Way-Hadshake / 4-Way-Handshake
TCP 통신에 대해 공부하다보면 3-Way-Hadshake를 통해 연결 및 4-Way-Handshake를 통해 해제를 한다고 알려져 있다.
이 내용은 다음과 같다
3-Way-Hadshake
3-Way-Hadshake란 TCP 통신에서 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정으로,
양쪽 컴퓨터 모두 데이터를 전송할 준비가 되어있다는 것을 보장한다.
다시 말해 TCP/IP 프로토콜을 이용하여 통신하는 응용 프로그램이 데이터를 전송하기 전에
정확한 전송을 보장하기 위해 상대방 컴퓨터와 세션을 수립하는 과정이다.
3-Way-Hadshake 작동 원리
작동원리에 앞서 3-Way-Handshake 방식은 서로 SYN과 ACK를 주고 받는다.
SYN (Synchronization) : 연결 요청 및 세션을 설정하는데 사용되며 초기 시퀀스 번호를 보낸다.
ACK (Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 보낸다.
1. Client가 Server에 SYN 패킷 전송
- Client는 최초 데이터를 전송할 때 시퀀스 번호를 임이의 숫자로 지정하고, SYN 패킷을 전송
- Client의 Port는 Closed -> SYN Sent / Server의 Port는 Closed -> Listen
2. Server가 SYN을 수신 및 Client에게 ACK와 SYN 패킷 전송
- Server는 Client가 보낸 SYN을 받고 Client에 요청을 허용한다는 ACK 와 SYN을 전송
- Server의 Port는 Listen -> SYN Received
3. Client는 Server가 보낸 패킷을 받은 후 Server에 ACK를 전송
- Client측에서 Server에 ACK를 전송해줌으로서 신뢰성이 보장된 연결이 성립
- 이 후 서로 데이터를 주고 받을 수 있다.
- Client의 Port는 SYN Sent -> Establised / Server의 Port는 SYN Received -> Establised
4-Way-Hadshake
4-Way-Hadshake란 3-Way-Hadshake와는 반대로 서로간의 연결을 해제하는 과정이다.
3-Way-Hadshake 작동 원리
3-Way-Handshake 방식에서는 서로 SYN과 ACK를 주고 받았지만 4-Way-Handshake에서는 FIN과 ACK를 주고 받는다.
FIN (Finish) : 더 이상 보낸 데이터가 없음을 의미하며, 세션을 종료시키는데 사용된다.
1. Client가 Server에 FIN 패킷 전송
- Client가 Server측에 연결을 종료하겠다는 FIN 플래그를 전송한다.
- Client는 Server에서 ACK를 보낼 때 까지 FIN_Wait_1 상태로 대기한다.
2. Server가 Client에 ACK로 응답
- Server는 Client가 보낸 FIN을 확인하고, ACK로 응답한다.
- Server의 Close_Wait으로 변경되며, 데이터를 완전히 전송 후 Close 상태로 변한다.
- Client는 Server가 전송한 ACK를 받고 Server측에서 FIN 패킷을 전송할 때까지 FIN_Wait_2 상태로 대기한다.
3. Server가 Client에 FIN 패킷 전송
- Server측에서도 데이터 전송이 완료되면 연결을 종료하겠다는 의미로 Client에게 FIN 패킷을 전송한다.
- 이 후 Client측에서 ACK를 전송할 때까지 Last_ACK 상태로 대기한다.
4. Client가 Server에 ACK로 응답
- Server는 Client의 FIN 패킷을 확인 후 Server측에 ACK를 전송한다.
- 이 때 바로 Closed 상태가 아닌 Time_Wait 상태로 변경 후 시간이 지나면 Closed로 변경한다.
Time Wait이란 의도치 않은 에러로 인해 연결이 데드락 상태로 변경되는 것을 방지하는 상태인데,
만약 Server에서 FIN을 전송하기 전에 보낸 데이터가 라우팅 지연 또는 패킷 유실로 FIN 패킷보다 늦게 도착할 수 있기 때문에 데이터 유실을 방지하기 위해 FIN 패킷을 수신하더라도 일정시간 동안 세션을 열어놓고 잉여 패킷을 기다리는 과정이다.
'Computer Science > Network' 카테고리의 다른 글
REST / REST API / RESTful (0) | 2023.04.23 |
---|---|
CORS (Cross-Origin Resource Sharing) (0) | 2023.04.23 |
DNS (Domain Name System) (0) | 2023.04.22 |
HTTP 상태 코드 (0) | 2023.03.30 |
URI & URL & URN (0) | 2023.03.29 |