본문 바로가기
CS/정보통신망

TCP/IP 응용 계층, 웹서비스 HTTP, HTTPS, SSH 동작 방식, FTP, SMTP, POP3

by Renechoi 2024. 5. 18.

1. 응용 계층 

 

 

 

1) 응용 계층 개요 

 

응용 계층은 TCP/IP의 최상위 계층으로, OSI 참조 모델의 세션 계층과 표현 계층을 포함한다. 컴퓨터에서 웹 사이트에 접속할 때 필요한 프로토콜과 프로그램을 지원한다. 흔히 사용되는 응용 계층의 프로그램으로는 웹 브라우저, 이메일 클라이언트, FTP 클라이언트 등이 있다. 이러한 프로그램들은 서비스를 요청하는 클라이언트와 서비스를 제공하는 서버로 나뉜다. 응용 계층의 프로토콜은 클라이언트와 서버 간에 데이터를 주고받기 위해 사용된다.

2) 응용 계층 프로토콜의 종류 

응용 계층 프로토콜은 다양한 서비스를 제공하며, 웹 사이트 접속, 파일 전송, 이메일 송수신, 원격 접속 등의 기능을 지원한다. 주요 프로토콜로는 HTTP, FTP, SMTP, POP3, IMAP, TELNET 등이 있으며, 각 프로토콜은 특정 서비스에 맞춰 설계되었다. TCP와 UDP를 기반으로 작동하며, 서비스의 특성에 따라 프로토콜이 결정된다. 예를 들어, HTTP와 FTP는 TCP를 사용하고, DNS와 SNMP는 UDP를 사용한다. 응용 계층 프로토콜은 특정 포트 번호를 사용하여 네트워크 상에서 통신하며, 포트 번호는 IP 주소에서 프로그램 상호 구분을 위한 번호이다.

 

- HTTP: 80
- FTP: 21
- SMTP: 25
- POP3: 110
- IMAP: 143
- TELNET: 23
- DNS: 53
- DHCP: 67, 68
- SNMP: 161

 

 

 

 

📌 응용 계층 프로토콜과 포트 번호

 

 

 

2. 웹서비스 

1989년 팀 버너스리가 개발한 WWW(Word Wide Web: 웹)는 보편적인 인터넷 서비스로 확대되었다. 

 

웹은 TCP/IP에 의해 동작하며, 응용계층의 HTTP 프로토콜을 사용한다. HTTP는 주로 HTML 문서를 전송하며, 비연결성(stateless)과 연결성(connectionless)을 특징으로 한다.

 

1) HTTP 프로토콜 

HTTP 개념 

- HTTP(Hyper Text Transfer Protocol)는 간단한 프로토콜이다.
- 웹을 사용하는 클라이언트가 사이트 정보를 요청하는 것에 대해 서버가 응답하는 방식으로 작동한다.
- 클라이언트는 HTML 파일 등 정보를 얻고 싶은 파일의 URL(Uniform Resource Locator) 등의 요청 정보를 전송한다.
- 서버는 해당 정보를 받아 데이터를 반환한다.
- 반환되는 정보는 MIME(Multipurpose Internet Mail Extensions)의 정의에 의한 데이터 속성과 서버 종류 같은 헤더 정보와 함께 요청받은 데이터를 반환한다.
- 서버에서는 특별한 처리를 하지 않고, 해당 데이터(정보)를 받는 클라이언트에서 처리한다.
- 즉, HTTP는 간단한 프로토콜로, 요청된 데이터의 데이터 속성(정적 이미지, 텍스트 등) 등을 헤더로 붙여 돌려준다.

 

HTTP 특징

- 무상태(Stateless)와 비연결성(Connectionless)
  - 모든 요청과 응답은 이전의 것들과는 상관없이 독립적으로 이루어진다.
  - 모든 트랜잭션(transaction)이 단 한 번의 응답과 요청 사이클을 가지며, 이 사이클이 끝나면 연결이 끊긴다.
