과정을 즐기자

애플리케이션 계층(L7)이 하는 일 본문

Network

애플리케이션 계층(L7)이 하는 일

320Hwany 2023. 8. 10. 15:37

이번 글에서는 저번 글에 이어서 애플리케이션 계층(L7)이 하는 일에 대해 알아보겠습니다.

물리 계층(L1), 데이터 링크 계층(L2), 네트워크 계층(L3), 트랜스포트 계층(L4)이 하는 일은 이전 글들을 참고해주세요

L7 - 애플리케이션 계층

L7은 개발자가 직접 다루는 애플리케이션이 하는 일에만 집중합니다.

하위 계층에서 어떤 프로토콜이 어떻게 동작할 지 모르더라도 개발자는 L7 계층의 프로토콜을 이용하여 애플리케이션을 

만들 수 있습니다. L7의 프로토콜로는 DHCP, DNS, SSH, FTP, STMP, IMAP, HTTP 등이 있습니다.   

지금부터 이러한 프로토콜에 대해서 알아보겠습니다.

DHCP

우리가 사용하는 컴퓨터는 연결된 라우터와 같은 네트워크에서 겹치지 않는 IP 주소를 할당받아야 합니다.

우리가 직접 네트워크 관리자에게 IP 주소를 요청하고 받아와서 설정하는 것은 매우 번거롭습니다.

DHCP는 호스트의 IP를 사용자가 직접 설정하는 것이 아니라 컴퓨터가 적절한 IP로 자동으로 설정해줍니다.

보통 DHCP는 DHCP 서버를 따로 두거나 라우터에 포함되어 있습니다. 

 

IP 주소를 할당받기 위한 컴퓨터는 출발지 IP 주소를 0.0.0.0으로 설정하고 목적지 IP주소는 브로드캐스트 주소를 적습니다.

출발지 MAC 주소는 사용자 컴퓨터에 있는 MAC 주소를 적고 목적지 MAC 주소는 브로드캐스트 주소를 적습니다.

이렇게 호스트가 DHCP 서버에 IP 주소를 요청하기 위해서 브로드캐스트 메세지를 보내는 것을 DHCP Discovery라고 부릅니다.

 

이 메세지를 받은 DHCP 서버는 응답 메세지를 보내는데 출발지 IP 주소는 DHCP 서버의 IP 주소를 적고

목적지 IP 주소는 할당하려는 IP주소를 적습니다.

출발지 MAC 주소는 라우터의 MAC 주소를 적고 목적지 MAC 주소는 요청한 호스트의 MAC 주소를 적습니다.

이렇게 DHCP 서버가 호스트의 요청에 IP 주소를 제안하는 것을 DHCP Offer 라고 부릅니다

 

호스트가 DHCP Offer 메세지를 받으면 다시 호스트는 DHCP 서버로 응답 메세지를 보냅니다.

출발지 IP 주소는 아직 확정되지 않았으므로 0.0.0.0을 적고 목적지 IP 주소는 브로드캐스트 주소를 적습니다.

출발지 MAC 주소는 DHCP의 MAC 주소를 적고 목적지 MAC 주소는 브로드캐스트 주소를 적습니다.

이때 목적지 주소를 브로드캐스트 주소로 적는 이유는 같은 네트워크에 DHCP 서버가 여러 개 있을 수 있기 때문에 

모든 DHCP 서버에 알리기 위해서입니다.

이렇게 DHCP 서버에 해당 IP 주소를 요청하는 것을 DHCP Request 라고 합니다.

 

DHCP Request 메세지가 DHCP 서버에 도착하면 DHCP 서버는 다시 호스트에게 응답 메세지를 보냅니다.

출발지 IP 주소는 DHCP 서버의 IP 주소를 적고 목적지 IP 주소는 호스트에게 할당할 IP 주소를 적습니다.

출발지 MAC 주소는 DHCP 서버의 MAC주소를 적고 목적지 MAC 주소는 호스트의 MAC 주소를 적습니다.

이렇게 최종적으로 해당 IP를 할당한다고 알리는 것을 DHCP ACK 이라고 합니다.

DNS

DNS(Domain Name System)는 사용자가 도메인명을 입력하면 자동으로 해당 도메인의 IP 주소가 저장되어 있는

