시스템구조

전송 층_TCP_혼잡제어(Congestion Control), TCP 타이머, 네이글 알고리즘

스윙스윙 2021. 9. 28. 11:29

▣ 전송 층_TCP_혼잡제어(Congestion Control)

흐름 제어가 송·수신 측 사이의 패킷 수를 제어(전송속도 차이제어)하는 기능이라면, 

혼잡 제어는 네트워크 내의 패킷 수를 조절하여 네트워크의 오버플로(overflow)를 방지하는 기능임

 

데이터의 양이 라우터가 처리할 수 있는 양을 초과하면 초과된 데이터는 라우터가 처리하지 못한다.

송신 측에서는 라우터가 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크는 더욱 더 혼잡하게 된다.

이런 상황은 송신 측의 전송 속도를 적절히 조절하여 예방할 수 있는데 이것을 혼잡 제어라고 한다.

*윈도우라는 것은 일종의 버퍼

 

AIMD (Additive Increse/Multicative Decrease)

  • 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송한다.
  • 만약 전송에 실패하면 윈도우 크기를 반으로 줄인다.
  • 윈도우 크기를 너무 조금씩 늘리기 때문에 네트워크의 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.

Slow Start (느린 시작)

  • 윈도우의 크기를 1, 2, 4, 8... 과 같이 2배씩 증가시킨다.(2의 지수 함수로 증가함)
  • 혼잡이 감지되면 윈도우 크기를 1로 줄여버린다.
  • 시간이 지날수록 AIMD 보다 빠르게 윈도우 크기를 증가시킨다.

Multiplicative Decrease

  • TCP의 재전송 타이머가 만료되면, 혼잡 발생으로 확신, 윈도우 사이즈를 ½로 줄임

빠른회복(Fast Recovery)

  • 혼잡한 상태가 되면 윈도우 크기를 1로 줄이지 않고 반으로 줄이고 선형증가시킴
  • 혼잡상황을 한번 겪고 나서부터는 AIMD방식으로 동작함

 

■ TCP 혼잡 제어 정책

임계점(Threshold)

  • 임계점은 여기까지만 Slow Start를 사용하겠다 라는 의미를 가진다.
    slow start threshold (ssthresh) 라고도 한다.
  • 이 값을 사용하는 이유는 윈도우 크기를 지수적으로 증가시키다보면 크기가 기하급수적으로 늘어나 제어가 힘들어지기 때문이다.
  • 따라서 전송 데이터의 크기가 임계점 (Threshold)에 도달하면 선형적으로 1씩 윈도우를 증가시킨다.
  • 혼잡 감지시 ssthresh는 Window size의 절반으로 조정

1. TCP Tahoe

처음에는 Slow Start를 사용하다가 임계점에 도달하면 AIMD 방식을 사용함

3 ACK Duplicated 또는 타임아웃이 발생하면 혼잡이라고 판단하여 임계점은 혼잡이 발생한 윈도우 크기의 절반으로, 윈도우 크기는 1로 줄임

청록색 선은 송신 측의 혼잡 윈도우 크기를, 굷은 검정선은 ssthresh값을 보여줌

이 방식은 혼잡 이후 Slow Start 구간에서 윈도우 크기를 키울 때 너무 오래 걸린다는 단점이 있음

 

2. TCP Reno

TCP Tahoe와 마찬가지로 Slow Start로 시작하여 임계점을 넘어가면 AIMD 방식으로 변경함

TCP Tahoe와의 차이점은 바로 3 ACK Duplicated와 타이아웃을 구분한다는 점임

TCP Reno는 3 ACK Duplicated가 발생하면 빠른 회복 방식을 사용함

 

즉, 윈도우 크기를 1로 줄이는 것이 아니라 반으로 줄이고 윈도우 크기를 선형적으로 증가시킴. 그리고 임계점을 줄어든 윈도우 값으로 설정함

만약, 타임아웃이 발생하면 TCP Tahoe와 마찬가지로 윈도우 크기를 1로 줄이고 Slow Start를 진행함. 이때는 임계점을 변경하지 않음

 

 

 

TCP 타이머

1) 재전송(Retransmission) 타이머  

정해진 시간내에 세그먼트의 확인응답이 없는 경우의 재전송을 위해 사용함
송신측은 매 세그먼트를 전송할 때 마다 재전송 타이머 가동
정해진 시간(RTO, Retransmission Timeout) 내 수신 확인응답(ACK)이 안되면 재전송
여기서, RTO 값은 고정된 것이 아니라 조정 가능함

