TCP 세그먼트에는 오류 검출을 위한 "체크섬" 필드가 존재하지만, 이것만으로 신뢰성을 보장하기는 부족하다. "체크섬"은 세그먼트의 훼손 여부만 나타낼 뿐이고, "체크섬" 값이 잘못되었을 때 호스트는 해당 패킷을 읽지 않고 그냥 폐기하기 때문이다. 즉, "체크섬"을 이용해도 송신 측 호스트가 세그먼트 전송 과정에 문제 여부를 인지할 수 없다.
오류 검출 & 재전송
TCP가 신뢰성을 제대로 보장하기 위해서는
송신 측 호스트가 송신한 세그먼트에 문제가 발생했음을 인지
오류를 감지하면 해당 세그먼트를 재전송
TCP가 오류를 검출하고 해당 세그먼트를 재전송하는 상황
중복된 ACK 세그먼트를 수신
타임아웃 발생
송신 측 호스트가 중복된 ACK 세그먼트를 수신한 경우
송신 측 호스트는
세그먼트를 전송했지만 중간에 누락되어 수신 측 호스트에 전달이 되지 않은 상황에서
수신 측 호스트는
일정시간(RTT) 동안 수신이 없으니 다시 재요청을 보낸다.
RTT (Round Trip Time)은 메시지를 전송한 뒤에 해당 메시지에 대한 응답을 받는 데까지 걸리는 시간을 의미한다.
타임아웃이 발생한 경우
TCP 세그먼트를 송신하는 호스트는 모두 "재전송 타이머 (Retransmission Timer)"라는 값을 유지한다.
세그먼트를 전송할 때마다 재전송 타이머를 새로 시작하게 되는데
해당 재전송 타이머가 끝나는 것을 타임아웃이라고 부른다.
즉, 송신 측 호스트가 전달한 세그먼트에 대한 타임아웃이 발생할 때까지 해당 응답을 받지 못하면
세그먼트가 상태 호스트에게 정상적으로 도착하지 않았다고 간주하여 다시 재전송을 한다.
TCP의 재전송 기법으로
수신 호스트의 답변(ACK)과 타임아웃 발생을 기반으로 문제를 진단하고,
문제가 생긴 메시지를 재전송하여 신뢰성을 확보하는 방식인
"ARQ (자동 재전송 요구, Automatic Repeat Request)"가 있는데 여러 종류가 존재한다.
Stop-and-Wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ
해당 방법은
메시지를 제대로 전달했음을 확인하기 전까지는 새로운(다음) 메시지를 전달하지 않는 방식이다.
즉, 메시지를 송신하면 해당 응답을 받아야 다음 메시지를 송신하는 것을 반복하는 방법이다.
Stop-and-Wait ARQ방식은 단순하고, 높은 신뢰성을 보장하는 방식이지만, 전송에 대한 응답을 받아야 다음 전송을 진행하는 방식으로 송신 측 호스트는 응답을 받기 전까지는 다음 전송을 할 수 없다. 수신 측 호스트는 훨씬 많은 데이터를 한 번에 받을 수 있음에도 한 번에 하나씩만 확인 응답을 해야 해서 네트워크의 이용 효율이 낮아지고, 성능 저하로 이어질 수 있으므로, 요즘 잘 사용하지 않는 방식이다.
해당 방법은
Stop-and-Wait ARQ의 문제를 해결하기 위해
각 요청에 대한 응답을 받기 전에 다른 요청들도 보낼 수 있는 방식이다.
즉, "파이프라이닝" 기술을 사용한 방법이다.
파이프라이닝 (Pipelining)은 연속해서 메시지를 전송할 수 있는 기술을 의미한다.
파이프라이닝 방식을 활용하여 여러 세그먼트를 전송하고,
도중에 잘못 전송된 세그먼트가 발생하면 해당 세그먼트부터 다시 재전송한다.
이때 잘못 전송된 세그먼트 이후로 온 세그먼트는 올바르게 수신해도 전부 폐기한다.
즉 위 그림처럼
n+1번 세그먼트가 정상적으로 전송되지 않았으니 이후에 전달받은 n+2번 세그먼트를 폐기하여
n+1번부터 다시 재전송받는 방식이 된다.
해당 방법은
Go-Back-N ARQ처럼 "파이프라이닝"을 사용한 방식이지만
Go-Back-N ARQ에서 송신 과정에서 하나의 세그먼트에만 문제가 생겨도 그 후의 모든 세그먼트를
다시 재전송해야 하는 단점을 보완한 방법으로,
수신 측 호스트는 제대로 전송받은 패킷들은 모두 ACK 세그먼트를 보내는 방식이다.
그래서 각 세그먼트를 개별적으로 확인하고 응답하는 방식이다.
즉, 잘못 보낸 세그먼트만 재전송하는 방법이다.
요즘 TCP 통신에서는 대부분 Selective Repeat ARQ를 지원하여 해당 방식으로 동작하지만 만약 Selective Repeat ARQ를 사용하지 않을 경우 Go-Back-N ARQ 방식으로 동작된다.
TCP 세그먼트에는 오류 검출을 위한 "체크섬" 필드가 존재하지만, 이것만으로 신뢰성을 보장하기는 부족하다. "체크섬"은 세그먼트의 훼손 여부만 나타낼 뿐이고, "체크섬" 값이 잘못되었을 때 호스트는 해당 패킷을 읽지 않고 그냥 폐기하기 때문이다. 즉, "체크섬"을 이용해도 송신 측 호스트가 세그먼트 전송 과정에 문제 여부를 인지할 수 없다.
오류 검출 & 재전송
TCP가 신뢰성을 제대로 보장하기 위해서는
송신 측 호스트가 송신한 세그먼트에 문제가 발생했음을 인지
오류를 감지하면 해당 세그먼트를 재전송
TCP가 오류를 검출하고 해당 세그먼트를 재전송하는 상황
중복된 ACK 세그먼트를 수신
타임아웃 발생
송신 측 호스트가 중복된 ACK 세그먼트를 수신한 경우
송신 측 호스트는
세그먼트를 전송했지만 중간에 누락되어 수신 측 호스트에 전달이 되지 않은 상황에서
수신 측 호스트는
일정시간(RTT) 동안 수신이 없으니 다시 재요청을 보낸다.
RTT (Round Trip Time)은 메시지를 전송한 뒤에 해당 메시지에 대한 응답을 받는 데까지 걸리는 시간을 의미한다.
타임아웃이 발생한 경우
TCP 세그먼트를 송신하는 호스트는 모두 "재전송 타이머 (Retransmission Timer)"라는 값을 유지한다.
세그먼트를 전송할 때마다 재전송 타이머를 새로 시작하게 되는데
해당 재전송 타이머가 끝나는 것을 타임아웃이라고 부른다.
즉, 송신 측 호스트가 전달한 세그먼트에 대한 타임아웃이 발생할 때까지 해당 응답을 받지 못하면
세그먼트가 상태 호스트에게 정상적으로 도착하지 않았다고 간주하여 다시 재전송을 한다.
TCP의 재전송 기법으로
수신 호스트의 답변(ACK)과 타임아웃 발생을 기반으로 문제를 진단하고,
문제가 생긴 메시지를 재전송하여 신뢰성을 확보하는 방식인
"ARQ (자동 재전송 요구, Automatic Repeat Request)"가 있는데 여러 종류가 존재한다.
Stop-and-Wait ARQ
Go-Back-N ARQ
Selective Repeat ARQ
해당 방법은
메시지를 제대로 전달했음을 확인하기 전까지는 새로운(다음) 메시지를 전달하지 않는 방식이다.
즉, 메시지를 송신하면 해당 응답을 받아야 다음 메시지를 송신하는 것을 반복하는 방법이다.
Stop-and-Wait ARQ방식은 단순하고, 높은 신뢰성을 보장하는 방식이지만, 전송에 대한 응답을 받아야 다음 전송을 진행하는 방식으로 송신 측 호스트는 응답을 받기 전까지는 다음 전송을 할 수 없다. 수신 측 호스트는 훨씬 많은 데이터를 한 번에 받을 수 있음에도 한 번에 하나씩만 확인 응답을 해야 해서 네트워크의 이용 효율이 낮아지고, 성능 저하로 이어질 수 있으므로, 요즘 잘 사용하지 않는 방식이다.
해당 방법은
Stop-and-Wait ARQ의 문제를 해결하기 위해
각 요청에 대한 응답을 받기 전에 다른 요청들도 보낼 수 있는 방식이다.
즉, "파이프라이닝" 기술을 사용한 방법이다.
파이프라이닝 (Pipelining)은 연속해서 메시지를 전송할 수 있는 기술을 의미한다.
파이프라이닝 방식을 활용하여 여러 세그먼트를 전송하고,
도중에 잘못 전송된 세그먼트가 발생하면 해당 세그먼트부터 다시 재전송한다.
이때 잘못 전송된 세그먼트 이후로 온 세그먼트는 올바르게 수신해도 전부 폐기한다.
즉 위 그림처럼
n+1번 세그먼트가 정상적으로 전송되지 않았으니 이후에 전달받은 n+2번 세그먼트를 폐기하여
n+1번부터 다시 재전송받는 방식이 된다.
해당 방법은
Go-Back-N ARQ처럼 "파이프라이닝"을 사용한 방식이지만
Go-Back-N ARQ에서 송신 과정에서 하나의 세그먼트에만 문제가 생겨도 그 후의 모든 세그먼트를
다시 재전송해야 하는 단점을 보완한 방법으로,
수신 측 호스트는 제대로 전송받은 패킷들은 모두 ACK 세그먼트를 보내는 방식이다.
그래서 각 세그먼트를 개별적으로 확인하고 응답하는 방식이다.
즉, 잘못 보낸 세그먼트만 재전송하는 방법이다.
요즘 TCP 통신에서는 대부분 Selective Repeat ARQ를 지원하여 해당 방식으로 동작하지만 만약 Selective Repeat ARQ를 사용하지 않을 경우 Go-Back-N ARQ 방식으로 동작된다.