네트워크가 막히면 상황이 더 악화되기 때문에 (TCP가 재전송하기 때문에 더 막힌다) 따라서 속도조절이 필요하다
수로와 같다고 생각하면 편하다. 너무 많이 보내면 얇은 부분의 파이프가 터진다. 따라서 이 얇은 부분의 파이프가 감당할 수 있을만큼의 물을 흘려줘야한다
네트워크는 이 얇은 부분을 리포트해주지 않기 때문에 속도를 조금씩 늘리며(물을 조금씩 부어서)속도를 맞춰가야한다
TCP Congestion Control
3 main phases
- Slow start
- Additive increase (조심히 늘리는) : increase CongWin by 1MSS every RTT until loss detected
- Multiplicative decrease : cut CongWin in half after loss
만약 1000000만큼의 네트워크처리가 가능하다면, 한개씩 늘려가면서 보내도 문제이다(비효율적)
따라서 TCP는 1,2,4,8,16 (모두 MSS 단위)로 늘려다가 threshold이후로는 조심한다
ㄴ 제일 처음 window size가 1MSS이다. 잘되면 window size가 해당값의 2배씩 늘어난다 (변화하는 단위 자체가 MSS)
=> exponential fast start : 실제론 빠르다
*MSS : Maximum segment size ; e.g. 1MSS = 약500byte
(thneshold도 속도를 늘리면서 찾아가야한다)
잘보내다가 패킷 유실이 탐지됐을때 절반 속도로 뚝 떨어뜨려 다시 시작한다. 1/2만큼 떨어진다
Q. 왜 1/2이나 떨어질까?
A. 네트워크가 막혔을때 풀릴려면 모든 사람이 발을 확 빼야한다. 명절에 고속도로에서 차 하나 빠진다고 막힘현상이 해결되지 않는 것과 같은 원리이다
뾰족한 부분을 모르기 때문에 반복한다. 영화 다운받을때 속도를 생각하면 된다. CongWin은 편차가 심하다
CongWin에 의해 전송속도가 좌우된다
CongWin은 network상황에 따라 결정된다
네트워크 상황이 우리 모두의 전송속도를 결정하게 된다
(= 우리 모두의 행동이 전송속도에 영향을 끼친다)
Refinement
(Tahoe를 개선한 Reno만 설명한다)
Threshold : 그 전 timeout값의 1/2
패킷 손실을 인지할 수 있을 때
- timeout현상이 발생할때
해당 패킷이 안가고, 그 이후에 패킷도 다 안가서 발생한 것
ㄴTCP는 window에 하나의 timer만 준다. 각 패킷당 timer를 설치하지 않는다
ㄴ 만약에 패킷 하나만 손실되고 나머지가 다 전송된다면, 3 due ACK가 동작할 것이다. 따라서 일반적으로 timeout이 발생할땐 해당 패킷과 함께 그 이후 패킷도 다 안갔을 때이다
timeout이 발생하면, TCP는 패킷을 재전송한다 = 네트워크 기준 더 안좋은 상황이다
- 3 duplicate ACK현상이 발생할때
동일한 ACK 숫자가 와서 이상한 상황이긴 하지만 네트워크 기준 잘 돌아가는 상황이다
(하나만 안온 상황이기 때문)
따라서, 1번으로 인한 패킷 손실이라면 1MSS부터 다시 시작한다 (하늘색)
: Threshold set to CongWin/2 and CongWin is set to 1MSS
2번으로 인한 패킷 손실이라면 1/2 위치부터 다시 시작한다 (검정색)
: Threshold set to CongWin/2 and CongWin set to Threshold
Threshold는 Tahoe와 동일하게 (Congestion Window size / 2)로 정한다
초기 Threshold값
패킷을 보내보기 전까진 임계점을 예측하기 어렵다. 따로 정하는 방법은 없다
TCP Fairness
Q. 네트워크 자원은 공용이다. 각자 독립적으로 congestion control을 했을 때, 이 자원을 공평하게 사용하게 되는가?
A. 신기하게도, fair하게 된다
그래프의 가운데 지점이 R/2씩 하는 상황이다. 각 1/2씩 줄이기 때문에 직관적으로 fair하게 된다는 것을 알 수 있다
근데, 결국 TCP connection끼리 공평한거기 때문에 한쪽에서 TCP connection을 2개 열면 2배 더 많이 쓰는 것이다
'Computer Network' 카테고리의 다른 글
[Lecture] DHCP (0) | 2024.02.26 |
---|---|
[Lecture] Network layer : IP(Internet Protocol) (0) | 2024.02.24 |
[Lecture] TCP : Flow Control (0) | 2024.02.23 |
[Lecture] Connection-oriented transport: TCP (0) | 2024.02.22 |
[Lecture] Pipelined protocol (Go-Back-N과 Selective Repeat) (0) | 2024.02.20 |