텔넷은 인터넷이나 로컬 영역 네트워크에 연결에 쓰이는 네트워크 프로토콜입니다.
윈도우와 같은 운영체제에서 기본적으로 제공하는 프로토콜로 23번 포트를 사용합니다.
이러한 텔넷을 사용하면 네트워크에 있는 컴퓨터를 자신의 컴퓨터처럼 파일 전송, 파일 생성, 디렉토리 생성등을 자유롭게 할 수 있습니다.
요즘에는 보안문제로 사용률이 감소하고 원격 제어를 위해 SSH로 대체되고 있습니다.
텔넷은 TCP/IP 기반의 프로토콜입니다.
텔넷은 일종의 터미널 에뮬레이션 프로토콜로 NVT(Network Virtual Terminal)라고 불리는 가상 터미널의 개념을 사용합니다.
NVT란?
- 텔넷 프로토콜의 가장 기본으로 접속하고자 하는 원격지 시스템과 로컬 시스템의 버전이 상이할 경우 데이터 형식이 다르므로 원활한 통신을 위해 데이터를 변환시켜주는 가상장치이다.
- NVT는 기본적인 터미널 제어 문자를 정의한다.
remote terminal = cmd를 통해 telnet 접속 요청을 하는 PC
local terminal = PC가 연결해야 하는 서버
1) remte terminal에서 터미널 드라이버를 통해서 텔넷 클라이언트에 접속을 한다.
2) TCP 연결설정을 통해서 텔넷 클라이언트와 텔넷 서버가 연결이 된다.
3) 텔넷 서버의 가상터미널드라이버가 활성화 된다.
4) 텔넷의 동작환경 협상을 통하여 기본적인 텔넷 설정을 한다.
5) 텔넷 서버는 login 정보를 클라이언트에게 요청하고, 클라이언트는 로그인을 한다.
6) remote terminal쪽에서 메시지를 보내면 TCP를 통해서 서버에게 전달이 된다.
7) 서버는 받은 메시지를 다시 TCP를 통해서 remote terminal에게 전달한다.
왜 서버는 다시 클라이언트에게 메시지를 보내는가?
과거의 네트워크는 신뢰성이 낮았기 때문에, 이에따라 메시지를 보냈으면 그 메시지가 잘 전달 됐는지를 확인하는 작업이 있었다.
- remote echo만 활성화된 경우에는 서버를통해서 클라이언트에 A가 출력이된다.
- local echo와 remote echo가 모두 활성화된 경우에는 클라이언트에서 A입력시 터미널에 A가 나타나고, 서버 쪽에서도 A를 보내어 터미널에 AA가 나타난다.
- local echo만 활성화된 경우 A입력시에 터미널에 A가 출력이 된다.
텔넷에는 위 사진과 같이 많은 옵션들이 존재합니다.
그래서 위와 같은 옵션에 대한 협상을 위하여 IAC(Interpret as command) 메시지를 보냅니다.
WILL의 경우에는 자신에대한 옵션이며, DO의 경우에는 상대에 대한 옵션입니다.
옵션 전송시의 NVT 문자 조합 형식
옵션교환의 예 : terminal type
위의 사진에서IAC
SB
는 시작을 나타내고IAC
SE
는 끝을 나타낸다. 그리고24
는 옵션의 번호이고,1
은 teminaltype을 요청하는 번호이다.
기본모드
사용자가 입력한 문자들이 단말 내부 버퍼에 저장된 후 화면에 echo, 이후 Go Ahead 명령을 수신한 경우에만 서버측으로 버퍼에 저장된 내용을 송신한다.
비효율적, 거의 사용 안됨
localecho모드를 통해서 버퍼에 저장시에 입력이 출력된다.
그상태에서 대기를 하다가 서버로부터 Go Ahead 메시지를 받게되면 버퍼에 내용을 서버에게 전달한다.
문자모드
문자가 입력될 때 마다 즉시 문자단위 전송, 서버는 리모트 에코하여 사용자의 모니터에 출력되도록 함
telnet의 기본 동작 모드
클라이언트는 입력이 들어오면 바로 서버에게 입력을 전달한다.
localecho는 하지않고 remote echo만을 한다.
라인모드
라인모드를 설정한다.
remote echo를 하지 않게끔 설정한다.
local echo는 하므로 입력을 통해 입력내용은 버퍼에 저장하고 클라이언트에 출력된다.
Enter가 입력되면 서버에게 메시지를 전송한다.
*기본모드와의 차이점 : 라인모드는 서버의 GoAhead를 받는것이 아니라 Enter를통해서 메시지를 전송한다.
파일 전송을 위한 TCP/IP 기반의 프로토콜이다.
active open의 경우에는 명령을 받아야만 활성화가 되는 부분으로, 메시지를 보낼 때 사용 한다.
passive open은 항상 활성화 되어 있으면서 메시지 받는 것을 대기한다.
control connection은 명령을 보내는 세션이다.
data connection은 파일을 보내는 세션이다.
FTP 프로토콜은 특이하게 두개의 세션을 연결한다.
이렇게 했던 이유는 control connection과 data connection을 나누기 위해서였다.
왜?
파일의 크기가 큰 경우에 control과 관련된 명령이 늦게 실행이 되는 일이 생겨났다. 그래서 파일을 보내는 세션과 command를 보내는 세션 두개를 만들어 주게 됐다.
PORT [IP][포트번호] = 4*256+15
옆과 같은 형식으로 나온 포트연결 메시지가
PORT 200.0.0.100.4.15
이다. 여기서 256은 메모리에서의 base register처럼 우리가 사용 할 수 있는 포트를 지정해주기 위하여 넣어주는 부분으로 보인다.
위와 같은 연결 메시지를 통하여 클라이언트는 서버에게 자신(클라이언트)의 passive open 포트를 알려준다.
그에 따라서 서버는 먼저 패킷메시지가 온 port에 자신(서버)의 passive open 포트와 control connection을 맺는다.
그리고 아까 받은 passive port와 연결을 하기 위하여 TCP프로토콜에 SYN flag를 1로 설정하여 클라이언트에게 보내준다.
위에서 봤던 텔넷처럼 FTP또한 다양한 운영체제에 호환이 가능하게끔 FTP 서버 프로세스에서 명령어를 해석하여 이를 서버 운영체제에 맞게끔 명령어를 전달해준다.
FTP 명령어
정리 잘해주셔서 감사해요! 잘 보고 가요😁