일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 댓글이 하나도 없오...ㅠㅠ
- 포?코DX
- 코딩 잘하고 싶어!!
- dfs
- flutter_secure_storage
- 크레인 인형뽑기
- hero animation
- 주변에는 능력자 뿐이야!!
- flutter_local_notification
- 주니어개발자
- Flutter2.8
- Null Safety
- network
- FutureBuilder
- flutter secure storage
- 편하다요
- 나도 코딩 잘할래!!!!!!!!!!!
- 다트 책
- 프로그래머스
- 플러터
- TODO
- 다트&플러터
- flutter-layout
- 플러터 책
- 쒸익!!!!!!!!!
- bloc
- flutter
- 이직
- open weather api
- 누가 보기는 하는걸까...ㅠㅠ
- Today
- Total
오늘하루도 우힣ㅎ
CH3. Transport Layer(4) 본문
6. Priciples of Congestion Control
- Congestion
-> router가 처리할수 있는 능력보다 더 많은 packet을 받게될때 일어나는 현상을 의미한다.(network가 처리하는것보다 sender측에서 데이터를 보내면 발생하는 것)
-> packet loss가 발생하게 된다.
-> router에 존재하는 queue를 늘린다하더라도 delay가 길어지게 된다.
- Congestion Control
-> knee : Throughput 증가량이 감소하게 된다. : Delay가 크게 증가하기 시작한다.
-> cliff : Throughput이 급격하게 떨어지게 되고 결국 0이 되게 된다. : Delay가 무한정으로 빠른속도로 늘어나게 된다. : Congestion이 일어난 것이다,
-> Congestion Control은 knee 상황을 얼마나 잘 대처하느냐에 달려 있다. |
-> Implicit Congestion Control
: packet loss, dealy가 나는 것을 보고 Network layer에서 congestion이 발생했다고 생각하고 조치를 취하는 것이다.
: TCP에서 packet 손실은 congestion이 일어났다고 본다.
-> Explicit Congestion Control
: router가 현재 congestion의 발생 유무를 가장 잘 안다. 그렇기 때문에 router(Network Layer)를 통해 congestion의 발생을 명시적으로 end-system에 알려주게 된다.(feedback)
: feedback 은 두가지 방향으로 갈수가 있게 된다.
=> BECN : 기존에 없던 packet을 만들어 sender측에게 congestion의 발생을 알려줌
=> FECN : sender에서 온 packet에 congestion이 발생했음을 알려주는 표시를 하여 receiver쪽으로 흘려보내고, receiver 가 sender에게 알리는 방식(ACK에 congestion이 발생했음을 알리게 되는것이다.)
- ECN(Explicit Congetsion Notification) in IP/TCP
-> ECN은 AQM mechanism 을 사용하게 된다.
: queue에서 active하게 관리를 하는 것이다. queue에 threshold가 존재하고 그것을 넘어서면 알려주도록 하기
-> router가 congestion의 발생을 알려준다.
: congestion이 일어날려고 한다고 알려준다(threshold 초과)=> 실제 일어난 것은 아니지만 일어난 것 처럼 조치를 취한다.
-> Bits in IP header & TCP header
-> ECN 동작 과정
|
|
7. TCP Congestion Control
-> window-based congesion control scheme
: sending rate = WinSize/RTT (WinSize를 증가시키게 되면 보내는 양이 많아짐=> WinSize 통해 보내는정도 결정)
: WinSize = min(rwnd, cwnd) => flow control, congestion control 모두 지원하기위해 receiver의 window size도 고려한다.
- Congestion Congtrol : Efficient&Fair Allocation
- AIMD
-> Concerge to fariness&efficiency
: 아래의 작업이 반복이 되면서 가장 적절한 합의점을 찾는다.
- Congestion Control Mechanism in TCP
-> Slow Strat
: 네트워크를 천천히 탐색하여 사용가능한 양을 확인한다
: 빠르게 사용가능한 bandwidth를 발견가능하다.
: cwnd는 기하급수적으로 증가한다.
: 처음 cwnd는 1MSS(Maximum Segment Size)에서 시작이 되게된다.
: 각각의 ACK에 대해 cwnd는 1segment 씩 증가하게 된다.(2개의 ACK이 오면 2 segment가 증가하는것)
: 처음은 느리지만 증가폭이 크기 때문에 빠르게 사용 가능한 최대 bandwidth를 찾을수가 있다.
-> Congestion avoidance
: congestion avoidance 상태에서는 cwnd는 1씩 증가하게된다.
: 만약 cwnd가 ssthreshold(Slow Start Threshold)보다 작다면 Slow Start, 크다면 Congestion Avoidance상태로 들어가게 된다.
: Congestion이 발생하게 되면(Time out이 일어나거나, 중복 ACK이 도달하게 된다), ssthreshold값으로 현재 cwnd/2의 값을 저장하고 cwnd는 1MSS부터 시작해 Slow Start를 다시 실행한다.
- Tahole Algorithm
-> 처음 cwnd(congestion window size) = MSS -> 가장 효율적인 Winodw size = min(rwnd,cwnd) -> ACK이 도착하게됐을때 : cwnd<sstrheshod => Slow start과정 : cwnd>=ssthreshold => congestion avoidance -> time out, 중복된 ACK가 3개 왔을때 : ssthreshold = max(현재 cwnd/2, 2MSS) : cwnd = MSS |
- Reno
-> time out이 일어날때와, 중복된 ACK가 오는 상황을 분리하여 대처한다. -> time out이 일어났을때는 심각한 congestion이 일어났다 생각하고 cwnd=1MSS, ssthrehold = max(cwnd/2, 2MSS)를 사용한다. -> 중복된 ACK이 오게 됐을때는 cwnd = cwnd+3MSS, ssthreshold = max(cwnd/2,2MSS)를 사용하게 된다. : slow start 과정 없이 바로 congestion avoidance과정으로 들어가 낭비되는 bandwidth를 줄일수 있는 장점이 존재한다. -> 중복된 ACK가 아닌 새로운 ACK이 오게 되면 cwnd = ssthreshold가 되고, congestion avoidance모드로 들어간다. |
- TCP Tahoe vs TCP Reno
-> 주로 Reno가 더 좋은 성능을 보여주지만 3개 이상의 손실이 일어나게 되면 Tahoe가 더 좋은 효율을 나타낸다.
'네트워크 > 강의정리' 카테고리의 다른 글
CH4. Network Layer(2) (0) | 2020.01.11 |
---|---|
CH4. Network Layer(1) (0) | 2020.01.08 |
CH3. Transport Layer(3) (0) | 2020.01.03 |
CH3. Transport Layer(2) (0) | 2020.01.01 |
CH3. Transport Layer(1) (0) | 2019.12.30 |