[Computer Networking] Application(2)

Winney·2021년 8월 1일
0

Computer_Networking

목록 보기
1/3

2.4 Electronic Mail in the Internet 전자 메일

  • mail system의 주요 component: user agents(UA), mail servers, Simple Mail Transfer Protocol(SMTP)
  • Outgoing message queue : 발신 문자 대기열
  • mailbox는 mail server 중 하나에 위치해있다.
  • 메일서버로 메일 전송을 못 할 시 message queue(메세지 대기열)이후에 주기적으로 전송시도를 한다. (30분 정도마다) 며칠동안 실패하면 서버는 메시지를 삭제하고 발신자에게 메시지로 알린다.
  • SMTP는 인터넷 전자 메일을 위한 애플리케이션 계층 프로토콜이다. 발신자로부터 수신자에게 메일 전달을 위해 TCP의 믿을만한 데이터 전송 서비스(reliable data transfer service)를 사용한다.
  • client와 server 측을 가지고 있다.

SMTP

  • http보다 오래되었다.

  • 메일 메시지의 header뿐만 아니라 body도 7-bit ASCII로 제한된다. 80년대에는 대용량 이미지 등을 메일로 보내지 않았기 때문에 적합한 형태였다.
    그렇기에 오늘날 멀티미디어 전송을 위해 몇 가지 과정을 더 거쳐야 한다.
    1. 이진 멀티미디어 데이터를 ASCII로 인코딩
    2. SMTP 전송
    3. 해당 ASCII 메시지를 다시 이진수로 디코딩

    → 이에 비해 HTTP는 전송 전에 멀티미디어 테이터를 ASCII로 인코딩할 필요가 없다. 
  • SMTP 과정

    1. 앨리스가 자신의 user agent를 호출 후 밥의 주소(IP address) 제공 및 메시지 작성, 발신 지시
    2. 앨리스의 user agent는 메시지를 앨리스의 mail server로 보낸다. 메시지는 message queue에 놓이게된다.
    3. SMTP의 client 측인 앨리스의 mail server는 message queue에 담긴 message를 확인하고 SMTP server에 TCP connection을 연다.
    4. 초기 SMTP handshaking 후 SMTP client는 앨리스의 메시지를 TCP connection으로 전송합니다.
    5. 밥의 mail server인 SMTP의 서버측은 메시지를 수신합니다. 이후 밥의 메일 서버는 밥의 mailbox에 메시지를 놓습니다.
    6. 밥은 원할 때 그의 user agent를 호출해 메시지를 읽습니다.
  • 중요점

    1. 일반적으로 SMTP는 두 메일 서버가 세계 반대쪽에 위치하더라도 중간 mail server를 사용해서 메시지를 보내지 않는다는 점이다. TCP connection은 두 server를 direct로 연결한다.
      • 만약 밥의 server가 down되면 메시지는 앨리스의 mail server에서 계속 전송 시도를 한다.
      • SMTP는 사람의 면대면 만남과 흡사하다. 첫 handshaking은 서로 인사를 하는 과정이며 이 때 SMTP client는 발신인의 이메일 주소와 수신자의 이메일 주소를 표시한다.
      • SMTP는 TCP를 통해 메시지를 에러없이 전달한다.
    2. SMTP는 persistent connection을 사용한다.
      • 만약 같은 mail server에 여러 메일을 보낼 경우 같은 TCP connection을 사용해서 보낸다. 이 때는 client에서 MAIL FROM: 을 사용해서 각각이 독립된 메일임을 알려준다.
    3. SMTP는 CRLF를 사용한다.
      • CRLF : CR(carriage return) + LF(line feed)이다.
        텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열을 의미하며 특수문자로 눈에는 보이지 않는다. 개행문자, 줄바꿈 문자, EOL(end-of-line)과 같은 뜻이다.
        기종이나 운영체제에 따라 새줄 문자를 나타내는 코드가 다를 수도 있기에 텍스트를 다른 시스템으로 전송할 때 새줄 문자의 치환작업도 필요한다.
      • LF : 아스키 코드 16진수로 OA, 기능은 커서를 현재 행의 다음 행으로 즉, 아래로 내리기
      • CR: 아스키 코드 16진수로 OD, 기능은 커서를 현재 행을 맨 좌측으로 옮기기
        즉, '커서를 아래로 내리는 동작' + '커서의를 행의 맨 앞으로 보내는 동작' = '다음줄로 행갈이'
        사용 :
      • 도스/윈도우는 CR+LF로 하나의 행길이,
      • 유닉스/리눅스: LF로 하나의 행갈이,
      • 맥에서는 CR로 하나의 행갈이 표현,

