'혼잡' 이란?
너무 많은 전송자가 너무 많은 데이터를 너무 빠르게 전송해서 네트워크가 감당하지 못하는 그런 현상
혼잡제어가 흐름제어와 다른점
흐름제어는 Sender와 Receiver간의 1:1 문제이다. 하지만 혼잡제어는 네트워크를 공유하고 있는 모든 node들이 서로 양보를 해야하는 문제이다. 양보를 해야 네트워크 트래픽 양이 줄어들면서 원활하게 문제를 해결할 수 있기 때문에 이것은 전체 노드가 관련 된 글로벌한 이슈에 해당된다.
혼잡제어에 대한 방식
1. network-assisted
- 라우터가 관여해서 호스트들에게 '지금 혼잡하니 네트워크양을 얼마만큼 줄이세요'라고 정보를 알려주는 방식
- 여러 복잡한 문제가 있기 때문에 잘 사용하지 않는다고 한다.
2. end-to-end
- 라우터가 전혀 관여하지 않고, 호스트들이 자기가 보낸 데이터가 얼마나 잘 도달하는가를 관찰 후 혼잡여부를 판단해서 알맞은 동작을 취하는 방식
- 일반적으로 TCP에서 사용하는 방식이다.
TCP 혼잡제어 방식들의 공통 철학
AIMD approach
- Additive Increase
window size를 천천히 1씩 증가시킨다. 1이라는 것은 하나의 세그먼트가 가질 수 있는 최대 크기의 값이다.
- Multiplicative Decrease
혼잡을 감지하면 window size를 반으로 확 줄여버린다. 하나씩 다시 줄여서는 문제를 빨리 해결할 수 없기 때문이다. 특정 packet loss를 감지하게 되면 window size를 반으로 줄인다는 뜻이다.
Slow-Start : 혼잡제어
호스트 A가 전송에 성공하면 세그먼트의 전송 수를 2배로 증가시킨다.
따라서 window size가 지수적으로 증가하게 된다.
이름은 Slow-Start이지만 이 뜻은 시작 세그먼트의 수가 1이기 때문에 붙여진 이름이다. 지수적으로 증가하기 때문에 전혀 느리지 않은 메커니즘이다.
모든 노드들이 빠르게 maximum window size에 도달할 것이고, 이렇게 되면 금방 혼잡이 발생할 것이다. 따라서 특수한 혼잡 회피방식을 도입하였다.
특정한 혼잡이 일어나기 전에 window size가 있었을 것이고, loss가 일어나기 전 값의 절반인 window size를 slow-start threshold라는 값으로 설정을 한다.
예를 들어 1, 2, 4, 8, 16까지 window size가 늘어났는데 혼잡이 발생했다고 하자. 그럼 ssthresh 값은 8이 되고, 다시 window size는 1부터 증가하기 시작할 것이다. 이때 1, 2, 4, 8까지 window size가 늘어났고 ssthresh 값에 도달했기 때문에 이제는 window size가 1씩 증가하기 시작한다.
따라서 매 RTT마다 1MSS씩 증가시키는 방식으로 동작하는것이 혼잡 회피 방법이다.
'CS > Network' 카테고리의 다른 글
[Network] 네트워크 계층 : 인터넷 프로토콜(IP) (0) | 2021.12.05 |
---|---|
[Network] 트랜스포트 계층 : TCP 혼잡제어 알고리즘(TCP Tahoe, TCP Reno, TCP NewReno) (0) | 2021.11.29 |
[Network] 무선 네트워크 : Wireless LAN(Wi-Fi) (0) | 2021.11.18 |
[Network] 네트워크 계층 : DHCP(Dynaminc Host Config Protocol) (0) | 2021.11.17 |
[Network] 가상 근거리 네트워크(VLAN) (0) | 2021.11.06 |