- 요청에 필요한 모든 정보를 처음부터 보내야 한다.
- 불특정 다수를 대상으로 하는 서비스에 적합하다.
- 무상태의 단점을 보완하기 위해 쿠키, 세션, 로컬 스토리지를 사용하여 이전의 상태를 짧은 기간에서 반영구적으로 기억할 수 있게 할 수도 있다.

 

HTTP 메시지 형식

- HTTP에서는 정보에 대한 요청 메시지와 응답 메시지로 구분된다.

 


- 요청 메시지와 응답 메시지의 구조는 서로 비슷하며, 다음과 같은 요소로 구성된다.
  - 요청(상태) 라인
  - 헤더
  - 공백 라인(필수)
  - 메시지 보디(message body)


- 요청 라인에서는 GET /search?q=hello&hl=ko HTTP/1.1과 같이 세 가지가 사용된다.
  - method: HTTP 메소드(GET: 요청)
  - request-target: 요청 대상(/search?q=hello&hl=ko)
  - HTTP version

 


- HTTP 메소드는 GET, POST, PUT, DELETE의 종류를 가지며, 서버가 수행해야 할 동작을 지정한다.
  - GET은 리소스 조회
  - POST는 요청 내역 처리
  - Request-Target은 요청 대상의 경로를 말하며, 절대경로는 "/"로 시작하는 경로이다.
  - HTTP Version은 HTTP의 버전(1.1)을 의미한다.


- 요청 라인(메소드 URI HTTP 버전)
  - 헤더
  - 공백 라인
  - 메시지 보디 (요청 메시지)


- 상태 라인(HTTP 버전 응답 코드 상태)
  - 헤더
  - 공백 라인
  - 메시지 보디 (응답 메시지)


- 헤더에는 요청에 대한 메타 정보를 담고 있으며, name:value 쌍으로 구성된다.
  - Host: 요청이 전송되는 호스트 정보(예: knou.ac.kr)
  - User-Agent: 요청을 보내는 클라이언트의 정보(웹 브라우저의 버전 등)
  - Accept: 해당 요청이 받을 수 있는 응답 타입
  - Connection: 해당 요청이 끝난 후에 클라이언트와 서버가 계속해서 네트워크 접속을 유지할 것인지 아닌지에 대해 지시
  - Content-Type: 해당 요청이 보내는 메시지 보디의 타입(예: application/json)
  - Content-Length: 메시지 보디의 길이


- 엔터티 본문에는 해당 요청/응답의 실제 메시지/내용이 들어 있다.

 

 

 

 

 

 

2) HTTPS 프로토콜 

HTTPS 개념

- HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)는 HTTP의 보안이 강화된 버전이다.

- HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발한 넷스케이프 웹 프로토콜로, 전자 상거래에 널리 쓰이며, 점차 많은 사이트에 적용되고 있다.
- HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장한다. HTTPS의 기본 TCP/IP 포트는 443이다. HTTPS를 사용하는 웹페이지의 URI는 'http://' 대신 'https://'로 시작한다.

 


HTTPS 보안키

 

- 대칭키 사용 방법은 암호화와 복호화에 쓰이는 키가 같은 보안 방법이다. 만약 클라이언트와 서버가 대칭키를 통해 통신한다면 클라이언트와 서버가 모두 공유키를 가지고 있어야 한다.
공개키 사용 방법은 공개키와 개인키를 함께 사용하는 보안 방법이다. 암호화할 때는 공개키를 사용하고 복호화할 때는 개인키를 사용한다. 클라이언트에서 공개키를 사용하여 암호화한 데이터를 서버에 보내면 서버는 해당 공개키로 암호화된 데이터를 복호화할 수 있는 개인키로 복호화한다.
- SSL을 적용하려면 인증서가 필요하다. 인증서는 서비스의 정보와 서버 측의 공개키가 포함되어 있다. 이를 발급해 주는 기업을 CA(Certificate Authority)라고 하며 브라우저는 CA 리스트를 미리 가지고 있다. 브라우저는 해당 CA가 리스트에 있는지 확인한 후에 리스트에 있다면 해당 CA의 공개키를 이용해서 인증서를 복호화한다.

 


HTTPS 동작 방식

