들어가며
- 왜 흐름 제어와 혼잡 제어를 4계층에서 수행해야 하는가?
- 흐름 제어란 무언인가?
- 혼잡 제어란 무엇인가?
왜 흐름제어(flow control)와 혼잡제어(congestion control)이 필요할까?
- 송신 노드와 수신 노드의 용량 및 처리 속도는 정해져 있다.
- 각 노드의 한계가 있기 때문에 데이터가 너무 많이 전송될 경우 노드가 죽을 가능성이 존재한다.
- 현실에서 사용하는 네트워크는 비신뢰성을 가지고 있기 때문에.
- 순서가 바뀌거나 데이터를 잃어 버릴 수 있다.
- 네트워크에 데이터가 너무 많아 혼잡하거나 수신자가 과부화가 걸릴 수 있다.
흐름 제어 (Flow Control)
- 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
- 수신자에게 받는 rwnd(로 제어.흐름 제어가 필요한 이유
- 수신측의 데이터 처리 속도(or 용량)이 송신측보다 더 빠르면 아무 문제가 없다.
하지만 송신측의 데이터 처리 속도가 더 빠르다면, 수신측에서 데이터 손실이 발생할 수 있다.
-> 이를 방지하기 위해서 데이터 흐름을 제어해야 함.
흐름제어에서 속도를 제어하기 위한 두가지 방식
- Stop and wait
- 매번 전송한 패킷에 대해 확인 응답을 받아야지만 그 다음 패킷을 전송하는 방법
- 간단하고 확실한 방법이다.
- 하지만 앞서 보낸 데이터에 대한 응답이 도착했을 때만 보낼 수 있으므로 비효율적이여서 잘 사용하지 않는다.
- Sliding Window
- 수신 측에서 설정한 윈도우 크기만큼 송신측에서 데이터를 전송
- 윈도우 크기는 수신측의 여유공간을 바탕으로 동적으로 변경됨.Sliding Window
혼잡 제어 (Congestion Control)
- 송신측의 전송 속도와 네트워크의 처리속도의 차이를 해결하기 위한 기법
- 송신측에서 가지고 있는 cwnd로 제어혼잡 제어가 필요한 이유
- 현재 네트워크에 너무 많은 데이터가 보내지고 있는 상황에서 송신자가 데이터를 보내려고 하는 상황
-> 라우터가 너무 많은 데이터를 처리하지 못해 손실이 나며 느려짐
-> 네트워크 전체가 느려지게 됨.
- 이 그림에서 만약 빨간 선 쪽에서 데이터 손실이 일어나게 된다면 포함된 라우터들이 느려지면서 다른 모든 데이터 흐름이 같이 느려지게 된다.
혼잡 제어의 방식
- AIMD 기법
- Additive Increase Multplicative Decrease
- cwnd (congestion window)를 기준으로 해결
- 처음에 패킷을 1MSS(Maximum segment size, 전송할 수 있는 최대 세그먼트 크기)로 전송하다가, 패킷 전송에 실패하게 되면 네트워크가 혼잡하다고 판단하여 보내는 패킷의 양을 반으로 줄임
- Slow Start
- 패킷 전송을 1MSS씩 증가시키는것이 아니라 2의 지수승으로 늘린다.
- 만약 패킷이 손실될 경우 다시 window size를 1 MSS로 줄인다.
- 임계점 (ssthresh)
- 임의로 slow start를 여기까지 사용하겠다! 라는 의미
- 임계점은 패킷 손실이 날 경우 줄어들고, 그렇지 않을 경우 늘어난다. (동적이다)
- Fast Retransmit
- 손실 감지 알고리즘으로 ACK Duplicated나 Timeout이 발생하면 본인의 윈도우를 수정
- 패킷 손실이 발생하면 cwnd를 초기의 윈도우 크기로 재설정
- Fast Recovery
- 패킷 손실이 났을 때 3 duplicate ack과 time out으로 구분
- 중복 상태에서는 수신측으로 전달이 된다는 의미이므로 cwnd를 현재의 반으로 설정
- time out이 났을 때에는 네트워크가 혼잡하다고 생각하여 cwnd를 초기화
- TCP Tahoe
- Slow Start, AIMD, Fast Retransmit의 결합
- TCP Reno
- TCP Taeho에서 Fast Recovery 추가
기준 | Flow Control | Congestion Control |
목적 | 데이터 송수신 측 간의 효율적인 데이터 전송 관리 | 전체 네트워크 내에서 데이터 전송의 효율성 및 안정성 유지 |
사용 이유 | 수신자의 버퍼 오버플로 방지 | 네트워크 혼잡 방지 |
사용되는 메커니즘 | 수신 측의 버퍼 크기에 기반 (예: TCP의 rwnd ) |
네트워크의 혼잡 상태에 기반 (예: TCP의 cwnd ) |
조절 방식 | 수신 측에서 처리할 수 있는 데이터의 양을 조절 | 네트워크의 혼잡 상태에 따라 전송 데이터량 조절 |
주요 알고리즘/기술 | TCP의 Sliding Window, GBN | TCP의 Slow Start, Fast Recovery |
기타
- 만약 cwnd와 rwnd의 크기가 다르면 tcp는 무엇을 기준으로 보낼까?
-> 둘다 만족하기 위해서 둘중에 작은 것을 기준으로 삼아 통신을 한다. - mac에서 window size 확인하기
sudo tcpdump -i any -n #tcp 패킷을 캡쳐하는 명령
-> 여기서 나오는 win이 바로 window size (rwnd, cwnd 실시간으로 네트워크의 상황을 반영해 추론하므로 직접적으로는 표시되지 않는다.)
'CS' 카테고리의 다른 글
HTTPS와 SSL Handshake (0) | 2024.01.13 |
---|---|
SSL/TLS란? (1) | 2024.01.05 |