데이터베이스 서버로 연결되어 해당 도메인의 IP 주소를 알게해줍니다.

호스트가 다른 도메인명을 모두 가지고 있는 것이 아니라 분산된 데이터베이스에 그때마다 물어보는 것입니다.

이 데이터베이스 서버를 네임 서버라고 합니다.

 

이제 www.google.com을 검색할 때 DNS에 어떤 일이 일어나는지를 살펴보겠습니다.

검색을 하면 가장 먼저 호스트의 컴퓨터에서 hosts 파일을 열어서 www.google.com이 있는 지 확인합니다. 

hosts 파일에 없다면 아래 그림과 같이 가까운 네임 서버에 요청하고 없다면 루트 네임 서버로 루트에도 없다면

com 네임 서버로 com에도 없다면 google 네임 서버로 요청해서 IP 주소를 알아낸 후 호스트에게 알려줍니다.

 

Telnet과 SSH

Telnet과 SSH는 원격 로그인과 관련된 개념으로 이 프로토콜들을 이용하면 다른 컴퓨터 앞에 직접 가지 않더라도

네트워크로 연결되어 멀리 떨어진 컴퓨터에도 로그인할 수 있습니다.

Telnet은 TCP 커넥션 하나를 이용해 원격 컴퓨터에 로그인하고 우리 컴퓨터에서의 입력이 상대방 컴퓨터로 전송되어 

상대방 컴퓨터가 실행됩니다. 하지만 Telnet은 로그인할 때 비밀번호가 암호화되지 않고 그대로 전송되기 때문에

보안성이 취약합니다. 이런 이유로 암호화를 사용하는 SSH(Secure SHell)가 만들어졌습니다.

 

SSH는 암호화를 하여 전송하기 때문에 중간에 탈취하더라도 내용을 알기 어렵습니다.

또한 SSH는 Key를 이용해 로그인할 수도 있습니다.

멀리 있는 컴퓨터에 접속하기 위해서 우리 컴퓨터에 2개의 Key를 생성합니다.

하나는 외부에 절대 공개되면 안되는 Private Key 로 우리 컴퓨터에만 저장되어야 합니다.

다른 하나는 외부에 공개되어도 되는 Public Key 입니다.

Public Key는 데이터를 암호화할 수 있고 Private Key는 암호화된 데이터를 복호화할 수 있습니다.

원격에 있는 컴퓨터에 Public Key를 알려줍니다.

이제 우리 컴퓨터에서 원격에 있는 컴퓨터에 로그인을 요청하면 원격에 있는 컴퓨터는 랜덤한 문자열을 Public Key를 

이용해 암호화하고 우리 컴퓨터에 전송합니다. 우리 컴퓨터의 Private Key를 가지고 이 암호화된 문자열을 복호화하여

원격 컴퓨터에 전송하고 원격 컴퓨터는 해당 문자열이 일치하는 지 확인한 후 일치하면 인증을 완료합니다.

FTP

FTP를 이용하면 파일 서버에 접속해 파일을 업로드, 다운로드할 수 있습니다.

FTP는 연결을 위해 2개의 TCP 커넥션을 생성합니다.

하나는 제어용이고 다른 하나는 데이터 전송용으로 제어용을 통해 명령어를 전송하고 전송용으로는 파일 데이터를 전송합니다.

최근에는 Amazon S3 같은 클라우드 서비스를 이용하여 외부에 파일을 저장합니다.

이 서버를 FTP 서버로 설정하면 외부에서 FTP 클라이언트로 파일을 다운받을 수 있도록 할 수 있습니다.

사용자가 TCP, UDP로 파일을 전송할 수도 있지만 대량의 파일을 효율적으로 전송할 때는 FTP를 주로 사용합니다.

SMTP, POP, IMAP

SMTP는 이메일을 전송할 때 사용하는 프로토콜입니다.

이메일이 처음 개발됐을 때는 SMTP 만을 이용해 송신자와 수신자가 TCP로 커넥션을 확립한 상태로 통신했습니다.   

송신자가 이메일을 보내면 수신자의 하드디스크에 저장되고 수신자는 하드디스크에 저장된 이메일을 확인했습니다.

