TCP 통신이란?
연결지향적인 양방항 통신
한눈에 보기
흐름제어는 송신측과 수신측 사이의 데이터 처리 속도 차이
를 해결하기 위한 기법입니다.
송신 측의 전송량이 수신측의 처리량보다 클 경우, 패킷이 수신 측의 큐를 넘어 손실될 수 있어서 송신측 패킷 전송량을 제어해줘야 하기 위한 것이죠! (손실 문제)
정지-대기 (stop and wait)
빠름
과 정확함
인데...Sliding Window (Go Back N ARQ)
그래서 Sliding Window 기법이 필요합니다.
수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답 없이 세그먼트를 전송할 수 있게 해서 데이터 흐름을 동적
으로 조절합니다.
송신 측은 ACK 라는 프레임을 받게 되면 ACK 프레임에 따른 프레임의 수 만큼 오른쪽으로 경계가 확장되는 겁니다!
윈도우란?
수신, 송신 양쪽에서 만들어진 버퍼의 크기
ARQ란?
Automatic Repeat Request(자동 반복 요청)으로 에러가 발생한 경우 재전송을 요구합니다. Sliding Window의 경우 일정 시간 이상 응답(ACK)가 돌아오지 않으면 송신 측에서 데이터를 재전송합니다.
이름 그대로 네트워크 혼잡을 피하기 위해 송신 측에서 보내는 데이터의 전송 속도를 제어하는 것입니다.(혼잡 문제)
송신 측 데이터 전달과 네트워크 데이터 처리 속도 차이를 해결하기 위한 기법으로 한 라우터에 데이터가 몰려서 모든 데이터를 처리할 수 없는 상황
에 이르렀을 때, 호스트들은 계속해서 재전송을 하고 결과적으로 혼잡만 가중시켜 오버플로우나 데이터 손실이 발생하는 위험을 해결하기 위한 것입니다!
이 중 1번과 2번은 TCP의 필수 요소입니다. 다만 수신된 ACK들에 대응해 cwnd(congestion window) 크기를 얼마나 증가시키냐는 것이 서로 다릅니다. 3번은 TCP 송신자들에게는 필수 사항은 아닙니다.
cwnd 란?
혼잡 윈도우는 TCP 송신자가 네트워크로 트래픽을 전송할 수 있는 비율을 제한합니다.
특히 송신하는 쪽에서 확인응답이 안된 데이터의 양은 cwnd 와 rwnd의 최솟값을 초과하지 않습니다.
한번 혼잡 현상이 발생하고 나면 혼잡 현상이 발생했던 cwnd 의 절반까지는 이전처럼 증가시키다가 그 이후부터는 완만하게 1씩 증가시킵니다.
즉, 임계 값(ssthresh, slow start threshold)을 절반으로 줄입니다.
매 전송마다 2배씩 증가하기 때문에 데이터의 크기가 지수함수적으로 증가합니다.
파악한 임계 값에 도달하기 전까지 2배씩 증가, 임계값 도달 시 혼잡 회피 단계로 넘어갑니다.
😜추가 지식
- 혼잡 현상 : 네트워크 내에 패킷의 수가 과도하게 증가하는 현상
- 임계 값 : 혼잡을 감지하는 최대값. 초기엔 최대 윈도우의 반으로 설정
윈도우 크기가 임계 값에 도달한 이후에는 데이터의 손실이 발생할 크기가 올라갑니다.
이를 회피하기 위해 cwnd 크기를 전송 시마다 1 씩 증가시킵니다.
수신 측으로부터 일정 시간동안 ACK 를 받지 못하면, 타임 아웃이 발생해 cwnd 크기를 1로 줄입니다.
동시에 임계 값을 패킷 손실이 발생했을 때의 cwnd 크기의 1/2로 줄입니다.
😜추가 지식
- AIMD(Additive Increase / Multiplicative Decrease)
- 처음에 패킷을 하나씩 보내고 문제없이 도착하면 윈도우의 크기를 1씩 증가시켜가며 전송한다.
- 만약 전송에 실패하면 윈도우 크기를 반으로 줄인다.
- 윈도우 크기를 너무 조금씩 늘리기 때문에 네트워크의 모든 대역을 활용하여 제대로 된 속도로 통신하기까지 시간이 오래 걸린다.
- 호스트가 하나의 네트워크를 공유하고 있으면 나중에 진입하는 쪽이 불리하지만 시간이 지날수록 평형 상태로 수렴한다.
먼저 도착
해도 ACK 를 보냅니다.해당 사이트의 내용을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.
느리더라도 꾸준하게
이누의 개발성장기
개발자를 꿈꾸는 프로그래머
Tech Interview
순간이 영원해 지는 곳
TCP Congestion Control TCP 혼잡제어
즐거운 블로그
최신 트랜드와 지식창고
minsu.log