2022 01 20
2022-01-20¶
네트워크 - 응용 계층 소개¶
-
저번 뉴스레터에서 TCP/IP 5계층에 대해 알아봤어요. 이제 계층별 역할과 계층별로 사용되는 프로토콜에 대해 알아볼 텐데요! 가장 먼저 알아볼 계층은 바로 응용 계층이에요. 응용 계층은 서로 다른 엔드 시스템의 어플리케이션 간에 정보를 교환하는 역할을 수행해요. 말이 조금 어렵죠? 이번 뉴스레터에서는 응용 계층이 어떤 일을, 어떻게 하는지 알아봅시다. 💪💪
-
서로 다른 엔드 시스템의 어플리케이션 간에 정보를 교환한다는 것은 서로 다른 엔드 시스템의 프로세스끼리 통신하는 것을 뜻해요. 응용 계층은 서로 다른 컴퓨터의 프로세스가 정보를 교환하도록 지원하는 계층이라는 것이죠. 서로 다른 프로세스가 정보를 주고받기 위해서는 공통된 언어가 필요할 텐데요! 이때 주고 받을 메시지의 규칙을 정의한 것이 응용 계층에서의 프로토콜이에요. 즉, 응용 계층의 프로토콜을 따르면 서로 다른 프로세스가 이해할 수 있는 메시지를 주고 받을 수 있어요!
-
메시지를 주고받을 프로세스가 어떤 프로그램이냐에 따라 메시지의 규칙 (프로토콜) 도 달라져요. 웹 서비스에서 사용하는 메시지와 이메일 서비스에서 사용하는 메시지는 각각 다른 규칙을 가지거든요. 응용 어플리케이션이 다양하다 보니, 응용 계층에는 많은 프로토콜이 있어요. 대표적으로 HTTP(웹), SMTP/POP3(이메일), DNS(도메인 네임 시스템), FTP(파일 전송) 등이 있죠.
-
이때 서비스를 사용하고자 먼저 요청을 보내는 프로세스를 클라이언트라고 해요. 반대로 서비스를 제공하는 프로세스를 서버라고 하고요. 가장 대표적으로는 웹 브라우저 (클라이언트) - 웹 서버 (서버) 를 생각해볼 수 있어요! 우리가 크롬을 켜 주소창에 네이버를 입력해 접속하는 것이 요청을 보내는 프로세스가 클라이언트인 것이고, 요청을 받아 네이버 화면을 반환해주는 네이버 서버 프로세스가 서버인 것이죠.
-
소켓은 응용 계층과 전송 계층 사이의 연결고리 (소프트웨어 인터페이스) 인데요. 응용 계층의 프로토콜에 따라 작성된 클라이언트의 메시지는 소켓을 통해 전송 계층으로 넘어가요. 서버에서는 해당 메시지가 소켓을 통해 전송 계층에서 응용 계층으로 넘어오죠. 소켓을 통해 프로세스 간의 통신이 수립되는데요. 이때 소켓은 클라이언트의 IP 주소/Port 번호, 서버의 IP 주소/Port 번호, 그리고 전송계층의 프로토콜을 사용해요.
(소켓에 대해서는 추후에 더 알아봐요) -
응용 계층에서는 엔드 시스템의 프로세스들이 정보를 주고받을 수 있어요. 프로세스는 응용 계층의 프로토콜을 따른 메시지를 만들고, 해당 메시지는 소켓을 통해 전송 계층으로 넘어가는 것이죠. 다음 뉴스레터에서부터 응용 계층의 프로토콜을 하나씩 살펴봐요 🙌
네트워크 - 응용 계층 소개¶
- 응용계층?
- 클라이언트/서버
- 서비스 요청 - 클라이언트
- 서비스 제공 - 서버
- 응용계층이 할 일: 클라이언트의 요청 전달하기 위해 서버가 이해할 수 있는 메시지로 변환하고 전송계층에 전달하는 역할
- 클라이언트 측 어플리케이션과 서버 측 어플리케이션이 통신하려면 응용 계층의 프로토콜을 사용해야 함
- 각 어플리케이션에 대응되는 데이터를 전송하는 역할을 하는게 응용 계층!
- 응용 계층에서 보내려는 데이터가 하위 계층에서 (전송-네트워크-데이터 링크-물리) 처리
- 각 어플리케이션에 대응되는 데이터를 전송하는 역할을 하는게 응용 계층!
- 프로세스 간 통신 접속을 위해 설계되어 통신 프로토콜과 방식을 위해 보유된 추상 계층
- 클라이언트 측 어플리케이션과 서버 측 어플리케이션이 통신하려면 응용 계층의 프로토콜을 사용해야 함
- 트랜스 포트 이하의 계층들은 데이터 전송 담당하기에, 데이터 전송 관련 계층 제외한 건 응용 계층 범주라고 보면 됨
- 클라이언트/서버
- Application Architecture - Client-Server Architecture: 클라이언트 - 서버로 분리됨 - 서버가 다수의 클라이언트의 요청을 처리하기 힘드니 데이터센터를 독립적으로 운영 - 대표적으로 웹 브라우저 - P2P Architecture: 데이터 센터 필요없고 데스크탑/랩탑 유저들에 의해 컨트롤됨 - 파일 쉐어링 - Self Scalability
- 결국 프로그램을 실행해서 엔드 시스템들끼리 통신하는 것은 "프로세스" 끼리 통신하는 것 - 엔드 시스템 사이에 Message를 네트워크를 통해 교류하는 방식 - 주로 두 프로세스 중 먼저 말건 놈을 Client, 대답한 놈을 Server 라고 칭한다. - 프로세스들은 네트워크를 통해 메시지 보내고 받는 것을 Software Interface인 소켓을 통해서 하게 된다.
- 소켓? 소켓이란 Application Layer와 Transport Layer 사이의 인터페이스 - 어플리케이션 개발자는 Application Layer 쪽에서 모든 제어권을 가지고 소켓을 설정 - 하지만 소켓의 Transport Layer 부분은 건들 수 없어 - 소켓으로 메시지를 요청받아야할 프로세스에 똑바로 주기 위해서는 주소가 필요하겠지? - 주소는 IP 주소와 Port 번호로 대표되는데 나중에 살펴보자. - 가장 쉬운 예시로 웹 페이지를 생각하면 19.20.19.20:80
- 소켓을 통해 Transport Layer 프로토콜을 사용할 수 있잖아? - 어플리케이션 개발 할 때 있어서 용도에 알맞은 Transport Layer 프로토콜을 사용하도록 개발해야 해. - 어플리케이션 개발 시 Transport Layer 프로토콜에게 필요한 고려사항 - Reliable Data Transfer - Throughput - Timing - Security
- 인터넷에서 제공되는 Transport Layer Protocol - TCP - Connection-oriented service: 핸드쉐이크를 기반한 연결 지향형 - Reliable Data Transfer Service: 빠지거나 중복되는 바이트 없이 전송 - UDP - Connection Less - 보장 그런거 없음 빠질수도
- 프로세스가 소켓 API를 통해 네트워크를 타고 통신하며, 메시지를 통해 정보를 주고바든다고 했다. - 메시지가 어떻게 구조화 되어있는가? - 메시지의 필드는 뭘 의미하는가? - 언제 프로세스가 메시지 보내는가? - 요런게 Application Layer가 해결할 문제 - 메시지의 종류 - 메시지의 Syntax - 메시지의 semantics - 메시지의 Rules - HTTP, SMTP 등을 하나씩 알아보면서 어플리케이션 레이어의 메시지 구조를 봐보자!
SSL¶
- TCP/UDP 모두 암호화 과정 X
- 메시지가 소켓으로 흘러들어가 메시지가 여기저기서 감청될 수 있음 (여러 링크들에서)
- 그에 따라 인터넷 커뮤니티가 SSL을 개발 (Enhanced TCP)
- TCP-enhanced-with-SSL 을 통해...
- TCP가 제공하는 것 모두 제공
- process-to-process 보안
- 암호화, 데이터 통합, 엔드포인트 Authentication 등
- TCP-enhanced-with-SSL 을 통해...
- SSL의 enhancement는 Application Layer에서 구현됨.
- 따라서 SSL 서비스를 쓰려면 SSL 코드가 클라이언트 - 서버 둘 모두에 있어야 해
- SSL은 TCP 자체 Socket API와 유사한 자체 Socket API가 있음
- SSL Socket API는 메시지를 암호화 하여 TCP Socket API 한테 넘겨주는 방식