posted by SoundHacker 2019. 9. 10. 21:51

TCP재전송이란?

간단히 정리하자면

서버와 클라이언트 사이에서 정체모를 이유로 통신중에 패킷이 도착하지 못할 경우

다시 패킷을 보내주는것을 말한다.(양방향 모두 포함)

 

구현은 어떻게 할까?

Timer(타이머)를 이용하여 구현하게 된다.

즉 타이머가 만료되기 전에 도착하는가? 를 기준으로 판단하여 재전송 여부를 결정하는 것이다.

 

그러면 각 상황별로 살펴보게된다면?

1. Server to Client

이 과정에서 서버가 클라이언트에게 패킷(Packet)을 보내다가 어떤 이유로 수신을 하지 못하게 된 경우,

응답(ACK)를 받지 못한 송신자의 타이머는 만료되게 된다.

2. Client to Server

위의 과정에서 볼 수 있는 것처럼 클라이언트에게 패킷을 보내서 정상적으로 클라이언트가 패킷을 수신하더라도

ACK가 오는 과정에서 손실이 될 수 있다. 이 경우에도 마찬가지로 송신을 받지 못하게 된 송신자의 타이머는 만료된다.

3. To...Many..Delay....

분명 정상적으로 패킷을 보내고, 수신자도 정상적으로 ACK를 보낸다..그러나 이 과정에서 네트워크 지연이 생기게 되면?

분명 타이머의 형태이기에 이 타이머가 끝난 다음에 도착할 수도 있다. 바로 이 case를 말하는 것이다.

 

그래서! 타이머의 시간을 적당히 설정하는게 중요하다.

그 이유는 위에서 알 수 있듯

1, 2번에서는 너무 타이머가 길면 말 그대로 TCP Retransmission까지 걸리는 시간이 너무 길어지고,

반대로 타이머가 너무 짧으면 3번 현상이 너무 많이 일어나면서 정상적으로 도착한 경우에도 타이머가 만료되어

재전송을 하게 되기 때문이다.

 

그래서 Retransmission TimeOut (RTO)라는 것이 있다.

RTO는 위의 상황을 막기 위해 적절한 타이머 만료시간을 설정하는 것이다.

보통 운영체제 커널에 있으나, 네트워크 상황별로 유동적으로 변하게 된다.

 

물론! 굳이 타이머만 써야 하는건 아니다.

Triple Duplicate ACK라는 방법도 있다.

이걸 직역하면 3개의 복제된 ACK인데 정말 말 그대로다.

3개의 ACK를 받으면 재전송을 하는 방법으로, 시간 지연은 발생하지 않게 되고

수신자가 보낸 ACK가 타이머의 역할을 대신 하고 있기때문에 빠르게 재전송을 할 수 있는 것이다.

 

그리고 ACK를 줄이기 위해 효율적인 방법으로는 Delayed ACK, 즉 일정 시간만큼 기다렸다가 ACK를 보내는 것이다.

말 그대로 효율을 위한 것이기 때문에 딜레이된 시간동안 도착한 패킷이 있다면 Delayed ACK timeout을 다시 초기화하고, 그렇지 않으면 ACK를 보낸다. (Delay ACK timeout은 일반적으로 200ms)

 

 

'해킹보안 > Network' 카테고리의 다른 글

서브넷팅  (0) 2019.12.16
DHCP(Dynamic Host Configuration Protocol)이란?  (0) 2019.11.13
NAT(Network Address Translation)이란?  (0) 2019.11.13
SSL터널링  (0) 2019.09.10