HTTP와 비교

  • HTTP는 web server에서 web client로 파일을 전송한다. SMTP는 메시지를 mail server에서 mail server로 전송한다.
  • HTTP는 pull protocol이다. SMTP는 push protocol이다. 그렇기에 HTTP의 TCP connection은 파일을 받는 쪽에서 시작하고 SMTP의 TCP connection은 파일을 보내는 쪽에서 시작한다.
  • 이미지 파일등의 binary data를 보낼 때 HTTP는 인코딩 과정이 필요 없지만 SMTP는 ASCII 코드로 인코딩 과정이 필요하다.
  • HTTP는 각각의 객체를 자체 HTTP 응답 메시지에 캡슐화를 한다. SMTP는 메시지의 모든 객체를 하나의 메시지에 넣는다.

Mail Message Formats

  • SMTP에는 header와 body가 있고 header에는 지엽적인 정보가 들어간다. 이런 형식은 RFC에서 지정하고 있다. header에는 From:, To:와 같은 내용이 들어가고 subject: 와 같은 옵션도 있다.
  • 이러한 header의 형식은 SMTP command의 MAIL FROM, RCPT TO와 같은 command과 다르다. 여기서의 format은 메일의 형식이다.
  • header의 아래에는 빈 줄이 있고 그 아래에 body가 있다.

Mail Access Protocols

  • 위의 예시들은 밥이 자신의 mail server에 로그인을 해서 메일을 읽는다고 가정했다. 하지만 오늘날에는 client-server architecture를 사용한다. 즉, 일반적인 사용자는 PC, 노트북, 스마트폰 등 다양한 end system에서 메일을 읽는다.

  • 위에서 만약에 밥의 mail box가 그의 local PC에 있다면 밥은 메일을 받기 위해서 항상 PC가 켜진채로 인터넷에 연결되어 있어야 한다. 하지만 대부분의 사용자는 local PC에서 상시 공유 메일 서버에 저장된 편지함에 접근합니다. 이 mail server는 다른 사용자와 공유되고 일반적으로 사용자의 ISP에서 관리한다.

  • SMTP의 사용발신자 → 발신자의 mail server → 수신자의 mail server → 수신자의 과정에서 사용됩니다. 발신자가 굳이 발신자의 mail server로 보내는 이유는 만약 수신자가 연결 될 수 없는 상태일 경우에 server가 주기적으로 메시지 전송을 하기 위함이다.

  • 위의 과정에서 수신자의 mail server → 수신자의 경우 SMTP를 사용하지 않는다. SMTP는 push protocol이기 때문이다. 대신 메일에 접근 할 수 있는 protocol을 사용한다. 주로 POP3(post office protocol - version3), IMAP(internet mail access protocol), HTTP가 사용된다.

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d7d933ae-cbc6-4aeb-bb26-c3ec428d2089/_2021-06-28__9.40.17.png

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d7d933ae-cbc6-4aeb-bb26-c3ec428d2089/_2021-06-28__9.40.17.png

