ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SMTP, MIME
    네트워크 2024. 4. 6. 23:34

    메일을 보내는 사람(호스트): 유저 에이전트

    클라이언트: 메일을 보내는 메일 서버

    서버: 메일을 받는 메일 서버

     

    TCP 사용, 25 포트

    - 핸드셰이킹

    - 메시지 전달

    - 종료

     

    커맨드/리스폰스 상호작용

    - 커맨드: ASCII text (7비트 아스키 코드, 1비트는 패리티 비트)

    즉, 문자로 명령이 간다.

    - 리스폰스

    status code, phrase

     

     

    앨리스가 밥에게 메시지를 보내는 경우

    1. 앨리스가 유저에이전트를 통해 밥에게 메일을 보내면,

    2. 유저에이전트는 앨리스의 메일 서버로 메시지를 보내고 메시지 큐에 쌓인다.

    3. 클라이언트 측은 SMTP를 열어 밥의 메일 서버에게 TCP 커넥션을 한다.(핸드셰이킹)

    4. 클라이언트가 밥에게 메시지를 보낸다.

    5. 밥의 메일 서버는 밥의 메일 박스에 메일을 쌓아둔다.

    6. 밥이 유저에이전트를 통해 메시지를 읽을 수 있다.

     

    코드 예시)

    S: 220 lagooneng.com // 220은 준비 되었다는 뜻. 서버는 코드로 응답

    C: HELO lagoo.com       // HELO. 클라이언트는 아스키 코드 사용

    ....

    ....

     

    한줄 씩 통신하는 이유: 알파넷 시절 프로토콜이라 그때는 통신이 지금처럼 여유롭지 않음

    왜 지금도 한 줄? : 메일은 전세계랑 하는 것. 전세계 인터넷 수준이 다 좋지는 않음


    정리

    - SMTP는 지속 연결을 한다.

    - SMTP는 7비트 아스키 코드 메시지를 쓴다

    - SMTP 서버는 메시지 중 CRLF.CRLF가 들어오면 메시지가 종료됨을 인식한다.

     

    HTTP와 비교

    - HTTP는 요청해서 당겨오는 것과 같고, SMTP는 요청해서 밀어넣는 것과 같다.

    - 둘다 ASCII를 사용해서 요청/응답 상호작용을 하고, status code를 쓴다.

    - HTTP는 메시지가 캡슐화되고 SMTP는 그냥 한줄씩 나눠서 보낸다.


    MIME

    Multipurpose Mail Internet Extensions

    SMTP는 아스키 코드밖에 못보내니까 그 외 형태 파일을 인코딩

    ASCII로 기존 SMTP로 보낼 수 있게 해줌 (유니코드, 그림, 동영상, 바이너리 코드 등..)

    수신쪽은 디코딩


    SMTP는 클라이언트에서 서버로 메일을 전달해주는 역할

    받은 메일을 읽어주는 프로토콜도 필요

     

    POP3: 읽고 나서 메일 서버에서 지워버림

    IMAP: 읽고 나서 유지되어서 다른 컴퓨터로 메일 서버에 접속해도 남음

    HTTP: gmail 등등 HTTP로 받음

     

    POP3

    인증 페이즈

    - 클라이언트 커맨드 : user, pass

    - 서버 리스폰스 : +OK, -ERR

     

    트랜잭션 페이즈, 클라이언트 측 커맨드

    list: 메시지 개수

    retr: 번호로 메일 뽑아오기

    dele: 삭제

    quit: 종료

     

    사실 dele 안하면 삭제 안돼서 어떻게 구현하느냐에 따라 달라진다.

     

    POP3는 세션 간 statelss

    IMAP은 state를 유지함 -> 폴더 이름과 메시지 ID간 매핑 지원.

    '네트워크' 카테고리의 다른 글

    P2P 아키텍처 File Distribution  (0) 2024.04.08
    DNS  (0) 2024.04.07
    쿠키, 웹 캐시(프록시)  (0) 2024.04.06
    HTTP 프로토콜 구조  (0) 2024.03.25
    URI, URL, URN / HTTP 개요(비지속적, 지속적 HTTP)  (0) 2024.03.25
Designed by Tistory.