TCP congestion control
- 가장 얇은 통로보다 많이 보내면 터짐
가장 얇은 point를 어떻게 찾지?
network 대신 ACK로 정보를 얻음
처음에
3 main phases
1. slow start
- 아주 작은양부터 시작해서 조금씩 throughput을 증가시킴
- 증가하는 속도는 exponential이라 slow하진 않음
- 맨 처음에 1MSS segment 1개 보냄
2. Additive increase
- threshold(임계점)에 도달하면 linear하게 전송하는 양을 늘림
3. Multiplicative decrease
- 데이터 전송량을 1/2배로 줄임
- 패킷 유실이 감지되면 multiplicative decrease함
- 한번에 데이터 전송량을 줄이는 이유는 네트워크는 공유자원이므로 한번에 많이 줄여야 막힌 것을 해결할 수 있음
MSS (maximum segment size)
- 전송하는 데이터량의 단위는 MSS
- TCP segment 하나가 가질 수 있는 최대 데이터 크기
- 실제로 보내는 양 = window size가 결정
- ACK를 보내지 않고 한번에 보낼 수 있는 양
- 처음에 slow start를 할 때 window size=1MSS

- x축: 시간
- y축: window size=한번에 보낼 수 있는 데이터 양= 전송 속도
- 일정하게 보내고 싶으나, 임계점이 어디인지를 알 수 없고, 임계점은 매번 변하기 때문에 불가능하다.
전송속도
rate=RTTCongWinBytes/sec
RTT: 패킷이 왕복하는 시간
- 전송속도는 대부분 CongWin이 결정
- 네트워크 상황이 CongWin 결정
- 네트워크 붐비면 작아짐
- 네트워크 한산하면 커짐
TCP Tahoe vs TCP Reno

TCP Tahoe
- TCP의 첫번째 버전
- congestion window=1에서 시작
- 2배씩 늘림
- 임계점 넘어서 1씩 증가(linear increase)
- packet 유실되어 임계점을 절반으로 줄임
- 다시 slow start로 시작
- packet 유실 탐지 조건
1. timeout
2. 3 duplicated ACK
- 이 두 경우일 때 같은 상황일까?
timeout이 발생한 상태가 더 문제
-> 똑같이 반응하면 안됨
-> TCP 2번째 버전인 Reno가 나옴
TCP Reno
- 3 duplicated ACK -> window size를 절반으로만 줄이고 linear하게 증가
- Timeout -> congestion window를 1MSS로 내리고 slow start
TCP Fairness
- 독립적인 congestion control을 모든 사람들이 하고 있음
- 이 자원을 모두 공평하게 사용하게 되는가?
-> fair하다
Why is TCP fair?

- connection 1이 bandwidth를 더 많이 사용하는 상황에서 linear increase -> window size 줄임 -> 다시 linear increase -> window size 줄임 반복하면 equal bandwidth share로 수렴함
- 모든 TCP는 공평하게 bandwidth를 가지게 됨