TCP/IP가 보이는 그림책

Jaewoong
Quantum Ant
Published in
14 min readJul 15, 2019

제3장 애플리케이션 계층

3장에서는 TCP/IP 5계층 중에서 가장 사용자와 가까운 위치에 있는 애플리케이션(응용) 계층에 대해 알아보겠습니다.

애플리케이션 계층의 역할은 “통신 서비스의 실현” 입니다.

애플리케이션 계층에는 통신 서비스에서 서버와 클라이언트와의 주고받기를 결정하는 애플리케이션 프로토콜이 있습니다.

애플리케이션 계층의 역할

애플리케이션 계층의 위치

TCP/IP 5계층 중에서 가장 위에 위치하는 것이 애플리케이션 계층입니다.

컴퓨터끼리의 주고받기를 사용자가 이용할 수 있는 “통신 서비스”라는 형태로 만드는 것이 이 층의 역할입니다.

즉 사용자가 해석할 수 있게 만들어주는 역할을 합니다.

애플리케이션 계층의 역할은 통신 서비스를 실현하는 것으로

이 계층은 송신측과 수신측이 아닌 “클라이언트와 서버”라는 개념을 갖고 있습니다.

애플리케이션 계층에는 통신 서비스를 하는 클라이언트와 서버가 주고 받기로 정한 프로토콜이 존재하는데

이를 애플리케이션 프로토콜(application protocol)이라 합니다.

애플리케이션 프로토콜은 ‘통신을 할때 어떻게 주고 받으면 효율적인가’라는 고려하여 만들어졌습니다.

그래서 통신하는 여러가지 수만큼 애플리케이션 프로토콜이 존재하는 것입니다.

애플리케이션 헤더

애플리케이션 헤더에는 통신을 하기 위한 가장 중요한 ‘요청과 응답’에 관한 정보가 들어 있습니다.

(프로토콜에 따라 헤더를 사용하지 않는 경우도 있습니다.)

애플리케이션 게층 밑으로 내려가면 지금 있는 헤더와 데이터가 하나로 묶여버리므로

데이터가 사용자가 해석할 수 있는 형태로 되어 있는 것은 이 계층뿐입니다.

클라이언트가 서버에 통신을 요청할 때(처음 보내는 메시지)

구체적인 데이터를 주고받지 않아도 되므로 헤더만 주고 받습니다.

텍스트 기반과 바이너리 기반

애플리케이션 헤더에 무엇을 어떻게 쓸지는 프로토콜에 따라 다릅니다.

사람이 읽을 수 있는 텍스트 기반으로 쓰는 경우와 컴퓨터가 처리하기 쉬운 바이너리 기반으로 쓰는 경우가 있습니다.

  • 텍스트 기반은 사용자가 정보를 읽을 수 있습니다
  • 바이너리 기반은 사용자가 읽을 수는 없지만 컴퓨터 처리속도가 빠릅니다.

HTTP 프로토콜

HTTP 프로토콜은 하나의 요청에 대해 하나의 응답을 반환해주는 아주 간단한 프로토콜입니다.

실제로 페이지를 구성하는 파일 수만큼 응답을 반환해주는 작업을 반복합니다.

HTTP 프로토콜에서는 ‘요청(request)’‘응답(response)’ 두 종류의 패킷을 사용하여 텍스트 형식으로 주고받기를 수행합니다.

요청 패킷

출처 : https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html

Request Message Header

메소드(Request Line)

  • 요청의 종류이며 GET 외에도 PUT 등이 있습니다.

요청 헤더(Request Headers)

  • 서버에 전달하는 클라이언트의 정보입니다. (처리 가능한 파일의 종류와 문자 코드, 언어 등)
  • 항목명과 정보는 콜론(:)으로 구분합니다.

공백 줄(A blank line separates header & body)

  • 헤더와 본문의 경계를 나타냅니다.

Request Message Body

본문

  • 요청 시 필요한 데이터가 들어갑니다.
  • 메소드가 GET인 경우 비어 있게 됩니다.

응답 패킷

출처 : https://www.ntu.edu.sg/home/ehchua/programming/webprogramming/HTTP_Basics.html

Response Message Header

상태 줄(Status Line)

  • 클라이언트의 요청에 대한 처리 결과입니다. 정상적으로 처리한 경우에는 200번대의 숫자가 됩니다.

응답 헤더(Response Headers)

  • 클라이언트에게 전달할 데이터에 관한 정보가 있습니다.

공백 줄(A blank line separates header & body)

  • 헤더와 본문의 경계를 나타냅니다.

Request Message Body

