2017-01-09 1 views
0

TCP의 Retransmission Timer에 관한 질문이 있습니다. TCP Congestion Control에 관한 많은 기사, 블로그 항목 및 기타 내용을 읽었으며 물론 Retransmission Timer를 접하게되었습니다.
어쩌면 어리석은 질문 일 수도 있지만 때로는 각 전송 된 세그먼트에 대해 타이머가 시작되고 다른 곳에서는 타이머가 각 전송 된 세그먼트에 대해 재설정됩니다.
전송 된 각 세그먼트에 대해 단일 재전송 타이머가 있습니까? 따라서 전송 된 세그먼트만큼 많은 타이머가 있거나 재전송 타이머가 하나만 있습니까?보낸 TCP 패킷마다 하나의 재전송 타이머가 있습니까?

+1

TCP 세그먼트 (되지 않은 패킷)을 개별적으로 각각의 세그먼트를위한 재전송 타이머는 의미가 없다 인정되지 않는다. –

+0

누적 된 확인 응답은 각 전송 된 세그먼트에 대한 재전송 타이머의 진술이 나를 혼란스럽게 한 이유 중 하나입니다. – idlmn89

답변

0

일반적으로 개별 구현에는 단일 재전송 타이머가 있으며, 상대방이 새 데이터를 확인하면 재설정됩니다. 데이터가 전송 된 시점과 확인 된 시점부터 RTT (왕복 시간)를 업데이트하는 데 사용됩니다.

TCP는 누적 확인이 작동하는 방식 인 패킷이 아니라 시퀀스 번호를 기반으로 작동합니다. 구현에서는 스트림이 분할 된 방법을 기록 할 필요조차 없습니다.

0

TCP 구현의 속도가 완전히 향상되지는 않았지만 TCP 구현은 일반적으로 200ms 해상도의 "빠른"클록과 일반적으로 500ms 해상도). 예 : 을 참조하십시오.this.

모든 패킷은 이와 관련된 재전송 시간을 갖지만 재전송을위한 클럭의 세분성은 느린 클럭입니다. RFC 6298은 "반드시"지정된 알고리즘보다 공격적이어야한다고 말하기 때문에 가장 가까운 500ms 클럭 틱으로 반올림됩니다. 이는 성능상의 이유로 커널이 재전송을 위해 많은 타이머 이벤트를 처리하지 않고 한 번에 500ms 간격으로 모든 재전송을 처리합니다.

많은 TCP 흐름이 상호 연관 될 때 실제로 많은 문제가 발생할 수 있습니다. TCP가 사용하는 알고리즘의 설계 및 분석의 대부분은 흐름이 상관되지 않는다고 가정합니다. 상관 관계가있는 플로우의 간단한 예는 하나 이상의 소스에서 정보를 수신 한 다음 각 클라이언트 TCP 연결을 통해 연결된 모든 클라이언트로 전송하는 "팬 아웃 (fan out)"프로세스입니다. 이는 매우 폭발적인 네트워크 흐름이며, "팬 아웃"프로세스가 잘못 설계되면 네트워크에서 서비스 거부 공격으로 효과적으로 작동 할 수 있습니다 (각 TCP 연결은 서로를 인식하지 못하며 모두 생각하면 데이터를 단일 클라이언트로 보내면 모든 연결된 클라이언트에게 즉시 데이터가 전송됩니다. 이로 인해 상당한 패킷 손실이 발생하고 재전송 클록의 500ms 단위로 인해 손실 된 모든 세그먼트가 동시에 재전송되어 잠재적으로 더 큰 패킷 손실을 초래할 수 있습니다.

그래서 패킷에 재전송 시간이있을 수 있지만 그 세밀성은 분명히 분명 할 수 있으며 이러한 이유로 많은 다른 패킷과 재전송 시간을 공유합니다. 그래서 어떤 의미에서 이것은 대답합니다. 아니요, 실제로 자체 재전송 타이머가 없습니다.

하지만 ACK (또는 더 나은 선택 ACK)가 여러 세그먼트의 수신을 확인할 수 있기 때문에 패킷에 관련된 재전송 시간이있는 것이 합리적입니다. 대답은 '예'입니다. 세그먼트에서 전송 된 데이터는 계산 된 RTO 이후에 재전송됩니다. RTO 이전에 ACK 된 경우 (가능하면 다른 세그먼트와 함께) 그럴 수 없습니다.

TCP 스택의 구현에 따라 상황이 매우 다를 수 있습니다.

-1

아래의 줄은 "TCPIP Illustrated, volume 1"에서 가져온 것으로, 하나의 타이머가있는 것처럼 보이며 새 것이 이전 것을 대체합니다.

Once a sending TCP has established its RTO based upon measurements of the time-varying values of effective RTT, whenever it sends a segment it ensures that a retransmission timer is set appropriately. When setting a retransmission timer, the sequence number of the so-called timed segment is recorded, and if an ACK is received in time, the retransmission timer is canceled. The next time the sender emits a packet with data in it, a new retransmission timer is set, the old one is canceled, and the new sequence number is recorded. The sending TCP therefore continuously sets and cancels one retransmission timer per connection; if no data is ever lost, no retransmission timer ever expires.

관련 문제