TCP/IP 4계층 #3. 애플리케이션 계층(application) HTTP, SSH, FTP, SMTP

윤용운·2022년 11월 6일
0

네트워크

목록 보기
3/8
post-custom-banner

어플리케이션 계층

HTTP, SMTP, SSH, FTP가 대표적이며 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 층이다.

HTTP(HyperText Transfer Protocol)

처음에는 서버와 브라우저간에 데이터를 주고받기 위해 설계된 프로토콜이며, 현재는 서버와 서버간 통신할 때에도 많이 이용한다.

  • 특징
    • HTTP는 헤더를 통한 확장이 쉽다.
    • Stateless
      • 동일한 연결에서 연속적으로 수행되는 두 요청 사이에 연속적인 상태값은 없다.

HTTP/1.0

기본적으로 한 연결당 하나의 요청을 처리하도록 설계. 이는 RTT 증가를 불러오게 되어 있다.

RTT : 패킷이 목적지에 도달 후 다시 출발지로 돌아오기까지 걸리는 시간.

  • 해결방법
    • 이미지 스플리팅
      많은 이미지를 다운로드 받게 되면 과부하가 걸리기에 이미지가 합쳐있는 하나의 이미지를 다운 받고, background-imageposition을 이용하여 이미지를 표기하는 방법.
    • 코드 압축
      개행문자, 빈칸을 없애서 코드의 크기를 최소화하는 방법.
    • 이미지 Base64 인코딩
      이미지 파일을 64진법 문자열로 인코딩하는 방법. 이는 서버와의 연결을 열고 이미지에 대해 서버에 HTTP 요청을 할 필요가 없다는 장점이 있지만, 용량이 37%정도 더 커지는 단점도 존재함.

HTTP/1.1

HTTP/1.0 방식에서 발전한 방식이며, 매번 TCP 연결을 하는것이 아닌, TCP 초기화 이후 keep-alive옵션을 통해 여러개의 파일을 송수신할수 있도록 바뀜.

HTTP/1.0에도 keep-alive가 있었지만 표준화가 되어있지 않았으며, HTTP/1.1에서 기본옵션으로 설정됨.

  • 최초 TCP 3-way 핸드쉐이크가 발생하면 그 이후로 발생하지 않지만, 문서 안에 포함된 다수의 리소스(이미지, css, script 등)을 처리하려면 요청할 리소스 개수에 비례해 대기시간이 길어지는 단점이 존재

  • 특징

    • HOL Blocking

      HOL Blocking(Head Of Line Blocking)은 네트워크에서 같은 큐에 있는 패킷이 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상을 말한다.
    • 무거운 헤더 구조
      쿠키 등 많은 메타데이터가 포함되어 있고 압축되지 않아 무거웠다고 한다.

HTTP/2

SPDY 프로토콜에서 파생된 HTTP/1.x보다 지연시간을 줄이고 응답시간을 더 빠르게 할수 있으며 멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순의 처리를 지원하는 프로토콜

  • 특징
    • 멀티플렉싱
      여러개의 스트림을 사용하여 송수신하는 것으로, 특정 스트림의 패킷이 손실되었다고 하더라도 해당 스트림에만 영향을 미치고 나머지 스트림은 정상적으로 동작. 병렬적인 스트림을 통해 데이터를 서빙하며, 이를 통해 병렬로 여러 요청/응답을 송수신하며 HOL Blocking 문제도 해결 가능하다.
    • 헤더압축
      헤더가 허프만 코딩 압축 알고리즘을 사용하는 HPACK 방식의 압축 형식을 가짐
      • 허프만 코딩
        문자열을 문자 단위로 쪼개 빈도수를 세어 빈도가 높은 정보는 적은 비트수를 사용하여 표현하고, 빈도가 낮은 정보는 비트수를 많이 사용하여 표현하여 전체 데이터의 표현에 필요한 비트양을 줄이는 원리로 동작.
    • 서버 푸시

      클라이언트 요청 없이 서버가 바로 리소스 푸시 가능.