- HTTPS는 대칭키와 공개키를 모두 사용하며 데이터 전송을 위해 대칭키 방식을 사용하고 대칭키를 안전하게 전달하기 위해 공개키를 사용한다.

 

다음은 HTTPS의 동작 과정을 나타낸다.

 

 

 


  - Client hello: 웹 브라우저마다 지원하는 암호화 알고리즘과 SSL 버전이 다르기 때문에 해당 정보를 전송하고, 클라이언트가 생성한 랜덤 데이터를 전송한다.
  - Server Hello: 사용할 SSL 버전과 암호화 알고리즘, 서버가 생성한 랜덤 데이터를 전송한다.
  - Certificate: CA로부터 발급받은 인증서를 전송한다.
  - Server Key Exchange: 키 교환에 필요한 정보를 전송한다.
  - Certificate Request: 서버가 클라이언트를 인증해야 할 때 인증서를 요구하고 이에 대해 클라이언트는 서버에 전송한다.
  - Client Key Exchange, Change Cipher Spec: 1번과 2번 과정에서 생성한 랜덤 데이터를 조합하여 pre master secret key를 생성하여 대칭키로 사용한다.
  - Change Cipher Spec: 클라이언트로부터 전송받은 pre master secret key를 복호화한 후에 master key(대칭키)로 승격 후 보안 파라미터를 적용하거나 변경될 때 보내는 과정이다.

 

 

3. 파일 전송 서비스 

 

1) 파일 전송 서비스 개요 

- 파일 전송 서비스는 클라이언트와 서버 사이에 파일 전송을 위한 서비스이다.
- 이러한 파일 전송 서비스에는 FTP, SFTP 등이 있다.
- FTP(File Transfer Protocol)는 TCP/IP를 통해 파일을 전송하기 위한 프로토콜로 인터넷에서 많은 사람과 파일을 공유하는 가장 일반적인 방법이다.
- 최근 들어 HTTP 프로토콜을 통해 일반 문자를 비롯하여 사진, 음악, 동영상 콘텐츠까지 간편히 이용하고, 클라우드 서비스, 웹 하드 서비스 등으로 파일 전송을 해결하고 있어 FTP 사용은 줄어들고 있다.

 

 

2) FTP 프로토콜 


- FTP는 웹 서비스와 마찬가지로 FTP 서버와 FTP 클라이언트 간에 접속을 하고, 파일을 전송하는 과정을 거친다.
- FTP 클라이언트는 FTP 프로그램을 통해 21번 포트를 이용하여 FTP 서버 프로그램에 접속한다.
- 21번 포트는 파일 전송을 제어하기 위한 신호를 주고받는다.
- 접속이 승인되면 20번 포트를 통해 실제 파일 전송을 한다.
- FTP의 실제 파일 전송 과정에서는 능동 모드와 수동 모드를 지원한다.

 

 

 

 

FTP의 능동 모드 및 수동 모드 설명**

📌 능동 모드 (Active Mode)
- 설명: 능동 모드에서는 클라이언트가 서버의 명령 포트(21번 포트)에 접속하고, 서버가 데이터 포트(20번 포트)를 사용하여 클라이언트에게 데이터를 전송한다. 클라이언트는 데이터 전송을 위해 자신의 포트를 열고 서버에 해당 포트를 알린다.
- 동작 과정:
  1. 클라이언트 -> 서버: 클라이언트가 FTP 서버의 21번 포트로 접속한 후 사용할 두 번째 포트를 서버에 알린다.
  2. 서버 -> 클라이언트: 서버는 클라이언트의 요청에 대해 ACK(응답 문자)로 응답한다.
  3. 서버 -> 클라이언트: 서버는 클라이언트가 알린 두 번째 포트로 접속한다.
  4. 클라이언트 -> 서버: 클라이언트는 ACK로 응답한다.
- 특징:
  - 서버가 클라이언트의 데이터 포트로 접속을 시도하므로, 클라이언트 측의 방화벽이나 NAT(Network Address Translation) 설정에 따라 문제가 발생할 수 있다.
  - 클라이언트는 서버에 데이터 포트를 알려주어야 한다.

 

 

 

 

