TCP flow control의 이유
음 예를 들면 이제 음식점이 있겠네요.
주방에서 동시에 조리 가능한 음식을 6개라고 가정합시다.
이러면 홀에서는 주방에 상황에 따라 유동적으로 음식을 주문받고, 조금만 기다려 달라고 손님들에게 양해를 구해야 합니다.
만약 이렇지 않고 , 맘대로 주문을 받아버리면 주방에서는 대혼란이 오는 상황이 발생합니다.
나는 지금 조리가 불가능한데 음식을 그렇게 받으면 어떡하니?라고 홀에게 말하겠죠.
(실제로 경험담입니다)
아무튼 이것도 컴퓨터로 엮어볼 수 있습니다.
네트워크 레이어에서 상위 계층(Transport Layer)으로 운반하는 속도가 트랜스포트 계층에서 상위계층(애플리케이션)으로 보내는 속도보다 빠르면 어떻게 될까요? 당연히 트랜스포트 계층에서는 정신이 없고, 최악의 상황에서는 그냥 운반하는 것을 버리는 경우도 발생할 수 있습니다.
수신자가 처리할 수 있는 데이터의 양을 초과해서 보내면, 데이터 손실
이 발생하거나, 네트워크 혼잡
을 유발하기에, 송신자와 수신자 사이의 데이터 전송 조절을 해야 하는데 이 데이터 전송 속도를 조절해 주는 역할을 TCP Flow control
이라고 합니다.
TCP는 패킷들의 송/수신 관리를 위한 window
가 있습니다.
이 window는 패킷 송/수신할 수 있는 양
을 의미합니다.
TCP 세그먼트를 보면 윈도 사이즈값을 명시해 놓은 것을 알 수 있습니다.
윈도우 사이즈는 내가 이만큼 받을 수 있다는 뜻이고,
이 크기를 명시함으로써, 네트워크 혼잡을 막을 수 있습니다.
TCP flow control을 요약하자면
수신 측의 buffer 상황을 보고, 송신 측의 window size를 조절하는 것입니다.
조금 풀어서 설명해 보자면.
TCP에서 flow control은 수신 측의 소켓에 존재하는 버퍼(RcvBuffer)를 기준으로 행동합니다.
버퍼에 데이터가 계속 쌓이면, 애플리케이션 계층에서 데이터를 계속 꺼내갑니다.
하지만, 꺼내가는 속도보다, 버퍼에 쌓이는 속도가 빠를 경우 데이터가 loss 되기 때문에, 속도 조절
이 필요하고,
이 속도 조절을 하는 것이 TCP flow control입니다.
핵심은 송신 측에서 하는 것이 아닌, 수신 측에서 나 이제 버퍼 위험하니까 송신! 너 적당히 조절해라~ 이런 뉘앙스입니다.
rwnd는 buffer에서 내가 현재 사용할 수 있는(비어있는) 공간의 크기입니다.
😀요약
- TCP 세그먼트에는 수용 가능한 window size가 명시되어 있다.
- TCP flow control은 송신 측과 수신 측 사이에서 데이터 전송 속도 조절을 한다.
- 데이터 전송 속도 조절을 하지 않는다면, 데이터가 유실되고, 네트워크 혼잡을 유발하기에 꼭 필요하다.
- TCP flow control은 수신 측에서 송신 측에게 버퍼가 여유가 없으니, 이제 송신속도를 조절해라!
'Computer Science > Network' 카테고리의 다른 글
[컴퓨터망] - principles of congestion control (0) | 2023.04.14 |
---|---|
[컴퓨터망] - TCP connection (0) | 2023.04.14 |
[컴퓨터망] - TCP 네놈이 뭔데? (0) | 2023.04.14 |
[컴퓨터망] - Rdt,pipeline, Go-Back-N, Selective Repeat (2) | 2023.04.13 |
[컴퓨터망] - UDP와 UDP segment (0) | 2023.04.12 |