HTTPS

HTTPS는 어플리케이션 계층과 전송 계층 사이에 신뢰 계층인 SSL/TLS 계층을 넣은 신뢰할 수 있는 HTTP 요청을 말하며, 이를 통해 통신을 암호화한다.

HTTP/2는 HTTPS 위에서 동작한다.

SSL/TLS

전송 계층에서 보안을 제공하는 프로토콜이며, 클라이언트/서버가 통신할 때 제 3자가 메시지를 도청하거나 변조하지 못하도록 막아준다.

  • 보안 세션
    보안이 시작되고 끝나는 동안 유지되는 세션. SSL/TLS는 핸드쉐이크를 통해 보안 세션을 생성, 이를 기반으로 상태정보 등을 공유한다.

    클라이언트와 서버가 키를 공유하고 이를 기반으로 인증, 인증확인등의 작업이 일어나며 이후에 데이터를 송수신한다.

  • 인증 매커니즘
    CA(Certificate Authorities) 에서 발급한 인증서를 기반으로 이루어진다.

    공개키를 클라이언트에 제공, 사용자가 접속한 서버가 신뢰할수 있는 서버임을 보장한다.

    인증서는 서비스 정보, 공개키, 지문, 디지털 서명 등으로 이루어져 있다.

  • CA 발급과정
    자신의 사이트 정보와 공개키를 CA에게 제출, 이후 CA는 공개키를 해시한 값인 지문을 사용하는 CA의 비밀키 등을 기반으로 CA 인증서를 발급한다.

  • 암호화 알고리즘
    대수곡선 기반의 ECDHE 또는 모듈식 기반인 DHE(Diffie-Hellman Ephermeral)을 사용한다.

    • 디피-헬만 키 교환 암호화 알고리즘

      처음에는 공개값을 공유, 각자의 비밀값고 혼합 후 혼합 값을 공유한다. 이후 각자의 비밀값고 또 혼합하여, 이후에 공통의 암호키를 생성하는 방식.
      이런식으로 PSK(사전 합의된 비밀키)가 생성되면 악의적인 공격자가 개인키 또는 공개키를 가지고도 PSK가 없어 아무것도 할 수 없다.
  • 해싱 알고리즘
    데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 알고리즘. SSL/TLS는 해싱 알고리즘으로 SHA-256SHA-384를 사용한다.

  • 해시
    다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값
  • 해싱
    임의의 데이터를 해시로 바꿔주는 일. 함수가 담당
  • 해시 함수
    임의의 데이터를 입력받아 일정한 길이의 데이터로 바꿔주는 함수.

HTTP/3

TCP 위에서 돌아가는 HTTP/2와는 달리 HTTP/3은 QUIC이라는 계층 위에서 돌아가며, TCP 기반이 아닌 UDP 기반으로 돌아가는 프로토콜. 멀티플렉싱을 가지고 있으며, 초기 연결 설정 시 지연시간 감소라는 장점이 있다.

  • 초기 연결 설정 시 지연시간 감소
    QUIC는 TCP를 이용하지 않기 때문에 3-way 핸드쉐이크 과정이 필요없다.
  • FEC(순방향 오류 수정 메커니즘) 적용.
    전송 패킷이 손실되도 수신측에서 에러를 검출하고 수정할 수 있다.

SSH

ssh
보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜이다.

  • 서버에 접속할 때 비밀번호보다 높은 수준의 보안요건을 필요로 할 때 사용한다.
  • 동작방식
    • 공개키(public key)와 비공개키(secret key)로 이루어지며, 공개키는 리모트 머신(SSH Server)에, 비공개키는 로컬 머신(SSH Client)에 위치한다.
    • SSH 접속을 시도하면 SSH Client가 로컬 머신의 비공개키와 쌍을 이루는 SSH Server의 공개키와 일치하는지를 확인하는 과정을 거친다.
    • 서로 관계를 맺고 있는 Key라는 것이 증명되면 두 컴퓨터 사이에 암호화된 채널이 형성, key를 통해 메시지를 암호화/복호화 하며 데이터를 주고받는다.
  • 주요기능
    • 보안 접속을 위한 rsh, rcp, rlogin, rexec, telnet, ftp 등을 지원
    • IP Spoofing을 방지
    • X11 패킷 포워딩 및 일반적인 TCP/IP 패킷 포워딩 제공

