SMTP 프로토콜 (Simple Mail Transfer Protocol)

전자우편을 보내고 받는데 사용되는 TCP/IP 프로토콜이다. 비교적 간단한 메세지 전송 프로토콜.


(1) 메일을 송신

(2) 수신자는 본인의 컴퓨터가 전원이 없기 때문에 수신할 다른 머신이 필요

(3) Mail Server 는 수신자를 대신해서 메일을 수신하고 이후 사용자가 보길 원하는 경우, 사용자에게 보여준다.


Mail Server 에는 Mail Queue 가 존재하며, 수신자 쪽 서버가 멈추거나 혹은 다운되는 경우 송신자 쪽 서버의 큐에 메일을 담아두고 이후에 네트워크 환경이 안정화되면 다시 송신하다.


HTTP : 클라이언트가 서버로부터 데이터를 가져오는 모습 ( pull, 사용자가 데이터를 들고오는 방식 )

SMTP : 보내고자 하는 데이터를 밀어넣는 모습 ( push, 사용자가 데이터를 밀어내는 방식 )


Mail Queue 

네트워크 환경이 불안정한 경우, 송신자 측에서 보낸 데이터를 담아두는 큐이다. 이후에 네트워크가 안정화되면 재송신한다.


Socket

네트워크는 프로세스간의 메세지를 교환하는 것이며, 서로 다른 머신(디바이스) 간의 통신을 위한다. 그리고 이 프로세스들 간의 커뮤니케이션을 위해 OS에서는 인터페이스를 제공한다. 이 인터페이스가 Socket 이다. 결과적으로 소켓은 돌아가는 두 프로그램이 서로 통신할 수 있도록 양쪽에 생성되는 엔드포인트(endPoint) 이며 소켓서버는 특정 컴퓨터에서 실행되고 특정 포트 번호에 바인딩된 소켓을 가지고 있다. 이후 소켓서버는 클라이언트 소켓이 요청이 올 때까지 기다린다.


Socket 순서

(1) TCP Server 에서 socket()을 생성하고 바인드한다. 이 과정은 특정한 포트 번호로 바인딩하는 것을 의미한다.

(2) 서버 소켓은 Listen 을 수행하여 소켓은 클라이언트 소켓의 요청이 올 때까지 대기한다.

(3) TCP Client 측에서 socket()을 생성하고 connect() 를 통해서 TCP Server 에 연결 요청을 한다.

(4) 클라이언트 측에서 요청이 올 때, 요청 호스트 이름과 포트번호에 이상이 없으면 서버는 연결을 승인(accept)한다. (서버는 응답을 수행하는 호스트이다.)

(5) (3) ~ (4) 의 과정에서 TCP Three-way Handshaking 이 일어난다.

(6) 이후 write() & read() 가 이루어진다.

Posted by doubler
,