① 클라이언트가 FTP 서버의 21번 포트로 접속한다.
② 서버는 클라이언트의 요청에 대해 ACK(응답 문자)로 응답한다.
③ 서버는 클라이언트가 알려준 두 번째 포트로 접속한다.
④ 클라이언트는 ACK로 응답한다.

 

 



📌 수동 모드 (Passive Mode)
- 설명: 수동 모드에서는 클라이언트가 데이터 전송을 위해 서버에 접속 요청을 하고, 서버가 사용할 임의의 데이터 포트를 클라이언트에게 알려준다. 클라이언트는 이 포트로 데이터를 전송한다. 이 모드는 주로 클라이언트 측의 방화벽 문제를 해결하기 위해 사용된다.
- 동작 과정:
  1. 클라이언트 -> 서버: 클라이언트는 FTP 서버의 21번 포트로 접속한다.
  2. 서버 -> 클라이언트: 서버는 클라이언트가 사용할 두 번째 포트를 알려준다.
  3. 클라이언트 -> 서버: 클라이언트는 다른 포트를 열어 서버가 알린 포트로 접속한다.
  4. 서버 -> 클라이언트: 서버는 ACK로 응답한다.
- 특징:
  - 클라이언트가 서버의 데이터 포트로 접속하므로, 클라이언트 측의 방화벽 설정에 영향을 받지 않는다.
  - 서버는 클라이언트에게 데이터 전송을 위한 포트를 알려준다.

 

 

 

① 클라이언트가 FTP 서버의 21번 포트로 접속한다.
② 서버는 클라이언트가 사용할 두 번째 포트를 알려준다.
③ 클라이언트는 서버가 알려준 포트로 접속한다.
④ 서버는 ACK로 응답한다.


능동 모드에서는 서버가 클라이언트의 포트로 접속을 시도하는 반면, 수동 모드에서는 클라이언트가 서버의 포트로 접속을 시도하여 방화벽 문제를 해결한다.

 

 

3) SFTP 프로토콜 

- SFTP(SSH File Transfer Protocol)는 SSH 파일 전송 프로토콜로서 신뢰할 수 있는 데이터 흐름을 통해 파일 접근, 파일 전송, 파일 관리를 제공
- SSH(Secure Shell)를 기반으로 동작하기 때문에 SSH 버전 2.0의 확장으로 설계
- SFTP는 하나의 연결만 필요하고, 데이터 연결이 필요하지 않아 연결이 안전하게 보호되며, 프로토콜이 제공하는 파일 잠금, 속성 조작, 권한 작업 등의 기능이 포함
- 반면, SSH 키의 유효성 검사나 관리가 복잡해지고, 소프트웨어 간 호환성이 문제
- 또한 서버 간 복사 외에 재귀 디렉토리에 대한 제거 작업을 제공하지 않는다.

 

 

 

 

4. 원격 전송 서비스 

1) TELNET 프로토콜

- TELNET(텔넷)은 TCP/IP에서의 응용 계층 프로토콜 중 하나로 원격지의 컴퓨터를 이용하는 가장 단말 기능을 실현하기 위한 프로토콜
- 텔넷은 프로토콜이기도 하지만, 클라이언트 일부 기능이 추가된 소프트웨어로도 사용
- 텔넷 클라이언트는 주로 유닉스 시스템에서 사용되었지만, 실제로 모든 플랫폼에서 사용
- 텔넷을 사용하기 위해서는 23번 포트 번호를 이용하고, 사용자 아이디와 패스워드를 가지고 있어야 함

 

2) TELNET 동작 방식

- 텔넷은 일종의 터미널 에뮬레이션 프로토콜로 NVT(Network Virtual Terminal)라는 가상 터미널 개념을 사용
- NVT는 텔넷 프로토콜의 가장 기본으로 접속하고자 하는 서버 시스템과 로컬 시스템의 버전이 상이할 경우 데이터를 변환
- 텔넷은 NVT를 통해 접속을 시도하며, 접속 서버의 배너 정보를 리턴받고, 접속 계정 요청에 따라 계정과 패스워드를 입력함으로써 접속된다.
- 텔넷 동작 과정
  1. 클라이언트는 원격 로그인 명령을 통해 서버 시스템에 TCP 연결을 한다(23번 포트).
  2. 서버 시스템은 연결된 클라이언트에게 가상의 터미널을 제공한다.
  3. 클라이언트는 실제 터미널인 것처럼 서버 시스템에 명령을 실행한다.
  4. 서버 시스템은 클라이언트의 명령을 수행하여 결과를 다시 클라이언트에게 전송한다.

 

 

