Principles of congestion control
- 네트워크상에 패킷이 많아져서 발생하는 congestion을 최대한 줄이기 위해 여러 경로로 패킷을 보내주는 알고리즘이 필요
- flow control과 다름
- 패킷 손실이나 긴 지연 발생
혼잡제어의 3가지 시나리오
- 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터
- 2개의 호스트가 각자의 목적지 사이에 단일 홉을 공유하는 연결을 가진다고 가정
- 두 호스트는 같은 byte/sec의 평균 전송률로 연결에 데이터를 보내고 있음
- 라우터는 무제한의 버퍼 공간을 가진다고 가정
- 두 호스트가 매우 많은 데이터를 동시에 목적지로 전송한다면?
- 링크의 최대 전송 용량이 R이라면 각자의 서버가 R/2씩 사용하면 유한한 지연으로 수신자에게 수신
- 그러나 R/2를 넘어가면 데이터 처리량은 R/2로 그대로이고 한 라우터에 공유된 버퍼에 쌓이는 패킷들이 많아질 것이며 딜레이 또한 무한하게 증가
- 이렇게 되면 타임아웃으로 불필요한 재전송 또한 많아지고 함께 전송되는 새로운 패킷들과 합쳐져 보내는 양도 많아짐 -> 결국 네트워크가 느려짐
- 2개의 송신자, 유한 버퍼를 가진 하나의 라우터
- 무한하지 않은 유한한 라우터의 버퍼라고 가정 -> 버퍼가 가득 찼을 때는 버려짐
- 람다는 원래 데이터, 람다 프라임은 원래 데이터 + 재전송되는 데이터
- sender가 버퍼의 빈 공간을 인식하고 꽉 차있지 않을 경우에만 보낸다면? - λ와 λ'값이 같으므로 어떠한 손실도 발생하지 않고, 연결의 처리량은 λin이 됨, 이 경우 아래와 같은 그래프로 표현됨
- 패킷이 확실히 손상된 것을 알았을 때만 송신자가 재전송하는 좀 더 현실적인 경우 -> 손상됐다고 판단된 것만 재전송 수행
- 송신자에게서 너무 일찍 타임아웃되는 바람에 패킷이 손실되지 않았지만 큐에서 지연되고 있는 패킷을 재전송하는 경우 -> 라우터가 패킷을 불필요한 복사본들을 전송하는데 링크 대역폭을 사용하는 원인
- 4개의 송신자와 유한 버퍼를 가지는 라우터, 그리고 멀티홉 경로
- 그림과 같이 겹쳐지는 2홉 경로를 통해 패킷을 전송
- 모든 호스트는 동일한 값을 가지고, 모든 라우터 링크는 R byte/sec 용량을 가진다고 가정
- λin값이 매우 커지는 경우 모든 라우터의 버퍼는 각 연결된 호스트가 보내는 패킷으로 채워지며 계속 쌓인다면 각 라우터의 처리량은 0이 되어 제공된 부하와 처리량 간의 트레이드오프가 발생
TCP congestion control
- additive increase : 손실이 감지될 때 까지 매 RTT마다 1 MSS씩 증가
- multiplicative decrease : 손실 후 1/2로 줄임
- 삼각파형이 생성됨
- 발신자 제한 : 마지막보낸 바이트 - 마지막 ACK받은 바이트 ≤ cwnd
- 결론적으로 cwnd의 값을 조절하여, 송신자는 링크에 데이터를 전송하는 비율을 조절
TCP Slow Start
- 처음 시작은 cwnd = 1 MSS로 시작
- 이상이 없다면 2 MSS -> 4 -> 8 -> 16.... 증가시킴
- 타임아웃에 의한 손실 이벤트가 발생한다면 TCP 송신자는 cwnd를 1MSS로 한 후 새로운 슬로 스타트를 실행
- 그리고 임계치를 ssthresh = cwnd/2로 지정
- ssthresh의 값에 도달하게 되면 슬로 스타트는 종료되고 혼잡 회피 모드에 들어감
- TCP Tahoe : Timeout이 발생한 경우, ssthresh에 도달한 후 1 MSS씩 증가하다가 혼잡 발생시 1로 내려간 후 다시 슬로우 스타트 실행
- TCP Reno : ACK의 3중복으로 손실이 발생했다고 판단하는 경우 -> ssthresh를 손실이 발생한 순간의 반으로 설정 후 거기서부터 다시 1 MSS씩 증가시킴
TCP throughput
- 초기 슬로 스타트 기간을 무시하고 손실이 타임아웃이 아니라 중복 ACK로 표시된다고 가정
- TCP의 혼잡제어는 매 RTT마다 1 MSS씩 cwnd의 선형 증가와 3개의 중복 ACK 이벤트에서 cwnd의 절반화로 구성
- 이런 경우 위의 단락에서 제시된 그림처럼 톱니모양의 Reno알고리즘으로 나타남
- 톱니모양의 TCP 동작이 주어지면 장시간 연결된 TCP 연결의 평균 처리율은? - 타임아웃 후 슬로스타트의 재시작 부분은 무시할 정도로 짧음
- 윈도우 크기가 w 바이트이고 왕복시간은 RTT초이면, TCP의 전송률은 대략 w/RTT
- TCP는 손실 이벤트가 발생할 때까지 RTT당 하나의 MSS만큼 w를 증가
- 손실 이벤트가 발생하는 시점의 w값을 W로 지정
- RTT와 w가 대체로 링크 동안 일정하다고 가정하면 TCP전송률은 W/(2*RTT)부터 W/RTT까지의 범위를 가짐
- 따라서 평균 처리율은 3W/4RTT bytes/sec
TCP Fairness
- 목적 : Rbps의 동일한 병목 link를 공유하는 경우 K개의 TCP연결이 되어있다면 각각 평균 R/K비율을 가져야 함
- 만약 연결된 두 TCP연결이 가장 아래에 있는 화살표의 시작부분에서 전송량이 증가하기 시작한다면 RTT당 1MSS씩 늘어나게 됨
- 두 연결의 전송률 합이 R을 넘어가면 손실이 생기며 알고리즘에 따라서 각각 절반씩 감소하고 다시 1MSS씩 증가하는 양상을 반복하게 됨
- 반복하다보면 결국 동등한 대역폭의 공유선으로 수렴
- Fairness and UDP
- reliable과 congestion control을 따지면서 전송할 때, 오히려 TCP보다 UDP가 나을 수 있음
- 병렬 TCP연결 : R의 링크에 9개의 기존 연결이 있었다고 가정하고 새로운 애플리케이션이 하나의 TCP연결을 한다면 R/10의 전송률을 얻음 -> 그러나 11개의 TCP연결을 사용한다면? -> 결국 이 연결은 R/2이상의 불공평한 연결이 되는 것
Explicit Congestion Notification(ECN)
- 네트워크-지원 혼잡 제어
- 혼잡을 나타내기 위해 네트워크 라우터에 의해 표시된 2bit의 IP헤더(ToS field)
- 수신 호스트로 운반되는 혼잡 표시, ECN = 11
- 수신자는 송신자에게 혼잡을 알리기위해 ACK에 ECE비트 설정후 ACK를 전송
- ACK안의 ECE비트를 확인한 sender는 전송하는 양을 줄이는 등의 조치를 취함
'네트워크 설계' 카테고리의 다른 글
[11월19일]IP:Internet Peotocol (0) | 2018.11.23 |
---|---|
[11/14]Chapter 4: network layer (0) | 2018.11.20 |
[11월07일]Chapter 3 - transport: TCP (0) | 2018.11.16 |
[11월5일]GBN과 SR (0) | 2018.11.14 |
[10월31일]TCP (0) | 2018.11.04 |