하지만 이 방식은 수신자가 컴퓨터를 켜놓지 않으면 TCP 커넥션이 끊어지고 이메일을 받을 수 없다는 문제가 있습니다.

 

따라서 항상 전원이 들어와있는 메일 서버라는 것을 만들고 송신자는 이 메일 서버로 SMTP를 이용해 TCP로 이메일을 보내는 

방식으로 개선했습니다. 수신자는 송신자로부터 바로 이메일을 받는 것이 아니라 메일 서버를 연결해서 받게 되는데

이때 POP 라는 프로토콜을 이용합니다. 수신측에서는 TCP를 이용하는 POP을 통해 메일 서버에서 자신에게 온 이메일을

하드디스크에 저장하고 메일 서버에서는 이 내용을 삭제합니다. 이메일을 모두 수신측에서 관리하는 방식으로 

사용자가 다른 컴퓨터나 핸드폰을 이용하는 경우 동기화가 쉽지 않다는 단점이 있습니다.   

 

따라서 IMAP(Internet Message Access Protocol) 이라는 프로토콜이 등장했습니다.

IMAP 은 메일 서버에 도착한 이메일을 수신측에서 읽더라도 삭제하지 않습니다.

따라서 사용자가 PC, 핸드폰, 태블릿으로 접근해도 읽었는지 읽지 않았는지 등 메일에 대한 정보를 동기화하기 쉽습니다.

서버에 부하가 많이 발생한다는 단점이 있지만 동기화하기 쉽기 때문에 POP 보다 더 많이 사용되는 방식입니다.  

SMTP, POP, IMAP 모두 TCP를 이용해 커넥션을 확립한 후 데이터를 송수신하는 프로토콜입니다.

SMTP는 메일 서버에 송신, POP과 IMAP은 메일 서버로부터 수신합니다.

SMTP는 TCP 25번 포트, POP은 TCP 110번 포트, IMAP은 TCP 143번 포트를 사용합니다.

HTTP

 

웹 브라우저가 메세지를 만든다(feat. HTTP, DNS, OS 프로토콜 스택, 소켓)

이 글은 '성공과 실패를 결정하는 1%의 네트워크 원리' 책의 1장으로 보고 정리한 내용입니다. HTTP Request Message를 작성한다 먼저 사용자가 브라우저에 URL을 입력합니다. URL에는 프로토콜, 웹서버

320hwany.tistory.com

HTTP는 이전 글들에서 다룬 적이 있으므로 이번 글에서는 버전 별 특징에 대해서만 알아보겠습니다.

HTTP 버전 1에서는 요청이 있을 때마다 TCP 커넥션을 만들고 끊다보니 비효율적이었습니다.

HTTP 버전 1.1에서는 이를 개선하여 하나의 TCP 커넥션을 이용해 여러 번 통신할 수 있도록 하였습니다.

HTTP 버전 2에서는 더 많은 데이터를 한번에 보내는 다중 전송을 이용해 더 빠른 전송이 가능해졌습니다.

HTTP 버전 3에서는 TCP가 아니라 UDP를 이용해 더 빠른 전송 속도를 제공합니다.

Proxy 서버

프록시 서버는 클라이언트가 다른 네트워크에 있는 서버에 더 빠르게 접근할 수 있도록 해주는 서버를 말합니다.

네트워크의 혼잡도를 줄여주기도 합니다.

만약에 유튜브가 한국에서 발생하는 트래픽이 많다면 트래픽이 미국까지 가지 않고 한국에 캐시 서버인 프록시 서버를

설치할 수 있습니다.이제 우리가 유튜브에 검색을 한다면 먼저 프록시 서버에 해당 데이터가 있는지 찾습니다.

만약 있다면 그 데이터를 보여주고없다면 미국에 있는 서버에서 데이터를 직접 가져와 프록시 서버에 저장해두고

이 데이터를 전송해줍니다. 이렇게 함으로써 응답속도가 빨라질 수 있습니다.

프록시 서버는 이렇게 캐시 서버로 사용될 수도 있고 인터넷 검열이 있는 나라에서 검열을 피하기 위해서

자신의 IP를 숨기는 용도로 사용할 수도 있습니다.

 

출처 : 그림으로 배우는 네트워크 (인프런 - 감자), 성공과 실패를 결정하는 1%의 네트워크 원리