Summary

  • RFC 970은 무한 저장 공간, 선입선출, 유한한 패킷 수명, 두 개 이상의 스위치가 결합하면 지속적인 과부하에서 모든 패킷이 버려질 수 있다고 분석했다.
  • Ethernet에서 9600보드 회선으로 보낸 실험에서는 IP 데이터그램 916개가 정점에 쌓였다. TCP가 예측한 최종 상태보다 먼저 시간 초과돼, 전량 폐기 상태를 실측하지는 못했다.

창고를 무한히 넓혀도 출구가 넓어지는 것은 아니다. 패킷은 회선이 내보낼 수 있는 속도보다 빨리 도착하고, 기다리는 동안 수명이 줄어든다. John Nagle이 1985년 12월 RFC 970에 적은 조건에서는 첫 스위치가 수명 한 단위만 남은 패킷을 내보낸다. 다음 스위치가 그 한 단위를 빼면 패킷은 폐기된다. 보관은 성공했다. 배송은 실패했다.

당시 패킷 스위치의 혼잡은 버퍼 고갈로 설명되기 쉬웠다. Nagle은 저장 용량을 무한대로 놓고 선입선출 대기열, 유한한 수명, 최소 두 개의 스위치와 계속되는 초과 유입을 남겼다. 전량 폐기는 이 조건에서 나온 계산 결과다. 1985년 인터넷 전체에서 실제로 일어난 사건이라는 뜻은 아니다.

문서의 수치 예시는 규모가 한정돼 있다. 초당 56킬로비트 회선 네 개에 최대 수명 15초를 적용하면, Nagle의 계산에서 필요한 대기 공간 상한은 420킬로바이트다. 그 사례에서는 버퍼 부족으로 인한 손실을 막을 수 있다. 그러나 다음 스위치에 도착할 때까지 패킷을 살아 있게 만들지는 못한다. 당시 설명은 수명을 남은 초 단위로 취급했다. 오늘날의 홉 수 개념을 그대로 대입하면 원래 계산을 바꾸는 셈이다.

실험은 다른 경계를 보여 줬다. 수 메가바이트 메모리가 달린 스위치를 Ethernet과 9600보드 회선 사이에 놓았을 때 대기열은 IP 데이터그램 916개까지 늘었다. 왕복 지연이 커져 TCP 연결이 먼저 시간 초과됐다. 대기열은 수명으로 제한되는 이론적 정상 상태에 도달하지 못했다. 관측된 것은 긴 대기열과 연결 실패다. 모든 패킷이 다음 스위치에서 버려지는 장면은 관측되지 않았다.

결국 쟁점은 누가 먼저 회선을 쓰느냐다. 하나의 선입선출 줄에 패킷을 많이 밀어 넣는 호스트는 자리를 더 많이 차지하고 전송 기회도 더 얻을 수 있다. Nagle은 발신 호스트마다 별도 대기열을 두고, 비어 있지 않은 각 줄에서 유효한 패킷 하나씩 번갈아 보내자고 했다. 한 호스트가 더 보내도 차례는 늘지 않고 자기 줄의 기다림만 길어진다. 각 호스트 대기열이 약 두 개를 넘으면 Source Quench로 감속을 알리자는 제안도 있었다. 이는 당시의 설계 제안이지 현재 모든 네트워크의 운용 관행을 뜻하지 않는다.

허점도 명확하다. 발신 주소를 여러 개로 위장하면 한 행위자가 여러 몫을 가져갈 수 있다. 한 스위치의 공정함이 네트워크 전체의 공정함을 보장하지도 않는다. Nagle은 빠른 근거리망에서 제한된 원거리 회선으로 들어가는 입구나 병목을 적합한 장소로 봤다. RFC 공식 기록과 원문 첫머리는 이 문서를 토론을 위한 메모로 다룬다. 기억해야 할 권력은 메모리 구매가 아니라 다음 전송 차례를 정하는 규칙에 있었다.

Sources