0. 개요
- 용어 정리
- 통신 communication: 데이터를 주고 받는 행위
- 애플리케이션 application: 통신에 사용하는 프로그램
- 송신자 sender: 통신에서 데이터를 전송하는 사람
- 수신자 receiver: 통신에서 데이터를 받는 사람
- 흐름제어와 혼잡제어가 필요한 이유
송신자가 수신자에게 데이터를 전송하고 수신자는 송신자가 보낸 데이터를 빠짐없이 순서에 맞게 받을 수 있으면 좋겠지만, 현실의 네트워크는 그렇지 않다.
현실의 네트워크는 송신자가 보낸 데이터를 잃어버리기도 하고, 데이터의 순서가 바뀌기도 한다.
이러한 네트워크를 비신뢰적 네트워크라고 부른다.
비신뢰적 네트워크에서 발생하는 문제
- 손실 lost: 패킷이 손실될 수 있음
- 순서 바뀜: 패킷의 순서가 바뀔 수 있음
- 혼잡 Congestion: 네트워크가 혼잡한 문제
- 과부하 Overload: 수신자가 과부하 되는 문제
이러한 비신뢰적 네트워크에서 송신자가 수신자에게 데이터를 안정적으로 보낼 수 있게 해주는 것이 바로 TCP이다.
TCP는 다양한 흐름제어, 혼잡제어를 통해 데이터를 신뢰성 있게(빠짐 없이 순서에 맞게) 보낼 수 있게 해준다.
통신 시 발생할 수
있는 문제점
- 송신자가 엄청나게 빠른 속도로 데이터를 전송
- 👉 수신자의 버퍼에 데이터가 가득 차게 되고, 버퍼가 가득 차 있는 동안에 데이터를 잃어버림
- 사용하는 네트워크에 과다한 인원이 데이터를 전송
- 👉 정체 현상이 발생해 데이터가 잘 전송되지 않을 것임
흐름 제어와 혼잡 제어는 이러한 상황을 해결하기 위한 기능이다.
1. 흐름 제어
- 정의
송신자의 전송 속도와 수신자의 처리 속도 차이에서 생기는 문제를 해결하기 위한 기능
- 흐름 제어가 필요한 상황
위에서 말했던 통신 시 발생할 수 있는 문제점 중 첫 번째에 해당한다.
바로, 송신자가 데이터를 전송하는 속도가 수신자가 데이터를 처리하는 속도보다 빠른 상황이다.
이 경우에는 수신자의 버퍼에는 미처 처리하지 못한 데이터가 쌓이게 된다.
이렇게 수신자의 버퍼는 가득 차게 되고, 버퍼가 가득 차 있는 동안 전달된 데이터는 손실된다.
- 흐름 제어의 해결 방식
흐름 제어는 송신자의 데이터 전송 속도를 조절한다.
수신자가 데이터를 처리하는 속도만틈 송신자가 데이터를 천천히 보내게 하여 문제를 해결한다.
흐름 제어의 기본 과정
1) 송신자가 수신자에게 데이터를 보낸다.
2) 수신자는 송신자에게 데이터를 받을 때마다 자신의 남은 버퍼 공간을 알려준다.
3) 송신자는 수신자가 보낸 정보를 보고 자신의 데이터 전송 속도를 조절한다.
[Stop and Wait 방식]
데이터를 보낼 때마다 매번 위 과정을 반복하는 방식이다.
- 송신자가 데이터를 하나 보낼 때마다 수신자의 응답을 기다림
- 장점: 구현이 간단함
- 단점: 매우 비효율적임
[Sliding Window 방식]
- 비효율적인 Stop and wait 방식을 개선한 것
- 데이터를 하나만 보내고 기다리지 X
- 한 번에 여러 개의 데이터를 보내고 수신자의 응답을 기다림
2. 혼잡 제어
- 정의
송신자의 전송 속도와 네트워크 처리 속도로 인한 문제를 해결하기 위한 기능
- 혼잡 제어가 필요한 상황
위에서 말했던 통신 시 발생할 수 있는 문제점 중 두 번째에 해당한다.
즉, 송신자가 사용하는 네트워크에 엄청나게 많은 인원이 데이터를 전송하는 상황이다.
라우터는 네트워크에서 송신자가 보낸 데이터를 알맞은 수신자에게 보내주는 장치이다.
라우터 또한 데이터를 처리하는 속도와 처리할 데이터를 보관해두는 버퍼가 있다.
라우터가 데이터를 처리하는 속도보다 많은 양의 데이터가 들어오는 경우 문제가 발생한다.
송신자는 라우터가 처리하지 못한 데이터를 잃어버린 것으로 간주하고 다시 데이터를 보낸다.
이 과정이 반복되며 네트워크는 점점 혼잡해진다.
- 혼잡 제어의 해결 방식
혼잡 제어 또는 송신자의 데이터의 전송 속도를 조절한다.
👉 네트워크에 전송되는 데이터가 과도하게 증가하는 현상을 방지한다.
혼잡 제어를 위해 AIMD(Additive Increase / Mutliplicative Decrease)라는 기술을 사용한다.
AIMD는 처음에 조금씩 패킷을 보내다가, 패킷이 문제 없이 도착하면 전송량을 조금씩 늘려간다.
만약 패킷 전송에 실패하게 되면 네트워크가 혼잡하다고 판단하고 패킷 전송 속도를 절반으로 줄인다.
정리
흐름 제어 | 혼잡 제어 | |
공통점 | TCP의 신뢰성 있는 데이터 전송을 위한 기능 송신자의 전송 속도를 제어함으로써 데이터 전송 시 오류를 줄임 |
|
차이점 | 송수신 사이의 패킷 수를 제어 | 네트워크 내의 패킷 수를 조절 |
참고
https://80000coding.oopy.io/f5fe190f-bbad-4956-8789-36546f42be83
'Computer Science > Network' 카테고리의 다른 글
[Network] 대칭키, 비대칭키 (1) | 2024.06.05 |
---|---|
[Network] 유니캐스트/브로드캐스트/멀티캐스트/애니캐스트 (0) | 2024.06.03 |
[Network] TCP 3way handshake & 4way handshake (0) | 2024.06.03 |
[Network] TCP와 UDP (0) | 2024.05.30 |
[Network] OSI 7계층과 TCP/IP 4계층 (0) | 2024.05.29 |