TCP 오류제어

개요

개념 TCP/IP 전송계층에서  종단간 사용자들의 신뢰성 있는 데이터 송수신을 위해 손실, 오류, 순서 문제를 제어하는 기능 (단위 : 세그먼트(Segment))
특징 오류검출 손상(checksum), 손실(sequence number & ack number), 시간초과(Time-Over)
오류정정 기본(Go-back-n(Cumulative ACK)), 옵션(selective repeat ARQ(Selective ACK))

 

오류제어 과정


훼손/손실
세그먼트 재전송
확인세그먼트
손실과 누적확인

1401은 사라졌지만 1601이 1600번까지는 다 받았음을 알려줌!

 

오류제어 요소

수신확인 - 수신측이 체크섬(Checksum) 계산을 통해 데이터 세그먼트 손상 여부 확인, 정상일 경우 ACK 통지
- 송신측이 ACK를 통해 정상 수신 확인
누적 수신 확인
(Cumulative)
- 송신측은 확인 세그먼트를 통해 수신측이 (확인번호 - 1)번째 바이트까지 누적하였음을 확인
재전송 - 재전송 조건 (언제 다시 보낼지에 대한 기준)
• RTO(Retransmission Time Out) 만료 : 일정시간 ACK안오면 재전송함, 일반적 재전송
• 3 Duplicate ACK’s 수신 : 같은 ACK 3번연속 수신
(같은 (ACK = 다음 받고싶은 번호)를 여러 번 보낸다는 건 “어디까지는 잘 받았는데, 그 다음 게 안 왔다”는 뜻)

 

TCP/IP 오류제어 고려사항

고려사항 내용
재전송 타이머 값 설정 - 지나치게 짧은 타이머 값의 설정은 정상전달중인 데이터 세그먼트에 대한 재전송 초래
- 지나치게 긴 타이머 값의 설정은 대기 시간 증가로 전체적인 지연시간 상승 초래
- 일반적으로 재전송 타이머 값은 2 × RTT로 설정
RTT 계산 - 이전 RTT를 많이 반영하고, 현재 RTT를 조금 반영하여 부드럽게 평균을 내는 방식이 필요

슬라이딩 윈도우 (Sliding Window)

개요

개념

수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK)없이 전송할 수 있게 하여 흐름을 동적으로 조절하는 제어 알고리즘
특징 ① 윈도우 크기만큼 ② ACK 수신여부에 따라 오른쪽 이동

 

슬라이딩 윈도우 구성 요소

구성요소 설명
윈도우 ACK를 받지 않아도 즉시 전송이 가능한 데이터
윈도우 열림 동작 수신측으로 부터 ACK가 동작하여, 윈도우의 오른쪽 경계가 오른쪽으로 이동
(ACK가 오면 “앞부분은 잘 받았으니 다음 것도 보내도 됨으로 오른쪽으로 이동)
윈도우의 닫힘동작 데이터(바이트)가 전송되어, 윈도우의 왼쪽 경계가 오른쪽으로 이동함
(이미 끝난 데이터는 창문 범위에서 빼버리고 윈도우 경계가 오른쪽으로 이동)
윈도우 크기 RWND(수신측윈도우)와 CWND(혼잡윈도우) 중 작은 값으로 결정
• RWND(상대가 받을수 있는 양) : ACK를 포함하고 있는 세그먼트를 사용하여 상대방에게 알려줌
• CWND(네트워크가 감당할 수 있는양) : 혼잡상태가 발생하지 않도록 네트워크에서 결정하는 값
- 수신 윈도우 크기가 증가하면 송신측 윈도우 크기도 증가
- 수신 버퍼가 가득찰 경우 수신 윈도우 크기는 0이 됨
- 송신 프로세스는 수신윈도우의 크기가 0이 아닐 때까지 전송불가

 

슬라이딩 윈도우 문제점 Silly Window Syndrome 및 해결방안

 

가. Silly Window Syndrome 설명

구분 내용
개념 • 슬라이딩 윈도우 동작 시 송수신의 낮은 데이터 생성, 소비 속도로 인한 효율 감소 현상
(너무 조금씩 보내서 비효율이 심해지는 현상)
유형 송신 측 Syndrome 송신 응용프로그램이 Data를 1byte(또는 적은 Data)씩 생성
수신 측 Syndrome 수신 응용프로그램이 Data를 1byte(또는 적은 Data)씩 소비

나. Silly Window Syndrome 해결방안

구분 해결방안 설명
송신 측
Syndrome 해결
Nagle’s Algorithm 첫 발생 데이터는 세그먼트 생성/전송하고 이후는 최대크기 세그먼트 구성시까지 전송 보류
(첫데이터는 그냥 보내고 조금씩 생겨도 바로바로 보내지 말자)
수신 측
Syndrome 해결
Clark’s Solution •최소공간 확보 전엔  rwnd: 0 으로 응답(송신 방지), 확인응답 전송 지연
(조금 비었다고 바로 보내라고 하지 말자)

 

 


TCP 혼잡제어

개요

개념 네트워크 내 패킷 수가 과도하게 증가하는 혼잡(Congestion) 현상 발생 시 전송패킷수를 낮추어 혼잡을 제어하는 알고리즘 수행기술
개념도

처음 전송량 작다가 Slow Start( 네트워크 괜찮은지 보면서 빠르게 증가)
> 
ssthresh 도달 (이제 위험할 수 있으니 조심)> Congestion Avoidance(혼잡회피: 천천히 증가)
> 
손실 발생(혼잡 신호 감지)> Fast Retransmit(손실 패킷 재전송)> 전송량 감소(혼잡 완화 위해 줄임)
> 다시 증가(Fast Recovery)  * Tahoe는 거의 처음부터, Reno는 절반 수준에서 회복

 

절차 및 상세설명

 

구분 설명
Slow Start - 송신측에서 패킷을 전송하는 비율과 수신측이 받은  ACK를 통해 지수의 크기로 증가시키는 기법
- 처음 연결 설정 시 CWND값은 1로 초기화 하여 세그먼트 전송후 ACK을 수신하면 2,4,8,16개로 CWND를 임계값까지 증가함
(처음에는 적게 보내다가, 괜찮으면 1,2,4,8...빠르게 늘리는 방식)
Congestion Avoidance - 일정시간동안 ACK가 수신되지 않거나 일정수의 중복ACK가 수신되면 송신측은 패킷손실을 인지하고, Congestion Avoidance 상태가 됨
(임계값(ssthresh)에 도달하면 선형적으로 증가)
Fast Retransmit - 연속된 Duplicate ACK를 수신하는 경우 TCP는 해당 Segment를 즉시 다시 전송함
(보통 중복 ACK 3번이상 오면 손실로 보고 그 세그먼트를 바로 재전송)
Fast Recovery - Fast Retransmit 이후 새로 Slow Start를 통해서 설정된 연결의 안정상태에 도달할 필요없이 Congestion Avoidance 상태에서 전송할 수 있도록 하는 것
(손실이 나도 처음부터 다시 시작하지 않고, Congestion Avoidance 뒤에서 다시 이어가는 방식)

 

+ Recent posts