사용자가 원격 컴퓨터에 로그온할 수 있도록 허용하는 범용 클라이언트-서버 프로그램이다
로그온한 후 사용자는 원격 시스템에서 사용할 수 있는 서비스를 사용하여 결과를 로컬 시스템으로 다시 전송할 수 있다
이 장에서는 TELNET 및 SSH라는 두 가지 응용 프로그램에 대해 설명한다
TELNET은 TERminal Network의 약자이다
ISO가 제안한 가상 터미널 서비스를 위한 표준 TCP/IP 프로토콜이다
TELNET을 사용하면 로컬 터미널이 원격 시스템에서 터미널로 표시되는 방식으로 원격 시스템에 대한 연결을 설정할 수 있다
TELNET은 범용 클라이언트-서버 응용 프로그램이다
멀리서 원격으로 쓰겠다!
사용자가 로컬 시스템에 로그인할 때 이를 로컬 로그인이라고 한다
사용자가 원격 시스템에 있는 응용 프로그램이나 유틸리티에 액세스하려는 경우 원격 로그인을 수행한다
여기에서 TELNET 클라이언트 및 서버 프로그램이 사용된다
원격 컴퓨터에 액세스하는 메커니즘은 복잡하다
이는 모든 컴퓨터와 운영 체제가 특수 문자 조합을 토큰으로 받아들이기 때문이다
예를 들어, DOS 운영 체제를 실행하는 컴퓨터의 파일 끝 토큰은 Ctrl+z인 반면 UNIX 운영 체제는 Ctrl+d이다
원격 컴퓨터에 액세스하려면 먼저 연결할 컴퓨터 유형을 알아야 하고 해당 컴퓨터에서 사용하는 특정 터미널 에뮬레이터도 설치해야한다
TELNET은 NVT(Network Virtual Terminal) 문자 집합이라는 범용 인터페이스를 정의하여 이 문제를 해결한다
이 인터페이스를 통해 클라이언트 TELNET은 로컬 터미널에서 오는 문자(데이터 또는 명령)를 NVT 형식으로 변환하여 네트워크에 전달한다
반면에 서버 TELNET은 NVT 형식의 데이터와 명령을 원격 컴퓨터에서 허용되는 형식으로 변환한다
NVT는 두 개의 문자 집합을 사용한다
하나는 데이터용이고 다른 하나는 제어용이다
둘 다 8비트이다
데이터의 경우 NVT는 일반적으로 NVT ASCII라고 하는 것을 사용한다
이것은 7개의 최하위 비트가 US ASCII와 동일하고 최상위 비트가 0인 8비트 문자 집합이다
컴퓨터 간에 control character를 보내기 위해 NVT는 최상위 비트가 1로 설정된 8비트 문자 집합을 사용한다
표는 일부 제어 문자와 그 의미이다
TELNET은 하나의 TCP 연결만 사용한다
서버는 well known 포트 23을 사용하고 클라이언트는 임시 포트를 사용한다
데이터와 제어 문자를 보내는 데 동일한 연결이 사용된다
TELNET은 데이터 스트림에 제어 문자를 포함하여 이를 수행한다
그러나 데이터를 제어 문자와 구별하기 위해 각 제어 문자 시퀀스 앞에는 IAC(Interpret as Control)라는 특수 제어 문자가 온다
여기서 cat은 화면에 파일 내용을 표시하는 Unix 명령이다
그러나 파일 이름이 잘못 입력되었다(file1 대신 filea)
사용자는 백스페이스 키를 사용하여 이 상황을 수정한다
그러나 TELNET의 기본 구현에서는 사용자가 로컬로 편집할 수 없다
편집은 원격 서버에서 수행된다
백스페이스 문자는 두 개의 원격 문자(IAC EC)로 변환되어 데이터에 포함되어 원격 서버로 전송된다
TELNET은 클라이언트와 서버가 서비스를 사용하기 전이나 사용하는 동안 옵션을 협상할 수 있다
옵션은 보다 정교한 터미널을 사용하는 사용자가 사용할 수 있는 추가 기능이다
옵션을 사용하려면 먼저 클라이언트와 서버 간의 옵션 협상이 필요하다
이를 위해 4개의 제어 문자가 사용된다
일부 옵션은 서버에서만 활성화할 수 있고, 일부는 클라이언트에서만, 일부는 두 곳 모두 활성화할 수 있다
offer 또는 request를 통해 옵션이 활성화된다
옵션을 활성화하도록 offer할 수 있다
offer는 상대방에 의해 승인되거나 승인되지 않을 수 있다
제안 당사자는 "옵션을 활성화할 것인가?"를 의미하는 WILL 명령을 보낸다
상대방은 "Please do"를 의미하는 DO 명령 또는 "Please do not"을 의미하는 DONT 명령을 보낸다
상대방에게 옵션 활성화를 request할 수 있다
request는 상대방이 수락하거나 거부할 수 있다
요청을 하려면 "옵션을 활성화하십시오"라는 의미의 DO 명령을 보낸다
상대방은 "I will"을 의미하는 WILL 명령이나 "I will not"을 의미하는 WONT 명령을 보낸다
활성화된 옵션은 비활성화할 수 있습니다. offer 또는 request를 통해 옵션이 비활성화된다
옵션을 비활성화하도록 offer 할 수 있다
상대방이 제안을 승인해야 한다
거절을 할 수 없다
제안하는 쪽은 "이 옵션을 더 이상 사용하지 않습니다."라는 의미의 WONT 명령을 보낸다
대답은 "더 이상 사용하지 마십시오"를 의미하는 DONT 명령이다
다른 당사자에게 옵션 비활성화를 request 할 수 있다
상대방은 요청을 수락해야 한다 거부할 수 없다
요청자는 "이 옵션을 더 이상 사용하지 마십시오."라는 의미의 DONT 명령을 보낸다
대답은 "더 이상 사용하지 않을 것"을 의미하는 WONT 명령이다
클라이언트는 서버가 서버로 보낸 각 문자를 에코하기를 원한다
즉, 사용자 키보드 단말기에 문자가 입력되면 서버로 이동하여 처리되기 전에 사용자의 화면으로 다시 전송된다
echo 옵션은 문자를 사용자 터미널로 다시 보내는 서버이기 때문에 서버에 의해 활성화된다
따라서 클라이언트는 DO를 사용하여 옵션을 활성화하도록 서버에 요청해야 한다
요청은 IAC, DO 및 ECHO의 세 가지 문자로 구성된다
서버가 요청을 수락하고 옵션을 활성화한다
IAC, WILL 및 ECHO의 3자 승인을 전송하여 클라이언트에 알린다
옵션 협상을 통해 다른 모드가 호출되지 않으면 default 모드가 사용된다
이 모드에서 에코는 클라이언트에 의해 수행된다
사용자가 문자를 입력하면 클라이언트가 화면(또는 프린터)에 문자를 표시하지만 전체 행이 완료될 때까지 문자를 보내지 않는다
전체 라인을 서버로 보낸 후 클라이언트는 사용자로부터 새 라인을 수락하기 전에 서버의 GA(진행) 명령을 기다린다
클라이언트와 서버는 터미널 유형과 터미널 속도를 협상하고 서버는 사용자의 로그인과 암호를 확인한다
입력된 각 문자는 클라이언트에서 서버로 전송된다
서버는 일반적으로 클라이언트 화면에 표시할 문자를 다시 echo한다
이 모드에서 전송 시간이 긴 경우 문자의 echo가 지연될 수 있다
클라이언트가 character mode로 전환하는 방법이다
이를 위해서는 클라이언트가 서버에 SUPPRESS GO AHEAD 및 ECHO 옵션을 활성화하도록 요청해야 한다
또 다른 원격 로그인 응용 프로그램은 SSH(Secure Shell)이다
TELNET과 마찬가지로 SSH는 기본 전송 프로토콜로 TCP를 사용하지만 SSH는 TELNET보다 더 안전하고 더 많은 서비스를 제공한다