logo

TCP 재전송

TCP 재전송은 손실되거나 손상된 패킷을 네트워크를 통해 다시 보내는 것을 의미합니다. 여기서 재전송은 다음과 같은 프로토콜에서 사용되는 메커니즘입니다. TCP 안정적인 통신을 제공합니다. 여기서 안정적인 통신이란 데이터 패킷이 손실되거나 손상된 경우에도 프로토콜이 패킷 전달을 보장한다는 의미입니다.

캐스트 SQL

네트워크는 신뢰할 수 없으며 손실되거나 손상된 패킷의 지연이나 재전송을 보장하지 않습니다. 손상되거나 손실된 패킷에 대한 확인과 재전송을 조합하여 사용하는 네트워크는 신뢰성을 제공합니다.

재전송 메커니즘

여기서 재전송은 데이터 패킷이 손실되어 승인이 부족함을 의미합니다. 이러한 승인 부족으로 인해 타이머가 시간 초과되어 데이터 패킷이 재전송됩니다. 여기서, 타이머란 타이머가 만료되기 전에 승인을 받지 못한 경우 데이터 패킷을 재전송한다는 의미입니다.

다음과 같은 재전송 시나리오를 고려해 보겠습니다.

시나리오 1: 데이터 패킷이 손실되거나 오류가 있는 경우.

TCP 재전송

이 시나리오에서는 패킷이 수신자에게 전송되지만 해당 시간 초과 기간 내에 승인이 수신되지 않습니다. 시간 초과 기간이 만료되면 패킷이 다시 전송됩니다. 패킷이 재전송되면 승인이 수신됩니다. 승인을 받은 후에는 재전송이 다시 발생하지 않습니다.

시나리오 2: 패킷이 수신되었지만 승인이 손실된 경우.

TCP 재전송

이 시나리오에서는 패킷이 상대방에서 수신되었지만 승인이 손실됩니다. 즉, 보낸 사람 측에서 ACK가 수신되지 않습니다. 제한 시간이 만료되면 패킷이 다시 전송됩니다. 반대쪽에는 두 개의 패킷 복사본이 있습니다. 패킷이 올바르게 수신되었으나 승인이 수신되지 않아 송신자는 패킷을 재전송합니다. 이 경우 재전송을 피할 수 있었으나 ACK가 손실되어 패킷을 재전송하게 된다.

시나리오 3: 조기 시간 초과가 발생하는 경우.

TCP 재전송

이 시나리오에서는 패킷이 전송되지만 승인 지연으로 인해 실제 시간 초과 전에 시간 초과가 발생하여 패킷이 재전송됩니다. 이 경우 승인 지연으로 인해 불필요하게 패킷이 다시 전송되었거나 타임아웃이 실제 타임아웃보다 일찍 설정되었습니다.

위 시나리오에서 첫 번째 시나리오는 피할 수 없지만, 다른 두 시나리오는 피할 수 있습니다. 이러한 상황을 어떻게 피할 수 있는지 살펴보겠습니다.

발신자는 얼마나 기다려야 하나요?

발신자는 ACK에 대한 시간 초과 기간을 설정합니다. 시간 초과 기간은 두 가지 유형이 될 수 있습니다.

    너무 짧아:제한 시간이 너무 짧으면 재전송이 낭비됩니다.너무 오래:시간 초과 기간이 너무 길면 패킷이 손실될 때 과도한 지연이 발생합니다.

위의 두 가지 상황을 극복하기 위해, TCP RTT(왕복 시간)의 함수로 시간 제한을 설정합니다. 여기서 왕복 시간은 패킷이 소스에서 대상으로 이동한 다음 다시 돌아오는 데 필요한 시간입니다.

RTT는 어떻게 얻을 수 있나요?

RTT는 네트워크의 특성에 따라 달라질 수 있습니다. 즉, 네트워크가 혼잡한 경우 RTT가 매우 높다는 의미입니다. 단순히 ACK를 관찰함으로써 RTT를 추정할 수 있습니다.

RTT를 측정하는 방법을 살펴보겠습니다.

우리는 원래 알고리즘 RTT를 측정합니다.