FTP

ftp
노드와 노드 간 파일 전송시 사용되는 프로토콜. 대용량 파일을 처리할 때 유용하다. 현재는 파일을 암호화해서 전송하는 FTPS 또는 SFTP로 대체되고 있다.

  • 특징

    • 클라이언트/서버 구조
    • 두개의 기본 채널 생성
      • 명령 채널
        21번 포트로 사용자 인증, 명령을 위한 연결이 만들어 지고, 클라이언트에서 지시하는 명령어가 전달된다.
      • 데이터 채널
        • 능동 모드
          서버가 자신의 데이터 포트인 20번 포트에서부터 클라이언트가 지정한 지점으로의 데이터 연결 생성. 클라이언트가 지정하는 포트는 1023보다 큰 번호의 포트이다.
        • 수동 모드
          클라이언트가 서버가 지정한 서버 포트로 연결할 수 있게 한다. 양쪽 모두 1023보다 큰 포트를 사용한다.
    • 데이터가 암호화되어 전송되지 않으므로, 보안에 취약하다.
  • FTPS
    FTP 표준의 확장. 클라이언트가 FTP 세션이 암호화되도록 요청할 수 있게 한다.

  • SFTP
    SSH 파일 전송 프로토콜로, SSH를 이용하여 파일을 전송한다.

SMTP

smpt
인터넷을 통해 메일을 보낼 때 사용되는 프로토콜이다(Simple Mail Transfer Protocol).

  • 특징
    • 텍스트 기반(7비트 ASCII) 프로토콜이다.
    • TCP 기반 프로토콜이다.
    • 클라이언트/서버로 구분되어 있다.
  • 동작방식
    • 220 : 연결 수립
    • 250 : OK
    • 354 : 메일 수신(메일 전송과정)
    • 221 : 연결 종료

텍스트 기반으로 통신하기에, SMTP 세션을 다음과 같이 표현된다. (C: 클라이언트, S: 서버)

S: 220 smtp.example.com ESMTP Postfix
C: HELO relay.example.com
S: 250 smtp.example.com, I am glad to meet you
C: MAIL FROM:<bob@example.com>
S: 250 Ok
C: RCPT TO:<alice@example.com>
S: 250 Ok
C: RCPT TO:<theboss@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: From: "Bob Example" <bob@example.com>
C: To: Alice Example <alice@example.com>
C: Cc: theboss@example.com
C: Date: Tue, 15 January 2008 16:02:43 -0500
C: Subject: Test message
C: 
C: Hello Alice.
C: This is a test message with 5 header fields and 4 lines in the message body.
C: Your friend,
C: Bob
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye
{The server closes the connection}

POP3, IMAP

  • POP3
    멀리 떨어져있는 메일서버에 지정된 사용자ID로 접속해서, 메일박스 내에 도착한 메일을 자신(클라이언트)에게 가져오기(수신하기) 위해 사용되는 프로토콜.
    • 동작방식
      • 인증단계 : 110포트로 접속(ID/PW)
      • 트랜잭션단계 : 4개의 명령(list, retr, dele, quit)으로 메일 처리
      • 갱신단계 : quit 이후 메일 서버는 메세지 삭제 등을 시행
    • 특징
      • 클라이언트로 메일을 다운로드하며, 해당 메일은 서버에서 삭제된다.
  • IMAP
    메일 서버에서 전자메일 관리하고 메일 수신 처리 및 검색을 지원.
    • 특징
      • 다중 로그인 지원
      • POP3와 달리 수신한 메일이 서버에서 지워지지 않음
      • 폴더 구조로 관리 가능
post-custom-banner

0개의 댓글