* 재전송 타임아웃(RTO)은, 고정된 시간 값을 갖지 않음
즉, 동적(dynamic) 또는 적응적(adaptive)으로 조정되는 재전송 타이머를 사용함 

2) 영속(Persistence) 타이머
윈도우 크기 결정을 위한 타이머
주기적으로 송신하는 Window Probe 패킷의 송신 주기를 처리하는 타이머
만일 윈도우 크기가 0 으로 도착되고도 일정시간 이후에 아무런 ACK가 없으면, 즉, 수신측에서 송신측에 더이상 데이터 보내지 말라는 뜻이므로, 수신측 상황을 알아보기 위해 1 바이트 길이의 데이터를 전송하여 보고, 이에 대한 ACK를 기다리게 되는데, 이때 알아보는 패킷을 `Window Probe 패킷`이라고 함  

 

3) 시간 대기(Time-waited) 타이머, 2 maximum segment lifetime timer

연결이 종료되는 동안 이미 전송된 패킷이 폐기되는 것을 방지하기 위하여 사용함
TCP 연결 종료 후에 이 기간 동안 만 연결을 유지
이전 연결 종료 전의 어떤 패킷이 늦게, 중복지연 도착하게되는 것을 방지

4) Keepalive 타이머 (연결 유지 타이머)

동작 상태와 상관없이 유지하는 것이 아니라 상대 노드에게 probe를 보낸 후 응답을 받지 못하면 connection을 종료함
이미 설정된 연결이 오랫동안 휴지 상태에 있지 않도록 하기 위함
통상. 2시간 동안 아무런 패킷도 오지 않으면,  프로브(Probe) 패킷을 75초 간격으로 10번 송신하고도 응답이 없으면 연결을 끓음

 

■ 네이글 알고리즘(Nagle Algorithm)

네이글 알고리즘은 ‘가능하면 조금씩 여러 번 보내지 말고, 한 번에 많이 보내라’는 원칙을 기반으로 만들어진 알고리즘

 

  • 장점 : 같은 양의 데이터더라도 한 번에 많이 보내기 때문에 데이터 전송 횟수가 줄어들기 때문에 네트워크의 효율성이 높아짐
  • 단점 : ACK를 받을 때까지 패킷을 모으고 있기 때문에 반응 속도가 느려짐

 


2018년 84번

정답 : 2번

혼잡을 감지한 경우 혼잡 윈도우의 크기를 절반으로 감소 시킨다

 


2018년 100번

정답 : 3번

연결유지 타이머(keepalive timer)

동작 상태와 상관없이 유지하는 것이 아니라 상대 노드에게 probe를 보낸 후 응답을 받지 못하면 connection을 종료함

 


2020년 96번

정답 : 1번

네이글 알고리즘은 ‘가능하면 조금씩 여러 번 보내지 말고, 한 번에 많이 보내라’는 원칙을 기반으로 만들어진 알고리즘

장점 : 같은 양의 데이터더라도 한 번에 많이 보내기 때문에 데이터 전송 횟수가 줄어들기 때문에 네트워크의 효율성이 높아짐

단점 : ACK를 받을 때까지 패킷을 모으고 있기 때문에 반응 속도가 느려짐

 

* 데이크스트라 알고리즘(Dijkstra algorithm) 또는 다익스트라 알고리즘은 도로 교통망 같은 곳에서 나타날 수 있는 그래프에서 꼭짓점 간의 최단 경로를 찾는 알고리즘

 

* 슬라이딩 윈도우(Sliding Window) 알고리즘은 배열이나 리스트의 요소의 일정 범위의 값을 비교할때 사용하면 유용한 알고리즘

  • window_start: 슬라이딩 윈도우 시작 인덱스
  • window_end: 슬라이딩 윈도우 끝 인덱스
  • widdow_sum: 슬라이딩 윈도우 합계

슬라이딩 윈도우는 하위 윈도우의 범위 k 와 동일하게 유지하며 범위내의 요소는 모두 합산하고 범위 밖으로 벗어난 요소들은 빼준다.

다만 슬라이딩 윈도우의 범위가 k 보다 커질때까지 ( window_end >= k - 1 ) 는 요소들을 합산하기만 하고 이후부터 범위밖의 요소들을 차감