1 단계: 먼저, 우리는 샘플RTT 각 세그먼트 또는 ACK 쌍에 대해. 보낸 사람이 패킷을 보내면 패킷이 전송되는 타이머를 알 수 있으며 승인이 수신되는 타이머도 알 수 있습니다. 이 둘 사이의 시간을 계산하면 다음과 같습니다. 샘플RTT .

잉크스케이프 대 김프

2 단계: 우리는 단 하나의 샘플만 채취하지 않습니다. 계속해서 다양한 샘플을 채취하여 이러한 샘플의 가중 평균을 계산하면 이것이 EstRTT(예상 RTT)가 됩니다.

여기서, α+ β = 1

α는 0.8과 0.9 사이에 있습니다.

β는 0.1과 0.2 사이에 있습니다.

3단계: 시간 제한은 EstRTT를 기준으로 설정됩니다.

시간 초과 = 2 * EstRTT.

시간 초과는 예상 RTT의 두 배로 설정됩니다. 이것이 실제 시간 초과 요소가 계산되는 방식입니다.

이 접근 방식의 결함

원래 알고리즘에 결함이 있습니다. 두 가지 시나리오를 고려해 보겠습니다.

csma와 csma CD

시나리오 1.

TCP 재전송

위의 다이어그램은 보낸 사람이 원본 전송이라고 하는 데이터를 보내는 것을 보여줍니다. 제한 시간 내에 승인이 수신되지 않습니다. 따라서 보낸 사람은 데이터를 다시 전송합니다. 데이터를 재전송한 후 승인이 수신됩니다. 재전송이 아닌 원래 전송에 대해 승인을 받았다고 가정해 보겠습니다. 원본 전송에 대한 승인을 얻었으므로 샘플RTT 원래 전송 시간과 승인을 받은 시간 사이에서 계산됩니다. 그러나 실제로는 샘플RTT 재전송 시점과 승인 시점 사이에 있어야 합니다.

시나리오 2.

TCP 재전송

위의 다이어그램은 보낸 사람이 승인을 받은 원본 데이터 패킷을 보내는 것을 보여줍니다. 그러나 데이터를 재전송한 후에 승인이 수신됩니다. 확인이 재전송에 속한다고 가정하면 샘플RTT 재전송 시점과 승인 시점 사이에서 계산됩니다.

위의 두 시나리오 모두 원래 전송에 대한 승인인지 재전송에 대한 승인인지 알 수 없는 모호성이 있습니다.

위 알고리즘의 결론.

  • 여기서 ACK는 전송을 승인한다는 의미가 아니라 실제로는 데이터 수신을 승인하는 것입니다.
  • 첫 번째 시나리오를 고려하면 손실된 패킷에 대해 재전송이 수행됩니다. 이 경우 ACK가 원래 전송에 속한다고 가정하므로 SampleRTT가 매우 커집니다.
  • 두 번째 시나리오를 고려하면 두 개의 동일한 패킷이 전송되므로 이 경우 이중성이 발생합니다. 이 경우 ACK가 재전송에 속한다고 가정하므로 SampleRTT가 매우 작아집니다.

위의 문제를 극복하기 위해 Karn/Partridge 알고리즘이 간단한 솔루션을 제공합니다. 이 알고리즘은 한 번에 전송된 샘플을 수집하고 예상 RTT 계산을 위해 재전송 시점의 샘플을 고려하지 않는 간단한 솔루션을 제공합니다.

Karn/Partridge 알고리즘

위의 두 시나리오에서는 재전송이 발생하며 샘플 RTT를 고려했습니다. 하지만 이 알고리즘은 재전송 시 Sample RTT를 고려하지 않습니다. 재전송이 발생했기 때문에 이 왕복 시간에 문제가 발생하거나 네트워크에 정체가 발생할 수 있음을 의미합니다. 이 문제를 극복하기 위해 이 알고리즘은 각 재전송 후 시간 제한을 두 배로 늘립니다. 이 알고리즘은 TCP 네트워크에서 구현됩니다.

한정

RTT의 변화는 고려하지 않습니다.

