더북(TheBook)

흐름 제어를 통해 TCP가 느린 단말 호스트를 많은 데이터로 압도해 버리는 상황은 막을 수 있지만, 느린 네트워크나 라우터에 과부하가 걸리는 것은 어쩌지 못한다. 네트워크 체증이 발생하는 건 마치 고속도로 나들목이나 요금소에서 차가 막히는 것처럼, 패킷이 많이 거쳐 가는 라우터가 병목이 되는 경우에 흔하다. 불필요하게 네트워크 흐름이 한쪽으로 몰리는 것을 방지하고자, TCP엔 혼잡 제어(congestion control) 기법이 사용되는데, 이는 고속도로 진입로에 신호등을 두어 교통량을 통제하는 것과 유사하다. TCP 모듈은 혼잡을 줄이기 위해 ACK 없이 보낼 수 있는 데이터의 한도를 자발적으로 제한한다. 흐름 제어와 비슷한 듯하지만 수신 측의 윈도 크기에 따르는 것이 아니라, 송신자 자체적으로 패킷의 확인응답률 및 누락율을 집계하여 한도를 정하는 것이 차이점이다. 구체적인 알고리즘은 구현 내용에 따라 달라지지만, 대부분 합 증가/곱 감소22에서 파생된 기법을 사용한다. 이 방식에선 처음 연결을 맺을 때 TCP 모듈의 혼잡 임계치를 최대 세그먼트 길이의 낮은 배수 값으로 잡는데, 보통 두 배 정도로 한다. 이후 세그먼트의 ACK를 받을 때마다 임계치를 최대 세그먼트 길이 만큼 더해나간다. 망 속도가 무제한인 연결이 있다고 가정하면 매 왕복 주기마다 임계치에 육박하는 패킷과 ACK를 주고받으면서 임계치는 지속해서 두 배씩 늘어나게 된다. 그러나 만일 패킷이 하나라도 누락되면, TCP 모듈은 네트워크 혼잡을 우려하여 즉시 임계치를 절반으로 줄여버린다. 이런 식으로 조절해 나가면 점차 적절히 안정된 수치로 수렴하여, 체증으로 인해 패킷이 누락되지 않을 만큼의 적당한 빠르기로 패킷을 보낼 수 있게 된다.

 


 

22  역주 additive increase/multiplicative decrease, AIMD

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.