-
[Network] TCP/IP 흐름제어 & 혼잡제어CS 2021. 7. 26. 06:29
☑️ 흐름 제어? 혼잡 제어?
: 혼잡 상황이 발생하면 네트워크 자원이 낭비되므로 혼잡 상황을 최소화 하기 위한 기법
- 흐름 제어: 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법.
송신측의 데이터 전송량 제어 - 혼잡 제어: 송신측의 데이터 전달과 네트워크 상의 데이터 처리 속도 차이를 해결하기 위한 기법.
송신측의 데이터 전송 속도 제어
✅ 흐름 제어 Flow control
1. Stop and wait 방식
- 매번 전송한 패킷에 대해 확인 응답을 받아야만 그 다음 패킷을 전송하는 방법 (비효율적)
2. Sliding window 슬라이딩 윈도우 기법
- 수신 측에서 설정한 윈도우 크기만큼은 송신 측에서 확인 응답ACK를 받기 전에 전송 가능.
- 송신 버퍼의 범위는 수신 측의 여유 버퍼 공간을 반영하여 동적으로 바뀜.
- 윈도우에 포함되는 모든 패킷을 확인 응답 없이 전송하고, 그 패킷들의 전달이 확인되는 대로 윈도우를 옆으로 옮기며 그 다음 패킷들을 전송
- TCP/IP를 사용하는 호스트들은 보내는 용과 받는 용의 2개의 윈도우를 가지고 있다. 실제 데이터를 보내기 전에 TCP-3way-handshaking을 통해 수신 컴퓨터의 receive window size에 자신의 윈도우 크기를 맞추게 된다.
* 호스트: 응용 프로그램을 사용하는 주체.
✅ 혼잡 제어 Congestion control
:데이터 전달과 네트워크의 데이터 처리 속도를 해결하기 위한 기법
: 송신측에서 보내는 데이터의전송 속도를 제어
1. AIMD (Additive Increase Multicative Decrease)
- 합 증가/ 곱 감소 알고리즘
- 처음에 패킷 하나를 보내는 것으로 시작, 전송한 패킷이 문제 없이 도착하면 윈도우 크기를 1씩 증가시키며 전송
- 패킷 전송을 실패하거나 타임아웃이 발생하면 윈도우 크기를 절반으로 감소시킴
- 여러 호스트가 한 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 처음에는 불리하지만, 시간이 흐르면 평형 상태로 수렴
- 문제점
- 초기 네트워크의 높은 대역폭을 사용하지 못함
- 처음에 전송 속도를 올리는 데 시간이 너무 오래 걸림
- 네트워크가 혼잡해지는 상황을 미리 감지하지 못하여 혼잡해지고 나서야 대역폭을 줄임
2. Slow start
- AIMD와 같이 패킷을 하나씩 보냄
- 하나의 패킷이 문제없이 도착하여 ACK를 보낼 때마다 윈도우 크기를 1씩 늘림
- 한 주기가 지나면 윈도우 크기는 2배 -> 그래프의 모양이 지수함수 꼴
- 혼잡 현상이 발생하면 윈도우 크기를 1로 떨어트림
- 한 번 혼잡 현상이 발생하고 나면 이전에 혼잡 현상이 발생했던 윈도우 크기의 절반까지는 이전처럼 지수함수 꼴로 윈도우 크기를 증가시키고 그 이후부터는 완만하게 1씩 증가시킴
3. Fast Recovery
- 혼잡 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄인 후 선형증가.
- 혼잡 상태를 한 번 겪고 나서부터는 AIMD 방식으로 동작
4. Fast Retransmit
- 먼저 도착해야 할 패킷이 도착하지 않고 다음 패킷이 도착한 경우에도 ACK패킷을 보냄
- 순서대로 잘 도착한 마지막 패킷의 다음 패킷 순번을 ACK패킷에 실어보내게 되므로 송신측에서는 순번이 중복된 것을 알게됨
- 이것을 감지하여 중복된 순번의 패킷을 3개 받으면 타임아웃 전에 문제가 되는 순번의 패킷을 즉시 재전송해줌
- 이런 현상이 일어나면 혼잡 현상이 발생한 것이므로 윈도우 크기를 줄임
✅ 혼잡 제어 정책
1. TCP Tahoe
- 처음에는 Slow Start 방식을 사용하다가 임계점에 도달하면 AIMD 방식 사용
- 그러다 3 ACK 순번 중복(중간패킷유실)이나 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡이 발생한 윈도우 크기의 절반으로, 윈도우 크기는 1로 줄임
- 단점: 혼잡 이후 Slow start 구간에서 윈도우 크기를 키울때 너무 오래걸림. -> TCP Reno
2. TCP Reno
- Tahoe와 마찬가지로 slow start로 시작하여 임계점 이후에는AIMD방식으로 변경.
- 단, 3 ACK 중복과 타임아웃을 구분함
- 3 ACK 중복이 발생하면 Fast Recovery 방식을 사용
- 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄인 후 윈도우 크기를 선형적으로 증가시킴.
- 임계점은 줄어든 윈도우 값으로 설정
- 타임아웃이 발생하면 Tahoe와 마찬가지로 윈도우 1로 줄이고 Slow start 진행.(임계점 변경하지 x)
참고
TCP/IP 흐름제어, 혼잡제어
TCP/IP (흐름제어/혼잡제어)https://evan-moon.github.io/2019/11/26/tcp-congestion-control/
https://velog.io/@mu1616/TCPIP-%ED%98%BC%EC%9E%A1-%EC%A0%9C%EC%96%B4
'CS' 카테고리의 다른 글
[OS] Interrupt 인터럽트란? (1) 2021.08.15 [DB] SQL - JOIN문, JOIN 종류 (Inner Join,Natural Join,Outer Join,Cross Join) (4) 2021.08.09 [OS] 페이지 교체 알고리즘 - FIFO/LRU/LFU/MFU/NUR (3) 2021.07.18 [DB] SQL 인젝션 (SQL Injection ) (1) 2021.07.10 [NETWORK] TCP와 UDP (1) 2021.07.02 - 흐름 제어: 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법.