TCP flow control

박제구·2021년 3월 19일
0

Network

목록 보기
3/6
post-thumbnail

🧩 TCP flow control 이란?

  • TCP 의 수신측에서 수용할 수 있는 버퍼의 용량을 알려주어 overflow를 막는 것
    Receive window를 sender에게 알려주는 것

  • Sender는 tcp header에 receive window 필드를 확인하고 overflow가 일어나지 않을 만큼의 데이터를 전송한다.


🧩 rwnd = 0 일때의 문제점과 해결방안

  • 만약 A와 B가 TCP 통신을 하고 있고, A에서는 더이상 보낼 데이터가 없고 마지막으로 B로부터 왔었던 패킷에 rwnd = 0 을 보낸 상황이라면 dead lock이 발생한다.

  • 🔎 왜 dead lock이 발생할까?
    -> B의 입장 : A로부터 rwnd=0 이라는 응답을 받은 상태이기 때문에 overflow를 방지하기 위해 패킷을 보낼수 없는 상황
    -> A의 입장 : B로 보낼 데이터가 없고, 이미 rwnd = 0 을 보낸상황에서 패킷을 수신할 수 없기 때문에 rwnd 가 변하더라도 알려줄 방법이 없는 상황

  • 🔥 dead lock 해결방안

    rwnd = 0 의 응답을 받게 되면, 주기적으로 1byte 크기의 probe packet을 전송해서 rwnd 가 달라지는지 확인한다.
    실제로는 40 byte (header) + 1 byte (data) 크기의 패킷


🧩 Silly Window Syndrome

Sender에서 데이터를 1byte 씩 보내거나 Receiver에서 데이터를 1byte씩 매우 늦게 받는 경우,
1 바이트의 데이터를 처리하기 위해 Overhead가 발생하고 (IP 20byte, TCP 40byte) 이러한 비효율적인 네트워크 자원의 낭비를 Silly Window Syndrome 이라고 한다.

해결방안 < Sender >


-> Nagle의 알고리즘

  • 첫번째 패킷은 1byte의 데이터 크기여도 보낸다.
  • ACK가 오거나 혹은 Maximum Segment Size의 크기까지 데이터 송신을 막는다.

큰 사이즈 의 세그먼트를 한번에 보냄으로 비효율적인 오버헤드를 방지한다.



해결방안 < Receiver >

-> Clark's solution

  • rwnd = 0 을 보내서 수신 버퍼의 크기를 반이상 채울 때까지 기다리고 rwnd를 높여 보낸다.

한번에 수신 버퍼의 절반이상의 MSS를 받을 수 있도록 한다.

-> Delayed ACK

  • 최대 500 ms 까지 ACK를 지연하여 보낸다.

수신 버퍼의 공간을 충분히 확보 할때까지 ACK를 늦게 보내는 방식


References

Computer Networking: A Top-Down Approach (6th Edition)

profile
안녕하세요!

0개의 댓글