1. 흐름 제어 (Flow Control)
흐름 제어는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자가 처리할 수 있는 속도로 데이터를 보내는 기법
해결 방법
1) Stop and Wait
- 매번 전송한 패킷에 대해 확인 응답(ACK)을 받아야만 그 다음 패킷을 전송하는 방법
- 장점 - 각 데이터 프레임에 대한 확인 응답을 받기 때문에, 데이터 손실이나 오류를 발견하고 재전송이 가능
- 단점 - 패킷을 하나씩 보내기 때문에 비효율적
동작 방식
1. 송신자(sender)는 첫 번째 데이터 프레임을 수신자(receiver)에게 전송
2. 송신자는 해당 데이터 프레임에 대한 확인 응답(ACK)을 받을 때까지 대기
3. 수신자는 데이터 프레임을 받고, 확인 후 확인 응답(ACK)을 송신자에게 전송
4. 송신자가 확인 응답(ACK)을 받으면, 다음 데이터 프레임을 전송
2) 슬라이딩 윈도우(Sliding Window)
- 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 데이터를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
- 윈도우 크기(Window Size)
- 송신자가 한 번에 전송할 수 있는 데이터의 최대의 양
- 수신자의 버퍼 공간에 따라 동적으로 조정 가능
동작 방식
1. 처음에 수신자는 윈도우 사이즈를 7로 설정한다.
2. 송신자는 수신자의 확인 응답(ACK)를 받기 전까지 데이터를 보낸다.
3. 수신자는 확인 응답(ACK)을 송신자에게 보내면, 슬라이딩 윈도우 사이즈를 충족할 수 있게 윈도우를 옆으로 옮긴다.
4. 이후 데이터를 다 받을 때까지 반복한다.
재전송
송신 측은 일정 시간 동안 수신 측으로부터 확인 응답(ACK)을 받지 못화면, 패킷을 재전송한다.
만약, 송신 측에서 재전송을 했는데 패킷이 소실된 경우가 아니라 수신 측의 버퍼에 남는 공간이 없는 경우는 문제가 발생한다. 이때, 송신 측은 해결 응답(ACK)을 보내면서 남은 버퍼의 크기(윈도우 크기)도 함께 보내 준다.
그리고 버퍼가 비워질 때까지 대기한다.
질문과 답변
1. TCP/IP에서 흐름 제어 기법은 어떤건가요?
흐름 제어는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자가 송신자가 보내는 데이터를 처리할 수 있도록 보장하는 매커니즘입니다. 데이터 전송 중 데이터 손실을 방지하고 수신자의 버퍼 오버플로우를 방지하기 위해 사용됩니다.
2. 흐름 제어를 구현하는 주요 방법과 간단하게 설명해주세요.
흐름 제어를 구현하는 주요 방법에는 Stop and Wait 와 Sliding Window가 있습니다.
Stop and Wait는 하나의 데이터 프레임을 보내고 응답받고를 반복하며 데이터를 보냅니다. 구현이 간단하지만 매번 응답을 받아야해서 비효율 적입니다.
Sliding Window는 송신자가 수신자의 윈도우 크기에 맞춰 데이터를 전송합니다. 수신자는 자신의 버퍼 상태를 송신자에게 알려주고 이를 바탕으로 송신자의 응답이 오기 전까지 데이터를 보냅니다.
TCP의 흐름제어는 Sliding Window 기법을 사용하여 구현됩니다.
3. 흐름 제어와 혼잡 제어의 차이점을 알려주세요.
흐름 제어는 송신자와 수신자 간의 데이터 전송 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는데 초점을 맞춥니다. 주로 송신자와 수신자 간의 데이터 전송을 관리합니다.
혼잡제어는 네트워크 전체의 혼잡 상태를 관리하여 데이터 전송의 효율성을 유지하는 데 초점을 맞춥니다. 네트워크의 혼잡 상태를 감지하고 조절하여 전체 네트워크 성능을 최적화합니다.
[참고]