술술
로그인
술술
로그인
[혼자 공부하는 네트워크] 4-3 TCP의 오류, 흐름, 혼잡 제어
술술
·
2024년 9월 9일
팔로우
0
0
혼자 공부하는 네트워크
목록 보기
12/18
오류 제어: 재전송 기법
TCP는 잘못된 세그먼트를 재전송
오류 검출과 재전송
체크섬은 신뢰성을 보장하기는 부족
세그먼트의 훼손 여부만 나타낼 뿐이고, 체크섬 값이 잘못되었다면 호스트는 해당 패킷을 읽지 않고 폐기
송신 호스트가 세그먼트 전송 과정에 문제가 있다는 것을 인지할 수 없음
TCP가 신뢰성을 보장하려면
송신 호스트가 송신한 세그먼트에 문제가 발생했음을 인지
오류를 감지하게 되면(세그먼트가 잘못 전송되었음을 알게 되면) 해당 세그먼트를 재전송
TCP가 오류를 검출하고 세그먼트를 재전송하는 상황
중복된 ACK 세그먼트를 수신했을 때
타임아웃 발생했을 때
1. 중복된 ACK 세그먼트를 수신했을 때
만일 수신 호스트 측이 받은 세그먼트의 순서 번호 중에서 일부가 누락되었다면 중복된 ACK 세그먼트를 전송
오류 X
오류 O
RTT(Round Trip Time)
: 메시지를 전송한 뒤 그에 대한 답변을 받는 데까지 걸리는 시간
2. 타임아웃이 발생했을 때
TCP 세그먼트를 송신하는 호스트는 모두
재전송 타이머(retransmission timer
)라는 값을 유지
타임아웃(timeout)
: 호스트가 세그먼트를 전송할 때마다 재전송 타이머를 시작, 이 타이머의 카운트다운이 끝난 상황
타임아웃이 발생할 때까지 ACK 세그먼트를 받지 못하면 세그먼트가 상대 호스트에게 정상적으로 도착하지 않았다고 간주하여 세그먼트를 재전송
ARQ: 재전송 기법
ARQ(Automatic Repeat Request)
: 자동 재전송 요구
수신 호스트의 답변(ACK)과 타임아웃 발생을 토대로 문제를 진단하고, 문제가 생긴 메시지를 재전송함으로써 신뢰성을 확보하는 방식
Stop-and-Wait ARQ, Go-Back-N ARQ, Selective Repeat ARQ
Stop-and-Wait ARQ
제대로 전달했음을 확인하기 전까지는 새로운 메시지를 보내지 않는 방식
메시지를 송신하고, 이에 대한 확인 응답을 받고, 다시 메시지를 송신하고, 이에 대한 확인 응답을 받는 것을 반복
단순하지만, 높은 신뢰성 보장
네트워크의 이용 효율이 낮아질 수 있음
Go-Back-N ARQ
파이프라이닝(pipelining)
: 연속해서 메시지를 전송할 수 있는 기술
파이프라이닝 방식을 활용해 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생할 경우 해당 세그먼트부터 전부 다시 전송하는 방식
순서 번호 n번에 대한 ACK 세그먼트는 n번까지의 확인 응답 →
누적 확인 응답(CACK, Cumulative Acknowledgement)
오류 X
오류 O
빠른 재전송(fast retransmit)
: 재전송 타이머가 만료되기 전이라도 세 번의 ACK 세그먼트가 수신되었다면 해당 세그먼트를 곧바로 재전송하는 기능
Selective Repeat ARQ
선택적으로 재전송하는 방법
수신 호스트 측에서 제대로 전송받은 각각의 패킷들에 대해 ACK 세그먼트를 보내는 방식
개별 확인 응답(Selective Acknowledgement)
송신 호스트는 올바르게 수신받지 못한 ACK 세그먼트가 있는지 검사하고, 만일 응답받지 못한 세그먼트가 존재한다면 해당 세그먼트를 재전송
대부분 호스트가 지원하지만 만약 지원하지 않는다면 Go-Back-N ARQ 방식으로 동작
지원 여부는 TCP 세그먼트 헤더의 옵션 필드에 속한 SACK(Selective Acknowledgement) 허용 필드를 통해 알 수 있음
흐름 제어: 슬라이딩 윈도우
TCP의 흐름 제어란 송신 호스트가 수신 호스트의 처리 속도를 고려하며 송수신 속도를 균일하게 유지하는 것
수신 버퍼
: 수신된 세그먼트가 애플리케이션 프로세스에 의해 읽히기 전에 임시로 저장되는 공간
버퍼 오버플로(buffer overflow)
: 버퍼가 넘치는 문제 상황
윈도우
: 송신 호스트가 파이프라이닝 할 수 있는 최대량
윈도우의 크기만큼 확인 응답을 받지 않고도 한 번에 전송 가능하다
수신 호스트는 TCP 헤더(윈도우 필드)를 통해 송신 호스트에게 자신이 받아들이고자 하는 데이터의 양을 알림
슬라이딩 윈도우(sliding window)
: 파이프라이닝 과정에서 송수신 윈도우는 점차 오른쪽으로 미끄러지듯이 움직이게 됨
혼잡 제어
혼잡(congestion): 많은 트래픽으로 인해 패킷의 처리 속도가 늦어지거나 유실될 우려가 있는 네트워크 상황을 의미
모든 호스트가 라우터에게 전송 가능한 최대의 양으로 세그먼트를 전송하면 라우터에 과부하가 생겨 모든 정보를 한 번에 처리하지 못할 수 있다
흐름 제어의 주체가 수신 호스트라면
혼잡 제어의 주체는 송신 호스트
혼잡 윈도우(CWND, Congestion WiNDow)
: 혼잡 없이 전송할 수 있을 법한 데이터 양
혼잡 윈도우의 크기는 송신 호스트가 어느 정도의 세그먼트를 전송해야 혼잡을 방지할 수 있는지를 직접 계산하여 알아내야 함
혼잡 제어 알고리즘
AIMD(Additive Increase/Multiplicative Decrease)
합으로 증가, 곱으로 감소
혼잡이 감지되지 않는다면 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가
혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨리는 동작을 반복
혼잡 윈도우는 톱니 모양으로 변화
AIMD 방식은 처음 연결이 수립된 뒤 혼잡 윈도우 크기가 증가되는 속도가 느림
선형적으로 혼잡 윈도우를 증가시켜서 초기 전송 속도가 확보되지 않는다
느린 시작 알고리즘
혼잡 윈도우를 1부터 시작해 문제없이 수신된 ACK 세그먼트 하나 당 1씩 증가시키는 방식
결과적으로 혼잡 윈도우는 RTT마다 2배씩 지수적으로 증가
혼잡 윈도우의 지수적인 증가를 활용해 초기 전송 속도를 어느 정도 빠르게 확보 가능
혼잡 윈도우를 언제까지나 지수적으로 증가시킬 수는 없다. 언젠가는 혼잡 상황을 마주할 확률이 높아지기 때문
느린 시작 임계치(SSTHRESH, Slow Start THRESHold)라는 값이 정해져 있음
혼잡 윈도우 값이 계속 증가하다가 느린 시작 임계치 이상이 되거나, 타임아웃이 발생하거나, 세 번의 중복된 ACK 세그먼트가 발생하여 혼잡이 감지되면 다음 3개 방법 중 하나 선택
혼잡 회피 알고리즘
RTT마다 혼잡 윈도우를 1 MSS(Maximum Segment Size)씩 증가시키는 알고리즘
혼잡 윈도우의 크기를 선형적으로 증가
느린 시작 임계치를 넘어선 시점부터는 혼잡이 발생할 우려가 있으니 조심해서 혼잡 윈도우를 증가시키는 방식
혼잡 회피 도중 타임아웃이 발생하면 혼잡 윈도우 값은 1로, 느린 시작 임계치는 혼잡이 감지된 시점의 혼잡 윈도우 값의 절반으로 초기화 한 뒤 다시 느린 시작 수행
혼잡 회피 도중 3번의 중복 ACK 세그먼트가 발생되었을 때는 혼잡 윈도우 값과 느린 시작 임계치를 대략 절반으로 떨어뜨린 뒤 빠른 회복 알고리즘을 수행
타임아웃이 발생한 세그먼트나 3번의 중복 ACK 세그먼트가 발생한 세그먼트는 재전송
빠른 회복 알고리즘
세 번의 중복 ACK 세그먼트를 수신했을 때 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘
빠른 회복 도중이라도 타임아웃이 발생하면 혼잡 윈도우의 크기는 1로, 느린 시작 임계치는 혼잡이 감지된 시점의 절반으로 떨어뜨린 후 다시 느린 시작 수행
술술
Hello
팔로우
이전 포스트
[혼자 공부하는 네트워크] 4-2 TCP와 UDP
다음 포스트
[혼자 공부하는 네트워크] 5-1 DNS와 자원
0개의 댓글
댓글 작성
관련 채용 정보