TCP 흐름 제어
TCP 흐름 제어는 송신자가 수신자의 버퍼 크기를 초과하지 않도록 전송 속도를 조절하는 과정입니다. 이는 Receive Window(rwnd) 값을 통해 이루어집니다. 이 과정에서 송신자는 수신자가 수신할 수 있는 데이터 크기보다 많은 데이터를 전송하지 않도록 보장합니다.
TCP 흐름 제어의 과정
- 수신자는 자신이 처리할 수 있는 여유 공간을 나타내는 rwnd 값을 송신자에게 전달합니다. 이 값은 TCP 헤더의 Receive Window 필드에 담겨 전송됩니다.
- 송신자는 rwnd 값보다 적은 데이터 양을 전송하며, 수신자의 버퍼가 가득 차지 않도록 데이터 흐름을 제어합니다.
- 수신자가 버퍼에서 데이터를 처리할 때마다 rwnd 값이 갱신되어 송신자에게 다시 전달됩니다.
TCP 연결 관리
TCP는 송신자와 수신자 간에 연결을 설정하기 위해 핸드쉐이킹을 사용합니다. 이를 통해 양측이 데이터를 주고받기 전에 준비가 되었는지 확인하고, 연결을 안전하게 설정합니다.
✅핸드쉐이킹이란?
TCP 핸드쉐이킹은 송신자와 수신자가 통신을 시작하기 전에 서로 준비 상태를 확인하는 과정입니다. 특히 3-Way 핸드쉐이킹이 널리 사용되며, 세 번의 메시지 교환을 통해 연결이 설정됩니다
TCP의 3-Way 핸드쉐이킹
3-Way 핸드쉐이킹은 연결을 설정하는 데 사용되는 절차입니다.
- SYN 요청: 송신자는 연결을 요청하는 SYN 플래그가 설정된 세그먼트를 수신자에게 보냅니다.
- SYN-ACK 응답: 수신자는 송신자의 요청을 받고, 자신의 SYN 플래그와 ACK 플래그가 설정된 세그먼트를 응답합니다.
- ACK 응답: 송신자는 수신자로부터 SYN-ACK 응답을 받은 후, ACK 플래그가 설정된 세그먼트를 보내 연결이 완전히 설정됩니다.
✅핸드쉐이킹과의 차이점
2-Way 핸드쉐이킹은 메시지 손실, 지연 등의 문제로 인해 상대방 상태를 정확히 파악하지 못할 수 있습니다. 반면 3-Way 핸드쉐이킹은 이러한 문제를 해결해 더 신뢰성 있는 연결을 제공합니다
TCP 연결 종료
TCP는 FIN 플래그를 사용해 연결을 종료합니다. 연결을 종료하는 단계는 다음과 같습니다.
FIN 플래그는 TCP 연결을 종료하기 위해 사용하는 신호입니다. 이 플래그가 설정된 세그먼트가 송신되면, 수신자는 연결 종료에 동의해야 합니다.
- FIN 요청: 클라이언트 또는 서버는 FIN 플래그가 설정된 세그먼트를 상대방에게 보내 연결 종료를 요청합니다.
- ACK 응답: 상대방은 FIN 세그먼트를 받으면 ACK 응답을 보내고, 그 후 스스로 FIN을 전송하여 종료 절차를 시작합니다.
- 양측 FIN 완료: 두 측 모두 FIN 플래그를 주고받으면 연결이 완전히 종료됩니다.
FIN과 ACK 동시 교환
TCP는 양측이 동시에 FIN을 주고받을 경우에도 연결을 안정적으로 종료할 수 있습니다. FIN을 수신한 상대방은 ACK로 응답하며, 그 후 연결이 종료됩니다.
동시에 양측이 연결을 종료하려 할 때, 각 측이 서로 FIN을 전송할 수 있습니다. 이 경우 TCP는 양측이 서로의 FIN 요청을 ACK 응답으로 처리해 연결을 안전하게 종료할 수 있습니다.
Timed Wait 상태
TCP 연결 종료 후, 양측은 Timed Wait 상태로 진입합니다. 이는 일정 시간 동안 남아 있는 패킷을 처리할 수 있도록 두어, 안전하게 연결을 완전히 종료하는 데 사용됩니다.
✅Timed Wait 상태란?
TCP에서 Timed Wait는 연결 종료 후 발생할 수 있는 잔여 패킷들을 처리할 시간을 확보하기 위한 상태입니다. 일반적으로 2배의 최대 세그먼트 생존 시간(MSL)을 대기하며 패킷을 처리합니다.
TCP는 안정적인 데이터 전송과 연결 관리를 위해 흐름 제어와 핸드쉐이킹을 사용하며, 이를 통해 송신자와 수신자 간의 안전한 통신이 가능해집니다. 특히 3-Way 핸드쉐이킹과 흐름 제어 메커니즘을 통해 데이터를 안정적으로 주고받으며, 연결 종료 시에도 Timed Wait 상태를 통해 패킷 손실을 방지할 수 있습니다.
'전공 공부 > 컴퓨터네트워크' 카테고리의 다른 글
TCP 혼잡 제어 (1) | 2024.10.03 |
---|---|
혼잡 제어의 원리 (1) | 2024.10.03 |
연결지향형 트랜스포트 : TCP (2) | 2024.10.03 |
신뢰기반 데이터 전송의 원리 (1) | 2024.10.03 |
비연결형 트랜스포트 : UDP (1) | 2024.10.03 |