POP3

  • 기능적으로 제한되어 있어 짧고 읽기 쉽다.
  • user agent에서 mail server로 110번 포트를 사용해서 TCP connection을 연다. 이후 3단계를 거친다. 인증(authorization), 트랜잭션(transaction), 갱신(update)단계이다.
  • 인증 : 유저 인증을 위해 username과 password를 보낸다. 두 가지 command가 있는데 user , pass이다.
  • 트랜잭션 : user agent는 메시지를 가져온다. 이 때 user agent는 삭제를 위해 메시지에 표시하고 삭제마크를 지우고 메일 통계를 가져온다.
    response는 두가지로 +OK, -ERR가 있다. 'download and delete' 또는 'download and keep'으로 구성할 수 있다. user agent가 작동중인 모드에 따라 달라진다. download and delete 모드에서는 UA가 list, retr, dele command를 실행한다.
  • 갱신 : client에서 QUIT command를 실행한 후 갱신하고 POP3를 종료한다. 이 때 mail server에서는 삭제 표시 된 메시지를 삭제한다.
  • UA는 먼제 mail server에 저장된 메시니의 각 크기 별로 나열하도록 요청한다. 이 후 UA는 mail server에서 각 메시지를 검색하고 삭제한다. quit command 이후 POP3 서버는 갱신단계로 들어가 읽은 메시지를 삭제한다.
  • 문제 : download-and-delete 모드의 문제는 수신자인 bob이 PC, 노트북, 휴대폰 같은 다양한 end system에서 메시지에 접을 하고 싶을 때 다른 컴퓨터를 사용해서 다시 메일을 읽고 싶을 때 메일을 읽을 수 없다는 점이이다.
  • download-and-keep 모드의 경우 밥은 여러 컴퓨터에서 메일을 다시 읽을 수 있다.
  • POP3 세션동안 UA과 mail server는 일부 정보 상태를 유지하고 삭제된 것으로 표시된 유저 메시지를 추적할 수 있다. 하지만 POP3 서버는 POP3 세션 전체에 상태정보를 전달하지 않는다. 이렇게 전반적으로 상태정보가 부족하면 POP3 서버 구현이 크게 간소화 된다.

IMAP

  • POP3는 로컬에서 폴더를 만들어 관리 할 수는 있으나 원격에서 모든 컴퓨터로 접근 할 수 있는 폴더 계증을 유지하지는 못한다. 즉, 사용자가 원격 폴더를 만들고 메시지를 할당하는 수단을 가지지 않는다. IMAP는 이를 해결하기 위해 나왔다.
  • IMAP 서버는 각 메일를 폴더와 연결한다. 처음 메시지가 왔을 때 서버는 수신자의 INBOX 폴더와 연결한다. IMAP는 유저에게 폴더를 생성하고 메시지를 옮길 수 있으며 원격 폴더에서 특정 기준과 일치하는 메시지를 찾을 수 있는 command를 제공한다.
  • POP3과 다르게 IMAP는 IMAP 세션 전체에 유저의 상태 정보를 유지한다. 예를 들면 폴더 이름과 폴더와 관련된 메시지가 표시된다.
  • IMAP의 또다른 특징은 UA가 메시지 구성요소를 가져 올 수 있는 command를 가지는 것이다. 예를 들면 UA는 메시지의 header나 MIME 메시지의 일부만 가질 수 있다. 이는 a low-bandwidth connection(저대역폭 연결)에 유용하다. 이는 유저가 느린 속도로 메시지의 모든 정보를 받지 않기를 원할 때 일부만 받아서 볼 수 있다.

Web-based E-mail

  • 많은 유저는 웹 브라우저를 이용해 메일을 보내고 접근한다. 이 말은 대부분의 UA는 보통 웹 브라우저이고 HTTP를 통해 원격 mailbox과 상호작용한다는 것이다.
  • 그렇기에 대부분의 경우
    발신자 UA → 발신자 mail server : HTTP
    발신자 mail server → 수신자 mail server : SMTP
    수신자 mail server → 수신자 UA : HTTP

    로 이루어진다.
profile
프론트엔드 엔지니어

0개의 댓글