8 대 1 멀티플렉서
    분산이 작으면 EstimatedRTT가 정확한 것으로 나옵니다. 분산이 크면 EstimatedRTT가 정확하지 않습니다.

위의 한계를 극복하기 위해 RTT에 분산 인자를 도입하는 Jacobson/Karels 알고리즘이 개발되었습니다.

Jacobson/Karels 알고리즘

이 알고리즘은 한계를 극복하기 위해 개발되었습니다. 카른/파트리지 연산. SampleRTT와 EstimatedRTT 간의 차이를 계산하고 차이에 따라 RTT를 높입니다.

평균 RTT 계산

  • 먼저, 차이 인자를 계산합니다.

차이 = SampleRTT - EstimatedRTT

  • 이제 위에서 했던 것과 같은 방식으로 계산될 EstimatedRTT를 계산합니다.

EstRTT = EstRTT + (δ*차이)

  • 이제 차이 인자의 평균을 계산합니다.

Dev = Dev + δ ( |차이| - Dev)

여기서 Dev는 편차 인자이고, δ는 0과 1 사이의 인자이다. 데브EstRTT .

  • 시간 초과 값을 계산하는 동안 차이를 고려하겠습니다.
시간 초과 = µ * EstRTT + ɸ * Dev

어디, µ =1 및 ɸ =4

빠른 재전송

재전송을 위한 시간 초과 기반 전략은 비효율적입니다. TCP는 슬라이딩 윈도우 종류의 프로토콜이므로 재전송이 발생할 때마다 손실된 패킷부터 전송을 시작합니다.

TCP 재전송

0, 1, 2, 3번 패킷을 전송한다고 가정하자. 0번 패킷과 1번 패킷은 상대방에서 수신되므로 2번 패킷은 네트워크에서 손실된다. 패킷 0과 패킷 1의 응답을 받았으므로 패킷 2개, 즉 패킷 4와 패킷 5를 더 보냅니다. 패킷 3, 4, 5가 전송되면 TCP 응답으로 패킷 1의 응답을 받게 됩니다. 누적되므로 순서대로 수신한 패킷까지 승인을 합니다. 타임아웃 기간 내에 2, 3,4, 5번 패킷에 대한 승인을 받지 못하여 2, 3, 4, 5번 패킷을 재전송하였다. 2번 패킷은 유실되었으나 다른 패킷, 즉 3, 4번 패킷은 전송되지 않았다. ,5가 상대방에서 수신되더라도 이 시간 초과 메커니즘으로 인해 여전히 재전송됩니다.

이 시간 초과 비효율성을 어떻게 제거할 수 있습니까?

슬라이딩 윈도우 아래의 더 나은 솔루션:

n개의 패킷이 손실되었지만 여전히 n+1, n+2 등의 패킷이 수신되었다고 가정합니다. 수신자는 계속해서 패킷을 수신하고 수신자가 여전히 n번째 패킷을 기다리고 있다는 ACK 패킷을 보냅니다. 수신자가 반복되거나 중복된 승인을 보내고 있습니다. 위의 경우, 패킷 2가 손실되었기 때문에 패킷 1의 ACK가 3번 전송됩니다. 이 중복된 ACK 패킷은 n번째 패킷이 누락되었지만 이후 패킷이 수신되었음을 나타냅니다.

숫자로 된 'abc'

위 상황은 다음과 같은 방법으로 해결할 수 있습니다.

  • 발신자는 '중복 ACK'를 n번째 패킷이 손실되었다는 초기 힌트로 받아들여 가능한 한 빨리 재전송을 수행할 수 있습니다. 즉, 발신자는 시간 초과가 발생할 때까지 기다리지 않아야 합니다.
  • 발신자는 TCP에서 빠른 전송 전략을 구현할 수 있습니다. 빠른 전송 전략에서 발신자는 삼중 중복 ACK를 트리거로 간주하고 이를 재전송해야 합니다.

TCP는 세 개의 중복 ACK를 트리거로 사용한 다음 재전송을 수행합니다. 위의 경우, 패킷 1의 3개의 ACK가 수신되면 송신자는 타임아웃 기간이 발생할 때까지 기다리지 않고 손실된 패킷, 즉 패킷 2를 보내야 합니다.