인터넷 내에서 데이터를 보내기 위한 경로 배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각으로 나누어 전송을 하는데, 이때 조각을 패킷이라고 한다.
송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
Flow Control은 receiver가 packet을 지나치게 많이 받지 않도록 조절하는 것
기본 개념은 receiver가 sender에게 현재 자신의 상태를 feedback 한다는 점
[전송의 전체 과정]
1. ApplicationLayer : 송신측 Application Layer 가 소켓에 데이터를 입력
2. TransportLayer : 데이터를 세그먼트로 감싸고 Network Layer 에 전달
3. 수신측 노드로 세그먼트가전송됨. 동시에송신측의 Send Buffer 와 수신측의 Receive Buffer 각각에 데이터가 저장됨.
4. 수신측 Application Layer에서 준비가 되면, Receive Buffer 에 있는 데이터를 읽기시작함
5. 따라서, Receive Buffer 가 넘쳐나지 않도록 하는 것이 흐름 제어의 핵심!
→ 이를 위해 RWND(Receive Window, Receive Buffer 의 남은 공간) 을 송신측에 계속하여 피드백함
✅ 흐름제어 방식
Stop and Wait(정지 대기): 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법
단점: 패킷을 하나씩 보내기 때문에 비효율적
Sliding Window(Go Back N ARQ)
수신측에서 설정한 윈도우 크기만큼 송신측에서 확인응답없이 세그먼트를 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어기법
수신 측에서 설정한 윈도우 크기만큼은 송신 측에서 확인 응답ACK를 받기 전에 전송 가능.
송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜.
동작방식: 먼저 윈도우에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인(ACK)되는대로 이 윈도우를 옆으로 옮김으로써 그 다음 패킷들을 전송
Window: TCP/IP를 사용하는 모든 호스트들은 송신하기 위한 것과 수신하기 위한 2개의 Window를 가지고 있다. 호스트들은 실제 데이터를 보내기 전에 '3 way handshaking'을 통해 수신 호스트의 receive window size에 자신의 send window size를 맞추게 된다.
🔍세부구조
송신 버퍼200 이전의 바이트는 이미 전송되었고, 확인응답을 받은 상태 - 200 ~ 202 바이트는 전송되었으나 확인응답을 받지 못한 상태, 203 ~ 211 바이트는 아직 전송이 되지 않은 상태
수신 윈도우
송신 윈도우- 수신 윈도우보다 작거나 같은 크기로 송신 윈도우를 지정하게되면 흐름제어가 가능하다.
저 그림에서 수신 윈도우 크기: 7
송신 윈도우 이동- Before : 203 ~ 204를 전송하면 수신측에서는 확인 응답 203을 보내고, 송신측은 이를 받아 after 상태와 같이 수신 윈도우를 203 ~ 209 범위로 이동 - after : 205 ~ 209가 전송 가능한 상태
Selected Repeat
✅ 혼잡제어(Congestion Control):
송신측의 데이터 전달과 네트워크 상의데이터 처리 속도 차이를 해결하기 위한 기법 : 송신측에서 보내는 데이터의 전송 속도를 제어
송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다. 만약 한 라우터에 데이터가 몰릴 경우, 자신에게 온 데이터를 모두 처리할 수 없게 된다. 이런 경우 호스트들은 또 다시 재전송을 하게되고 결국 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시키게 된다. 따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라고 한다.
또한 네트워크 내에 패킷의 수가 과도하게 증가하는 현상을 혼잡이라 하며, 혼잡 현상을 방지하거나 제거하는 기능을혼잡제어라고 한다.
흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다루게 된다.