요약
- 1986년 10월, Lawrence Berkeley National Laboratory와 UC Berkeley를 잇는 짧은 경로의 유효 처리량은 32Kbps에서 40bps로 떨어졌다. 패킷은 여전히 이동했지만, 재전송 피드백이 네트워크가 새 데이터를 전달할 능력을 소모해 버린 것이다.
- Jacobson과 Karels, 그리고 협력자들은 ACK 클로킹, 슬로우 스타트, 개선된 타이머, 지수적 백오프, 혼잡 윈도우를 통해 송신자가 패킷 보존 원칙을 지키도록 4BSD TCP를 수리했다.
- RFC 1122는 이후 슬로우 스타트와 혼잡 회피를 TCP 호스트의 의무로 만들었다. 교훈은 규칙 부재가 아니었다. 소수의 공통 규칙이 공격적인 단말이 자신의 비용을 모두에게 전가하지 못하게 함으로써 분산 운영이 살아남을 수 있었다.
세 자릿수를 잃은 400미터 경로
1986년 10월, 약 400미터를 사이에 둔 두 기관이 인터넷 역사상 가장 가르침이 많은 실패의 양 끝단이 되었다. Van Jacobson과 Michael J. Karels는 나중에 Lawrence Berkeley National Laboratory에서 University of California, Berkeley까지 두 개의 IMP 홉을 거치는 데이터 처리량이 초당 32킬로비트에서 초당 40비트로 떨어졌다고 보고했다. 회선이 사라진 것도 아니고, 시스템들은 계속 전송하고 있었다. 다만 거의 모든 활동이 더 이상 유용하지 않게 된 것이다.
이 구분이 중요하다. 혼잡은 흔히 모두가 천천히 진행하는 붐비는 도로로 그려진다. 혼잡 붕괴는 더 이상했다. 네트워크는 바쁜 채로 있으면서 자신의 용량 중 극히 일부만을 새 데이터로 전달했다. 당시의 TCP 구현은 지연된 패킷을 손실된 것으로 오인할 수 있었다. 재전송된 사본은 이미 가득 찬 큐에 주입되었고, 그 사본은 지연과 손실을 늘려 다시 더 많은 재전송을 낳았다. 복구 기제가 정적 피드백이 된 것이다.
John Nagle은 이미 1984년 RFC 896에서 이 실패 양상을 기술하고 이를 지금까지 남은 이름으로 명명했다. 그 메모는 속도가 다른 회선들이 연결되는 순수 데이터그램 인터네트워크가 안정적인 붕괴 상태에 빠질 수 있다고 경고했다. 그것은 완성된 표준이 아니라 명시적으로 논의를 위한 초대장이었다. 진단은 Berkeley 사건 이전에 존재했고, 1986년의 경로가 제공한 것은 그 진단과 마주하게 되는 참을 수 없고 측정 가능한 사건이었다.
Jacobson과 Karels는 유행에 어울리지 않는 실용적 질문 두 개를 던졌다. 4.3BSD TCP 구현 자체가 잘못 작동하고 있는가? 그것을 절망적으로 나쁜 네트워크 조건에서도 작동하게 만들 수 있는가? 두 질문에 대한 발표된 답은 모두 예였다. 수리는 모든 트래픽에 대한 기관의 관할권이 필요하다는 주장이 아니라, 실제 작동하는 시스템에서 시작되었다.
전송이 늘어날수록 전달은 줄어든 이유
원래의 TCP 흐름 제어 윈도우는 수신자 쪽 질문에 답했다. 목적지 버퍼가 얼마나 많은 미확인 데이터를 받아들일 수 있는가? 그것은 다른 질문, 즉 송신자와 수신자 사이 경로가 지금 얼마나 실어 나를 수 있는가에는 답하지 않았다. 빠른 호스트는 따라서 훨씬 느린 장거리 회선을 가로질러 수신자가 광고한 전체 윈도우를 열고 첫 게이트웨이가 감당할 수 없는 버스트를 주입할 수 있었다.
부하가 가벼울 때는 조악한 타이머도 충분해 보일 수 있었다. 부하가 무거워지면 왕복 시간과 그 변동이 커졌다. 타임아웃 추정치가 그 변동을 따라가지 못하는 송신자는 단지 늦은 데이터를 재전송했다. 네트워크는 곧 희소한 대역폭을 중복 데이터 운송에 소모했다. Jacobson과 Karels는 이를 불에 휘발유를 붓는 일에 비유했다. 시스템이 유용한 작업으로 애쓰는 순간, 단말들이 그에게 더 쓸모없는 작업을 떠넘긴 것이다.
네 흐름 실험은 이 낭비를 드러냈다. 혼잡 회피가 없으면 11,000개의 전송 패킷 중 4,000개가 재전송이었다. 병목 회선은 초당 약 25KB를 실을 수 있었지만, 초당 6KB의 유효 용량이 사라졌다. 혼잡 회피를 적용하자 8,281개 패킷 중 단 89개, 약 1퍼센트만 재전송되었고 측정된 흐름들이 회선 용량을 온전히 차지했다. 이는 우아함에 대한 철학적 선호가 아니라 좋은 처리량(goodput)의 운영적 회복이었다.
패킷 보존 규칙
설계는 단순한 명제를 중심으로 조직되었다. 연결이 전체 윈도우를 네트워크에 띄운 균형 상태에 도달하면, 오래된 패킷 하나가 빠져나가기 전에는 새 패킷이 네트워크에 들어와서는 안 된다. 확인 응답(ACK)은 그 출발의 증거를 제공한다. 수신자는 데이터가 병목을 통과하는 속도보다 빠르게 확인 응답을 만들어 낼 수 없으므로, ACK 간격은 송신자에게 대략적인 시계를 돌려준다.
이 시계 덕분에 단말은 경로의 토폴로지를 알 필요도, 게이트웨이를 소유할 필요도, 중앙 할당자와 상의할 필요도 없이 적응할 수 있었다. 그러나 막 시작했거나 손실 후 재시작한 연결은 아직 시계가 없었다. 슬로우 스타트가 그 시계를 만들었다. 송신자는 작은 혼잡 윈도우로 시작해 확인 응답이 도착할 때마다 이를 넓혔다. 이름과 달리 윈도우는 왕복마다 지수적으로 열렸다. 절제는 수신자의 전체 허용량을 알 수 없는 경로에 한 번에 쏟아붓는 대신, 돌아오는 증거로 용량을 탐색하는 데 있었다.
타이머도 비슷한 규율을 필요로 했다. 평균 왕복 시간뿐 아니라 그 변동까지 추정하면 허위 타임아웃이 줄었다. 전달이 계속 실패하면 지수적 백오프가 반복 시도의 간격을 점점 더 벌렸다. 혼잡 회피는 이어서 두 번째 송신자 측 한도인 혼잡 윈도우를 더했다. 혼잡이 감지되면 구현된 정책은 그 윈도우를 곱셈적으로 줄였고, 새 확인 응답이 도착하면 덧셈적으로 늘렸다. 전송은 수신자가 광고한 윈도우와 혼잡 윈도우 중 작은 쪽으로 제한되었다.
어떤 단일 요소도 이야기를 독식해서는 안 된다. 1988년 논문은 Phil Karn과 연관된 작업, 수신자 ACK 정책, fast retransmit을 포함해 일곱 가지 변경이 4BSD TCP에 들어갔다고 말하며, 잘 알려진 슬로우 스타트와 윈도우 조절도 그 일부였다. 논문은 슬로우 스타트라는 이름을 John Nagle에게 돌리고, 그 윈도우 정책이 Raj Jain의 방식에서 영감을 받았다고 밝힌다. 역사적 성과는 홀로 영웅이 일광한 마법이 아니라 연결된 구현 프로그램과 측정된 제어 루프였다.
가장자리의 제어 루프
이 구조가 인상적인 이유는 주된 조정자가 송신자 안에 살았기 때문이다. 기존의 손실·타임아웃 신호를 그대로 사용할 수 있었으므로 모든 게이트웨이를 고칠 필요가 없었다. 독립적으로 운영되는 호스트들은 운영체제, 응용 프로그램, 경로, 상업 관계를 자유롭게 선택하면서도 같은 대응을 구현할 수 있었다. 공통 계층은 한 참여자의 선택이 공유 경로를 불안정하게 만들 수 있는 지점에서의 행동을 규정했다.
이것은 무관심으로서의 분산이 아니라 피드백을 갖춘 분산이었다. 송신자는 자신이 통제하지 못하는 결과를 관찰하고, 그것을 지역적 한도로 번역한 뒤, 조심스럽게 다시 시도했다. 네트워크 코어는 명령으로 모든 흐름을 스케줄링하지 않았다. 그렇다고 단말이 자신의 기계가 사적 관리 대상이라는 이유만으로 공유 자원의 상태를 무시할 권리를 받은 것도 아니었다.
작동하는 코드는 제도적 순서도 규율했다. 알고리즘은 4BSD TCP에 들어가, 부하 상태에서 추적되고 구현자들 사이에 돌아다녔다. 그 후에야 1989년 10월에 발표된 RFC 1122는 TCP가 슬로우 스타트와 혼잡 회피를 결합한 알고리즘을 "반드시(MUST)" 구현해야 한다고 명시했다. 연속적인 재전송 타임아웃에 대한 지수적 백오프도 요구했다. 명세는 수사로 권위를 만들어 낸 것이 아니라, 상호 운용하는 호스트들이 서로에게서 필요로 하는 실패 기제와 검증된 치료법을 인정한 것이다.
자유, 호혜, 그리고 공격적인 송신자
이 MUST는 자발적 협력에 대한 낭만적 서사를 복잡하게 만든다. 준수하는 TCP 구현은 이제 단지 절제를 고려해 보라는 초대를 받는 존재가 아니었다. 두터운 인터넷 거버넌스가 자주 그렇지 못한데 왜 여기서 명세 안의 강제는 정당했을까?
그 범위가 입증 가능한 공유 불변식에 묶여 있었기 때문이다. 물러서기를 거부하는 송신자는 그 결과를 자신의 네트워크 안에 가둬 두지 않는다. 공용 큐를 채우고, 대응적인 흐름의 손실을 늘리며, 다른 이들에게 절제를 비합리적으로 만든다. RFC 2914는 이후 그 결과적 위험을 기술했다. 공급자들이 더 공격적인 TCP를 더 빠른 것으로 팔 수 있고, 응용이 더 많은 병렬 연결을 열 수 있으며, 시스템이 만성 혼잡으로 되돌아가는 군비 경쟁에 빠질 수 있다는 것이다.
좁은 요구가 더 넓은 자유의 공간을 보호했다. 호스트는 그 위와 아래에서 혁신할 수 있고, 새로운 혼잡 알고리즘이 개발될 수 있고, 라우터가 신호를 추가할 수 있고, 운영자가 경로를 선택할 수 있었다. 합리적으로 요구할 수 없는 것은 유용한 서비스를 파괴하는 정적 피드백을 재현할 상호 운용성 권리였다. 이 맥락에서 호혜는 단말에 대한 정치적 명령이 아니라 병목을 함께 나누는 데 드는 기술적 대가였다.
단말 제어가 해결하지 못한 것
Jacobson과 Karels는 이 경계를 명확히 했다. 단말 알고리즘은 총 수요가 용량을 지속적으로 초과하지 못하게 할 수 있지만, 공정한 할당을 보장하지는 못한다. 게이트웨이는 흐름들이 수렴하는 것을 보므로 어떤 단일 송신자에게도 없는 정보를 가진다. 논문은 게이트웨이 혼잡 감지를 다음 주요 과제로 다뤘다.
이후의 작업은 능동적 큐 관리, 명시적 혼잡 통지(ECN), 수많은 대안적 혼잡 제어 알고리즘을 더했다. 손실이 항상 혼잡인 것은 아니며, 무선 오류, 거대한 대역폭-지연 곱, 새로운 응용 패턴을 지닌 경로는 원래 가정을 복잡하게 만든다. RFC 2914는 대응적인 종단 간 제어가 필요하더라도 모든 서비스와 공정성 문제에 충분하지는 않다고 분명히 했다.
이 한계는 역사적 교훈을 오히려 강화한다. 1988년의 수리는 모든 질문을 해결했다고 가장하지 않았다. 그럴 필요가 없었기 때문이다. 공유된 실패 기제를 분리하고, 가장 작은 효과적인 제어 표면을 바꾸고, 결과를 입증하고, 인접한 결정은 열어 두었다. 공통 규칙이 강력했던 것은 바로 특정적이었기 때문이다.
출처와 근거의 한계
핵심 측정치와 알고리즘 설명은 Jacobson과 Karels의Congestion Avoidance and Control에서 나오며,LBNL Network Research Group이 색인하고 있다. 더 이른 진단은RFC 896에, 1988년 호스트 확장의 맥락은RFC 1072에, 호스트 요구사항은RFC 1122에 있다. 이후 명세들은 계보와 한계를 밝힌다.RFC 2001,RFC 2914,RFC 5681이다. LBNL의당대 이메일 색인은 구현 논의를 기록하고 있다.
초당 32킬로비트에서 초당 40비트로의 수치는 일련의 붕괴 동안 기록된 한 경로를 묘사할 뿐, 모든 인터넷 회선의 인구조사가 아니다. 따라서 "인터넷을 구했다"는 너무 총체적 주장이 된다. 공로는 복수적으로 남아야 하며, 손실 기반의 1988년 기제를 혼잡 제어 연구의 끝으로 오해해서는 안 된다.
회원 브리핑
프로필 심층 컨텍스트
올바른 멤버십 등급으로 로그인하면 전체 브리핑과 출처 노트를 볼 수 있습니다.
Strategic Circle 전용
Strategic Circle
모든 독자에게 공개됩니다. 가입 후 로그인하면 프로필 브리핑를 열람할 수 있습니다.
Strategic Circle 가입하기Leadership Alliance 전용
Leadership Alliance
자격을 갖춘 IP 자산 소유자 및 운영진을 위한 콘텐츠입니다. 로그인하면 Leadership Alliance 브리핑을 열람할 수 있습니다.
Leadership Alliance 가입하기