본문

  • 클라이언트에게 전달할 데이터가 들어갑니다.

통신을 유지하는 구조

상태 비보존형 프로토콜(stateless protocol)

HTTP 프로토콜은 접속 상태를 유지한 채로 주고받기를 계속할 수 없습니다.

HTTP 프로토콜은 원래 ‘요청된 데이터를 반환’이 목적이므로 한 번의 요청과 응답으로 통신은 완결되고, 과거에 수행한 통신에 대한 정보를 다음에 다시 사용할 수 없습니다.

이렇게 한 번으로 끝나는 HTTP 프로토콜을 상태 비보존형 프로토콜(stateless protocol)이라 합니다.

HTTP 프로토콜에서는 사용자(클라이언트)에게는 연속적인 작업이라고 할지라도 서버에서는 하나하나가 독립적인 작업이 됩니다.

그래서 로그인을 진행하고 상품을 고른 후 구매 페이지로 넘어가면 로그인을 다시 해야되는 일이 생깁니다.

즉 서버는 클라이언트가 입력한 정보를 통신이 끝나면 기억하지 못합니다.

이러한 문제점을 해결하기 위한 것이 바로 쿠키(Cookie) 입니다.

쿠키(Cookie)

HTTP 프로토콜의 주고받기에 관한 정보를 클라이언트측에 저장해 두고 다음 통신때 그 정보를 서버에게 알리면

서버는 클라이언트로부터 받은 정보로부터 이전 통신을 지속할 수 있게됩니다.

이때 주고받는 정보를 쿠키(Cookies)라고 합니다.

쿠키는 HTTP 프로토콜의 정규 장치가 아닙니다.

쿠키는 보통 CGI(Common Gateway Interface) 등 클라이언트로부터 요청에 맞게 웹 페이지를 작성하는 장치와 함께 사용합니다.

CGI(Common Gateway Interface)

웹서버의 기능 확장을 위해 사용되며, 프로그램이라기 보다 상호통신에 대한 방법입니다.

  • 웹서버 프로그램과 외부 응용 프로그램 간의 인터페이스에 대한 방법/규약 입니다.
  • 웹서버를 구동하는 서버 측에서는 CGI 요청시 마다 매번 프로세스가 수행되므로 해당 서버에 한꺼번에 많은 프로그램들이 수행될 수 있어서 무리를 줄 수 있습니다.

쿠키의 동작 과정

이전 통신에서 받은 쿠키를 서버에게 제시를 하면 서버는 쿠키를 보고 사용자를 지정하여 처리한 웹 페이지를 작성합니다.

클라이언트는 이전 통신을 근거로한 웹 페이지를 볼 수 있게됩니다.

즉 연속적인 작업이 가능해집니다.

  • 쿠키에는 유효기간이 있으며, 기간이 지난 쿠키는 클라이언트에 의해 자동적으로 삭제됩니다.
  • 유효기간 설절은 쿠키 제작자가 하지만, 설정하지 않은 경우에는 브라우저가 닫히면 끝나게 됩니다.

SSL/TLS(Secure Sockets Layer/Transport Layer Secure)

SSL은 인터넷 상에서 데이터 통신을 암호화하는 프로토콜입니다. SSL을 바탕으로 표준화한 것이 TLS입니다.

SSL/TLS가 필요한 이유

인터넷 같은 컴퓨터간 통신이 발달해 있는 현재 컴퓨터 환경에서 이런 보안이 적용된 통신 환경을 제공해 주는 SSL같은 암호화 방법은 매우 중요합니다.

컴퓨터는 네트워크라는 말도 있듯 네트워크가 없는 컴퓨터 환경은 생각할 수도 없습니다. 인터넷이라는 거대한 환경을 통해서 우리는 매일 서로의 안부를 교환하고, 신문을 읽고, 방송을 보며, 물건을 사고 팝니다. 웹사이트는 지금도 기하 급수적으로 증가하고 있습니다.

인터넷을 통한 정보의 전송은 무수히 많은 컴퓨터들을 지나기 때문에 누군가가 중간에서 정보를 훔쳐볼 가능성이 언제나 존재합니다. 그리고 인터넷 상을 통한 정보 전송의 경로는 우리가 맘대로 제어할 수 없기 때문에 안전한 경로가 있다고 해도 그 안전한 경로를 통해 전송 할 수 있다는 보장이 없습니다.

네트워크상의 정보에 대한 보안은 매우 중요한 문제입니다. SSL은 바로 이런 요구를 위해 만들어 졌습니다. 따라서 인터넷 같은 컴퓨터 네트워크 환경이 더 발전하고, 전자 상거래 같은 보안이 요구되는 사이트가 많아 질 수록 SSL의 역할은 더욱 커진다고 할 수 있습니다.