3) SSH 프로토콜 


- SSH(Secure SHell)는 서버(원격지 호스트)에 접속하기 위해 사용되는 인터넷 프로토콜
- 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 크므로 암호화를 추가해서 나온 것이 SSH
- SSH는 강력한 인증 방법과 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공하며, 23번 포트 번호를 사용
- SSH는 rsh, rcp, rlogin, rexe, telnet, ftp 등의 서비스를 안전하게 사용하도록 제공


4) SSH 동작 방식

 

- SSH 작동의 핵심은 키(Key)이다. 클라이언트와 서버는 각각의 키를 보유하고 있으며, 이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고받는다.
- SSH 키는 공개키(public key)와 개인키(private key)로 이루어진다. 일반적으로 서버(SSH Server)에서 키를 생성하면 공개키와 개인키가 만들어지며, 개인키는 서버에 두고 공개키는 클라이언트(SSH 클라이언트)에 두게 된다.
- 클라이언트가 SSH를 통해 접속을 시도하면 SSH 클라이언트가 자신의 공개키와 서버의 개인키를 비교해서 둘이 일치하는지를 확인한다.

 

 



(1) 서버 인증 및 세션 키 생성
- 접속하려는 서버가 올바른 서버인지 검증하고, 이후의 데이터 통신을 안전하게 진행하기 위한 세션 키를 생성하는 과정이다.
  ① 접속 요청을 받은 서버는 클라이언트에게 자신의 공개키를 전송한다.
  ② 최초 접속이라면 서버로부터 전달받은 공개키를 로컬에 저장할 것인지 확인한다.
  ③ 동일하다면 해당 공개키가 클라이언트 측 홈 디렉토리의 .ssh/known_hosts 파일 안에 추가된다.
  ④ 이후부터는 해당 서버에 접속 요청을 할 때마다 서버에서 전달받은 공개키가 로컬에 저장된 공개키와 같은 것인지 검증하며, 같다면 올바른 서버로 판단한다.
  ⑤ 이 과정에서 데이터 통신 시 암호화 및 복호화를 위해 사용될 대칭키(세션키)가 생성된다.

(2) 클라이언트 인증
- 클라이언트가 해당 서버에 대한 올바른 접근 권한을 가졌는지 검증하는 과정이다. 클라이언트 인증에는 패스워드 인증과 SSH 공개키 인증이 있으며, 패스워드 인증은 보안상 권장하지 않는다.
  ① 클라이언트는 해당 서버에 접속하기 위해 Key Pair의 ID를 서버에 전송한다.
  ② 서버는 해당 ID에 매칭되는 공개키가 홈 디렉토리의 .ssh/authorized_keys 파일 안에 작성되어 있는지 찾는다.
  ③ 존재한다면, 난수값을 생성하고 이를 해당 공개키로 암호화하여 클라이언트에 전송한다.
  ④ 클라이언트는 전달받은 암호화된 난수값을 해당 개인키로 복호화한다.
  ⑤ 이후 복호화한 난수값을 이용하여 MD5 해시값을 계산하고, 이를 다시 서버에 전송한다.
  ⑥ 서버도 생성했던 난수값을 이용하여 MD5 해시값을 계산하고, 클라이언트로부터 받은 값과 같은지 검사한다.
  ⑦ 같다면, 올바른 클라이언트임이 인증되어 본격적인 데이터 통신이 가능해진다.

 

 

 

 

5. 메일 서비스 

1) 메일 서비스 개요

 

