Telnet은 원격지 컴퓨터에 접속해서 터미널(명령어 입력창) 을 사용할 수 있게 해주는 텍스트 기반 통신 프로토콜이다.
[User Input] → [Telnet Client Process] → [TCP Packet 생성] →
→ [Network Stack 처리] → [패킷 전송] →
→ [Server Port 23에 도착] → [서버의 telnetd 프로세스] → [응답]
telnet <IP> <port> 입력 → telnet 클라이언트 프로세스 생성socket() 시스템 콜connect() 시스템 콜telnetd)가 있음accept() 시스템 콜사용자 입력
↓
telnet 클라이언트 프로세스
↓ (socket())
소켓 생성
↓ (connect())
TCP 연결 요청
↓
클라이언트 커널 네트워크 스택
↓
패킷 전송 → 서버 네트워크 수신
↓ (accept())
telnetd가 연결 수락
↓ (fork())
새 telnet 세션 프로세스 생성
↓
쉘 (/bin/sh) 실행 및 바인딩
↓
클라이언트와 명령어/출력 송수신 반복
비유:
이메일은 송신자가 작성한 메시지를 중간 서버(Mail Server) 를 거쳐, 내 메일 서버에 저장하고, 내가 클라이언트를 통해 꺼내보는 구조이다.
[보낸 사람 입력 → 메일 클라이언트]
↓ SMTP
[보낸 사람 메일 서버]
↓ DNS 조회 → 수신자 도메인의 MX 레코드 조회
[수신자 메일 서버]
↓ 저장
[내 이메일 클라이언트] ← IMAP 또는 POP3
↓
[받은 편지함에서 확인]
즉, 내가 이메일을 받을 수 있는 이유는:
1. 메일 주소 체계 덕분에 정확한 수신자 식별이 가능하고
2. DNS 시스템으로 메일 서버 위치를 찾고
3. 프로토콜로 통신하며
4. 메일 서버가 메일을 저장해두고 있기 때문에,
5. 내가 클라이언트를 통해 요청하면 응답해주는 구조이기 때문이야.
네트워크 어댑터(NIC)는 DMA(Direct Memory Access) 기능을 이용해 수신한 데이터를 CPU 개입 없이 메인 메모리로 직접 복사할 수 있다.
recv() 시스템 콜을 통해 데이터를 읽음[이더넷 프레임 도착]
↓
[NIC 하드웨어]
↓ (DMA)
[커널 공간의 수신 버퍼 (메인 메모리)]
↓ (Interrupt)
[운영체제에 알림]
↓ (recv())
[사용자 공간]
책에서 "네트워크 어댑터가 바이트를 복사한다"는 표현은 정확히 말하면,
NIC가 DMA를 사용해 커널 메모리 버퍼에 데이터를 복사하는 것을 의미한다.
[이더넷 프레임 도착]
↓
[NIC 하드웨어]
↓ DMA
[커널 메모리 내 수신 링버퍼]
↓ 인터럽트 또는 polling
[커널 네트워크 스택]
↓
[사용자 소켓 수신 버퍼]
링버퍼는 데이터 흐름을 끊기지 않게 유지하면서도, CPU 부담을 줄이고, 고속 입출력을 가능하게 하는 핵심 구조이다.
| 항목 | Polling | Interrupt |
|---|---|---|
| 동작 방식 | CPU가 상태를 계속 검사 | 디바이스가 CPU에게 알림 |
| CPU 사용 | 바쁨, 비효율 | 효율적, 필요할 때만 사용 |
| 반응 속도 | 즉각적 (계속 검사 중) | 다소 지연될 수 있음 |
| 예시 | 단순 키보드 입력, 타이머 | NIC, 디스크 I/O |
while (1) {
if (device_ready()) {
data = read_from_device();
}
}
[작업 중인 CPU]
↓
[디바이스: "데이터 도착!"] → interrupt 발생
↓
[커널의 interrupt handler 실행 → 데이터 처리]
Polling은 "왔어?"를 계속 묻는 방식, Interrupt는 "왔어!"라고 알려주는 방식이다.
| 구분 | Network Adapter | Network |
|---|---|---|
| 정의 | 컴퓨터에 장착된 네트워크 인터페이스 하드웨어 | 컴퓨터들이 연결된 전체 통신 구조 |
| 예시 | 이더넷 카드, Wi-Fi 모듈 (NIC) | LAN, WAN, 인터넷 등 |
| 역할 | 데이터 전기신호 ↔ 디지털로 변환 및 전송 | IP 기반 통신 경로, 라우팅, 주소 할당 등 담당 |
| 층위 | OSI 1~2계층 중심 (물리, 링크 계층) | OSI 3계층 이상 포함 (네트워크, 전송, 응용) |
| 위치 | 내 컴퓨터 내부 | 컴퓨터 간 외부 구조 |
[User Process 데이터]
↓
[소켓 → TCP/IP 스택]
↓
[Network Adapter (NIC)]
↓ 전송 (이더넷 프레임)
→ [Network: 라우터, 인터넷, ISP 등]
↓
[수신자 컴퓨터의 Network Adapter]
↓
[운영체제 → 소켓 → 사용자 공간 복사]
정리:
Telnet은 리모트 컴퓨터의 쉘(/bin/sh) 과 연결되는 터미널을 만들어주기 때문에,
명령어를 입력하면 그 명령어가 원격 컴퓨터에서 실행되고 결과가 다시 전송되는 구조이다.
telnet 192.168.0.10
→ 접속 후:
./hello
→ 이 경우 hello 프로그램은 192.168.0.10 컴퓨터에서 실행된다.
./hello\n)./hello)[내 입력: ./hello]
↓ (TCP)
[서버의 telnetd → fork → /bin/sh]
↓
[hello 실행 → 결과 출력]
↓ (stdout)
↓ (TCP 패킷)
[내 터미널 출력]
rm -rf /)내가 사용 중인 로컬 컴퓨터가 아닌, 네트워크를 통해 원격으로 접속하는 컴퓨터를 의미한다.
| 구분 | 로컬 컴퓨터 | 리모트 컴퓨터 |
|---|---|---|
| 위치 | 내가 사용하는 컴퓨터 | 물리적으로 떨어져 있음 |
| 조작 방식 | 직접 조작 (키보드/마우스) | Telnet, SSH, RDP 등으로 조작 |
| 예시 | 내 노트북, 데스크탑 | 회사 서버, 클라우드 서버, 사무실 컴퓨터 |
telnet 192.168.0.10
→ 여기서 192.168.0.10은 리모트 컴퓨터 (원격 접속 대상)
리모트 컴퓨터는 내 컴퓨터가 아닌, 네트워크로 연결된 다른 컴퓨터다.