SSL/TLS가 제공해 주는 것들

SSL을 한마디로 표현 하자면 보안을 제공하는 통신 프로토콜 이라고 할 수 있습니다. 인터넷 같은 컴퓨터 네트워크간의 통신에 보안 기능을 제공해 줍니다. 따라서 앞서 설명한 인터넷 상을 통한 전자 상거래에 매우 필요한 암호화 방법이라고 할 수 있습니다.

SSL은 개발 초기에 이런 인터넷 웹 상의 전자 상거래의 보안을 위해 설계 되었습니다. 하지만 실제로 SSL은 웹 환경 뿐만 아니라 많은 다른 통신상의 보안을 요하는 어플리케이션 분야에서 사용 할 수 있습니다. SSL이 제공하는 보안, 즉 암호화 모델을 더 자세히 설명하면 다음과 같습니다. SSL은 인터넷 같은 네트워크 상에서 다음의 암호화 기능을 제공해 줍니다.

  • 기밀성
  • 무결성
  • 인증
  • 부인방지

SSL은 이 네 가지의 암호화 기능을 웹을 포함한 거의 모든 컴퓨터 통신 환경을 기반으로 제공해 주는 것입니다.

SSL/TLS 구조

  • 애플리케이션 계층와 트렌스포트 계층 사이에 존재합니다.
  • 다른 컴퓨터로 전송할때 그림 속 빨간상자의 계층에서 암호화 작업(SSL/TLS)이 이루어지고 전송계층으로 넘어가게 됩니다.

(각각의 프로토콜은 추후에 SSL/TLS만 따로 다룰때 세부적으로 살펴보도록 하겠습니다.)

SSL/TLS 동작

각각의 프로토콜 중 Handshake Protocol은 SSL/TLS 동작의 대부분이 여기에 해당 됩니다.

ChangeCipherSpec Protocol은 ChangeCipherSpec 메시지를 위해서만 사용되고, Alert Protocol은 Alert 메시지를 위해서만사용 되지만 Handshake Protocol 안에는 매우 많은 종류의 메시지가 있습니다.

Handshake 동작 과정을 간단하게 알아보겠습니다.

ClientHello

  • 클라이언트가 이 메시지를 보냄으로 해서 통신이 시작됩니다. 즉 이 메시지는 통신의 시작을 알립니다.
  • 클라이언트는 자신이 지원할 수 있는 암호화 알고리즘의 리스트를 이 메시지를 통해 서버에게 알립니다.

ServerHello

  • 서버는 이 메시지로 클라이언트에게 응답을 보냅니다.
  • 서버는 받은 ClientHello 메시지 안의 암호화 알고리즘 중에서 자신이 지원 가능한 알고리즘을 선정해 ServerHello 메시지에 넣어서 클라이언트에게 보냅니다.

ServerKeyExchange

  • 서버는 이 메시지 안에 자신의 공개키를 넣어서 클라이언트에게 보냅니다.

ServerHelloDone

  • 서버는 자신의 초기화 협상 단계가 끝났다는 것을 클라이언트에게 이 메시지를 통해 알립니다.

ClientKeyExchange

  • 클라이언트는 비밀키를 생성합니다. 이 비밀키는 앞으로의 암호화 통신 때 클라이언트와 서버 간의 데이터를 암호화/복호화 하는데 사용 될 것입니다.
  • 클라이언트는 ServerKeyExchange 메시지를 통해 얻은 서버의 공개키로 비밀키를 암호화해서 이 ClientKeyExchange 메시지에 넣어 서버에게 전송합니다.

ChangeCipherSpec

  • 클라이언트는 이 메시지를 보냄으로 해서 지금까지 정해진 암호화 파라미터들(암호화 알고리즘, 비밀키)을 실제로 적용합니다.
  • 지금까지 정한 암호화 파라미터를 정말로 사용하겠다는 확답입니다.

Finished

  • 암호화 파라미터들의 협상을 종료 하겠다는 신호로 서버에게 메시지를 보냅니다.

ChangeCipherSpec

  • 서버는 이 메시지를 보냄으로 해서 지금까지 정해진 암호화 파라미터들(암호화 알고지름, 비밀키)을 실제로 적용합니다.
  • 지금까지 정한 암호화 파라미터를 정말로 사용하겠다는 확답입니다.

Finished

  • 암호화 파라미터들의 협상을 종료 하겠다는 신호로 클라이언트에게 메시지를 보냅니다.

