요약

  • 1989년 2월의 RFC 1090은 SMTP 세션마다 양방향 X.25 가상 회선을 하나 열어 대화를 나누고 종료 뒤 해제하는 방식을 제안했다.
  • X.25 회선 해제는 아직 이동 중인 패킷을 버릴 수 있었다. 호출한 쪽은 보통 QUIT에 따른 SMTP 서비스 종료 응답을 받은 다음 회선을 닫았다.

마지막 봉투는 아직 책상 사이에 있었다

1982년의 RFC 821은 X.25 공중 데이터망으로 SMTP를 보낼 가능성을 살폈다. 부록 D는 X.25 위에 TCP 같은 신뢰할 수 있는 종단 간 프로토콜을 놓으라고 제안했다. 7년 뒤 R. Ullmann은 RFC 1090에서 가상 회선을 곧바로 쓰는 절차를 제시했다. 문서에는 22개국 24개 공중 패킷 데이터망에서 운영에 사용했다는 저자의 보고가 담겼다. 겨우 몇 쪽짜리 문서가 종료 시간까지 꼼꼼히 적은 까닭은 그 회선을 실제로 열고 기다리는 사람이 있었기 때문이다.

운영 그림은 단순하다. SMTP 세션 하나에 가상 회선 하나를 열고, 양방향 통로로 명령과 응답, 메일 데이터를 교환한다. 끝나면 보통 호출한 쪽이 회선을 해제한다. SMTP는 익숙한 문법으로 말하지만 아래의 회선은 다른 방식으로 문을 닫는다. 그 차이가 마지막 패킷을 위험하게 만들었다.

RFC 1090은 X.25 해제 요청이 시작되면 이동 중 데이터가 동기적으로 전달되지 않고 버려질 수 있다고 적었다. 발신자가 마지막 바이트를 내보낸 직후 회선을 끊으면, 그 바이트가 상대에게 닿기 전에 바닥이 사라진다. 그래서 호출자는 QUIT 뒤 SMTP의 Service Closing 응답을 기다리고 가상 회선을 지운다. 옆 책상에 마지막 봉투가 도착했는지 대답을 듣고 나서야 우편실 불을 끄는 셈이다.

메일 교환에는 서로 다른 확인 시점이 있다. 메시지 데이터 뒤의 SMTP 응답은 그 거래에 관한 서비스의 답이다. Service Closing은 세션의 마침표다. X.25 해제는 대화를 실은 통로를 없애는 행위다. 수신 시스템이 그 뒤 메일을 어떻게 처리하는지는 다음 단계의 일이다. RFC 1090이 다룬 경계는 서비스의 마지막 말과 통로의 철거 사이였다. 회선 스위치를 가진 쪽은 상대편의 신호를 먼저 받아야 했다.

회선이 열릴 때도 표지가 필요했다. Call User Data 앞의 네 옥텟에 16진수 C0F70000을 프로토콜 식별자로 넣으라고 권했다. 동시에 목적지 주소별로 이 식별자를 포함한 호출 데이터를 설정할 수 있어야 한다고 했다. 공통 표지는 유지하되 각 X.25 망에 맞는 출입 절차를 마련한 것이다.

회선 안에서 SMTP 바이트열을 패킷으로 어떻게 자를지는 송신자가 선택했다. 문서는 ‘뒤에 데이터가 더 있다’는 M 비트를 쓴 연속 패킷을 장려했고 그 전체 길이는 최대 2,048바이트로 제시했다. 명령이나 응답 하나를 패킷 하나 또는 연속된 한 묶음에 넣으라는 권고는 장애 추적 기록을 읽기 쉽게 만들기 위한 것이었다. Q 비트가 켜진 한정 데이터 패킷과 인터럽트 패킷은 쓰지 않으며 받더라도 무시한다. 문자는 8비트 ASCII, 줄 끝은 CRLF를 썼고 가능한 경우 LF만 있는 줄도 인식하도록 했다.

세 번째 계층에서 회선 재설정이 오면 현재 가상 회선을 해제하고 SMTP 연결을 다시 시도한다. 잠시 뒤 재시도하거나 다른 호출 시설을 사용할 수도 있다. 시설 설정은 목적지 주소별로 가능해야 했다. 끊긴 통화의 마지막 말을 새 통화가 자동으로 이어받는 일은 없다. 회선과 인사부터 다시 시작한다.

기다림에도 끝은 있다. RFC는 호출 수락에 100초, 이어지는 Service Ready 인사에 추가 120초를 주었다. 성립된 세션에서 10분간 답이 없으면 해제할 수 있었다. QUIT 뒤에는 20초로 줄었다. 이 마지막 끝맺음이 매끈하지 않을 때도 있지만, 문서는 완료된 SMTP 거래에는 영향이 없다고 설명했다. 저자가 전한 운영 경험의 숫자들은 상대에게 말할 시간을 주면서 회선을 무기한 붙잡지 않기 위한 시계였다.

RFC 1090의 장면을 하나만 고르면 스위치 위에 머무는 손이다. 호출자는 회선을 열고 대개 직접 닫는다. 닫아도 될 시각은 멀리 있는 서비스가 답으로 알려 준다. 메일은 두 끝이 대화의 끝을 확인한 뒤에야 안전하게 회선을 떠났다.