- 메일 서비스는 메일 주소를 이용하여 인터넷을 통해 이메일을 주고받을 수 있도록 서비스를 제공하는 것이다.
- 이메일 시스템은 TCP/IP 환경 전인 대형컴퓨터(메인프레임)에서 사용되었다.
- 사용자마다 모두 편지함을 하나씩 가지고 있고, 한 편지함에서 다른 편지함으로 이동하는 방식으로 전달하였다.
- 같은 컴퓨터(메인프레임) 내에 있는 사용자끼리만 메일이 전달되고, 다른 컴퓨터 사용자에게는 메일을 보낼 수 없었다.
- TCP/IP 기술이 개발된 후 전 세계적으로 이메일을 사용할 수 있게 되었다.

 

2) 메일 관련 프로토콜

- 이메일의 특징은 메일 사용자 간 이메일을 전달하는 프로토콜과 사용자의 로컬 호스트에 도착한 이메일을 읽을 수 있게 하는 프로토콜이 구분되어 있다는 것이다.
- 상대에게 직접 이메일을 보낼 때 상대가 인터넷에 접속하지 않은 상태라도 전달할 수 있게 한다.
- 로컬 호스트(사용자의 PC 등)가 인터넷에 연결되어 있지 않더라도 이메일을 전달받을 수 있도록 송신용과 수신용 프로토콜을 나누어 관리한다.
- 메일 서비스를 위해서는 SMTP, POP3, IMAP 등 크게 세 가지 프로토콜이 사용된다.
  - SMTP: 메일을 송신할 때 사용하는 프로토콜로, TCP/IP 호스트 사이의 메일을 전달할 때 사용된다.
  - POP3: 메일을 수신받을 때 사용하는 프로토콜로, 로컬에서 메일을 수정, 삭제해도 메일 서버에는 변화가 없다.
  - IMAP: 메일을 전송받을 때 사용하는 또 하나의 프로토콜로, POP3의 단점인 비동기성을 보완하기 위한 방식이다. 이는 로컬과 메일 서버 데이터를 동기화하는 방식으로 사용한다.

 



- 기본 메일 서버의 동작 구조는 다음과 같다.
  1. csknou.ac.kr 사용자가 메일 서버에 MUA(Mail User Agent)로 작성된 편지를 SMTP를 이용하여 발송한다(메일 내용에는 도착지(cse@jj.ac.kr) 정보가 들어 있음).
  2. 메일 서버 A(knou.ac.kr)는 25번 포트(SMTP)로 메일을 수신한다.
  3. 메일 서버 A(knou.ac.kr)는 도착지 메일 서버 B(jj.ac.kr)의 MX 레코드를 DNS 서버에서 요청하여 가져온다.
  4. 메일 서버 A(knou.ac.kr)는 MX 레코드를 통해 도착지 메일 서버 B(jj.ac.kr)의 IP 주소를 가져온다.
  5. 메일 서버 A(knou.ac.kr)는 받은 메일을 메일 서버 B(jj.ac.kr)로 다시 전송한다.
  6. 메일 서버 B(jj.ac.kr)는 MDA(Mail Delivery Agent)를 통해 수신자가(cse@jj.ac.kr) 메일 박스에 메일을 저장한다.
  7. cse@jj.ac.kr 사용자는 POP3 또는 IMAP 프로토콜로 메일을 가져온다.

- MX 레코드는 메일 서버의 주소를 알려 주는 역할을 한다. 예를 들어, knou.ac.kr는 도메인이고, 203.232.172.105는 방송대의 IP 주소이다. 방송대의 MX 레코드를 이용하여 mail.knou.ac.kr의 IP 주소를 가져올 수 있다.
- 메일 서비스에서 주의해야 할 점은 포털 사이트 메일(네이버 메일, 다음 메일, 구글 메일 등)은 메일 서비스와 조금 다르다는 것이다. 포털 사이트의 메일에서는 수신을 POP3/IMAP으로 하지 않는다. 포털 사이트의 메일 서버는 수신한 메일의 메타 데이터를 DB에 보관하고 웹 서버에 배포하여 수신자가 서버에 HTTP로 접근하여 메일 정보를 읽을 수 있도록 한다.

 


 

참고자료: 정보통신망 | 손진곤 (지은이) 한국방송통신대학교출판문화원 

 

반응형