간단하게 말하자면 이 동작의 핵심은 통신자끼리 어떻게 동일한 키를 안전하게 공유하는지가 핵심입니다.

전자메일

SMTP(Simple Mail Transfer Protocol)

포트번호는 25번을 사용합니다.

SMTP는 텍스트 기반의 프로토콜로서 요구/응답 메시지뿐 아니라 모든 문자가 7bit ASCII로 되어있어야 한다.

  • 첨부파일, 바이너리는 불가합니다.

간단하게 말하자면 이메일을 발신하는 역할을 합니다

SMTP 프로토콜의 절차

빨간 박스

  • 보낸이와 받는이를 서버에게 알리고 서버로부터 응답을 받습니다.
  • 응답이 완료되면 메시지 데이터를 서버에게 넘겨주고 통신을 해제 합니다.

(하나의 과정마다 반복적으로 서버와 통신하여 요청과 응답을 반복합니다.)

파란 박스

  • 이제 서버에게 A가 보낸 메시지가 존재하므로 서버가 클라이언트가 되고 메시지를 받는 측(B)이 서버의 역할을 하게 됩니다.

MTA/MUA

  • 전자메일 서비스에서는 메일 서버에 해당하는 프로그램을 MTA(Mail Transfer Agent)
  • 메일 클라이언트에 해당하는 프로그램을 MUA(Mail Agent)라고 합니다.

POP3(Post Office Protocol Version3)

  • 응용 계층 인터넷 프로토콜 중 하나로, 원격 서버로부터 TCP/IP 연결을 통해 이메일을 가져오는데 사용됩니다.
  • 사용하는 포트번호는 110번입니다.
  • POP는 원격 서버에 접속하여 이메일을 가져온 후, 서버에서 이메일을 삭제합니다.
  • 구현이 쉽고 많은 클라이언트에서 지원한다는 장점이 있지만, 이메일을 가져온 후, 서버에서 이메일을 삭제하기 때문에 서버에선 더 이상 메일을 확인할 수 없습니다.

간단하게 말해서 서버에 있는 메시지를 확인하는 역할을 합니다.

POP3 프로토콜 절차

SMTP에서 살펴보았던 그림에서 파란박스의 과정에 들어가보면 또 다시 빨간 박스의 작업을 클라이언트와 서버관계로 메시지를 받는 입장에서 진행됩니다.

서버로부터 받는 사람의 이메일 주소를 확인합니다

서버로부터 비밀번호를 확인합니다.

로그인 후 메일을 열어 볼 수 있게 됩니다. 볼 수도 있고 삭제할 수도 있습니다.

IMAP(Internet Message Access Protocol)

  • SMTP와 POP의 기능을 합친 프로토콜입니다.
  • 포트번호는 143입니다.
  • 메일을 서버 상에서 관리하는 것이 특징입니다

어디서든 메일을 읽을 수 있다

메일 크기가 커도 클라이언트에게 부담이 가지 않는다.

IMAP와 POP3

간단하게 정리를 해보자

MIME(Multipurpose Internet Mail Extensions)

기본적으로 인터넷 전자 우편 전송 프로토콜인 SMTP는 7비트 ASCII 문자만을 지원합니다. 이것은 7비트 ASCII 문자로 표현할 수 없는 영어 이외의 언어로 쓰인 전자 우편은 제대로 전송될 수 없다는 것을 의미합니다.

MIME은 ASCII가 아닌 문자 인코딩을 이용해 영어가 아닌 다른 언어로 된 전자 우편을 보낼 수 있는 방식을 정의합니다. 또한 그림, 음악, 영화, 컴퓨터 프로그램과 같은 8비트짜리 이진 파일을 전자 우편으로 보낼 수 있도록 합니다.

MIME는 정해진 원칙에 따라 파일을 US-ASCII 문자열로 인코딩하고 어떻게 인코딩했는지에 대한 정보를 첨부해서 수신인에게 보냄으로써 수신측이 올바른 방법으로 디코딩할 수 있도록 합니다.

  • 인코딩 : 일반적으로 사람이 이해하는 언어를 컴퓨터가 이해하는 언어(문자 코드)로 변환하는 것입니다.
  • 디코딩 : 컴퓨터가 이해하는 언어를 다시 사람이 이해하는 언어로 바꾸는 것입니다.

출처 : https://www.ahnlab.com/kr/site/securityinfo/secunews/secuNewsView.do?seq=8494

MINE 중에서도 Base64 방식이 많이 사용되고 있습니다.

Base64

8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념입니다.

원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이고, 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다.

즉, 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않습니다.

--

--