새소식

컴퓨터 네트워크

[컴퓨터 네트워크]응용 계층 (Application Layer)의 뜻과 프로토콜

  • -
728x90
  • 애플리케이션의 원리
  • 웹(Web)과 HTTP
  • E-mail, SMTP, IMAP
  • 도메인 네임 시스템 DNS
  • P2P 애플리케이션
  • 비디오 스트리밍과 콘텐츠 배포 네트워크
  • UDP와 TCP를 활용한 소켓 프로그래밍

 

 

응용계층이란?

응용계층이란, 인터넷 프로토골과 네트워크를 연결하는 프로세스 간의 데이터 연결을 통해 설계된 추상 계층이다. 응용계층 프로토콜은 전송 프로토콜을 사용하며, 호스트 사이를 연결한다.

대표적인 예

 

Web

 

 

E-mail

 

 

DNS

 

 

우리가 프로그래밍을 짠다는 것은.

  • 서버와 네트워크 사이에 있는 프로세스를 연결시켜 서비스를 활성화시키는 것
  • 중간중간의 라우터들을 위한 코드가 필요 없다.(응용계층에 필요한 프로그래밍을 하는 것

 

클라이언트  - 서버 패러다임

  • 서버란 항상 켜져있어야 한다. (소비자가 언제든지 쓸 수 있도록)
  • IP 주소가 고정되어 있어야 한다. 
  • 흔히 데이터 센터를 활용한다. 아마존의 AWS를 생각하면 쉽겠다.

 

클라이언트 (소비자) 패러다임

  • 클라이언트는 서버와 상호작용한다.
  • 필요할 때만 간헐적으로 연결이 된다.
  • IP주소가 다양하다. (어느 인터넷을 활용하더라도 사용 가능하다는 것)
  • 서로 직접적으로 네트워크 간 연결되지 않는다.(서버를 활용하니까)

 

Peer-Peer architecture (피어 투 피어 구조)

  • 항상 켜져 있는 서버는 없고
  • 임의의 앤드 시스템들끼리 서로 통신을 한다.(소비자들의 기기들끼리 직접적으로 연결이 된다는 것)
  • 토렌트 같은 프로그램을 생각하면 쉽겠다. (peer 들끼리 서로 정보를 주고받지 않는가?)
  • 네트워크가 측정 가능하다. (토렌트에서 현재 정보를 공유해주는 사람이 몇 명인지 알 수 있지 않는가?) 이런 걸 self scalability라 칭한다.
  • 피어들은 서로 연결이 순간순간 이루어지며, IP주소가 바뀔 수 있다. (우리가 토렌트를 깐 노트북을 들고 집 앞 카페에서 토렌트를 사용한다고 생각해보자.)

 

Processes Communicating

  • 프로세스란 : 내가 프로그래밍을 돌리고 있는 것. 
  • 하나의 호스트 내에 여러 개의 프로세스가 구동 가능하고, 이들 간의 연결이 가능하다.(inter-process communication)
  • 서로 다른 호스트 내의 커뮤니케이션이 가능하다 (peer to peer처럼 한 순간에 공급자, 한 순간은 피 공급자 가 될 수 있다.)

 

 

프로세스들은 어떤 경로를 통해 정보를 주고받나?

- 소켓 (집안의 문이라고 생각하면 된다.)

 

 

포트 넘버란?

  • 16비트로 이루어져 있다.
  • TCP헤더를 보면, 16비트로 소스의 포트 넘버, 또 다른 16비트가 도착지의 포트 넘버 
  • 16bit = 2^16 =대략 6만 오천 개
  • 하나의 프로세스별로 하나의 포트 넘버를 할당할 수 있는데
  • 그중에 1000 이하의 포트 넘버를 같은 유명한 포트넘 버들은 유명한 프로토콜이 쓰도록 예약되어 있다.
  • 새로운 프로그램을 만들 때, 우리는 포트 넘버를 지정할 수 있는데, 1000 이하는 유명하기 때문에 우리는 1000 이상의 값을 쓰도록 해야 한다.

 

응용 계층 프로토콜

  • 주고받을 타입이 정해져 있다. (response, request)
  • 문법이 정해져 있다.(예를 들자면 헤더를 몇 개로 나눌 것인가, 헤드들의 각 의미는 무엇인가 이미 정해져 있어)
  • 법칙이 정해져 있다. 

오픈  프로토콜

  • RFCs에 대부분의 프로토콜이 오픈되어 있다.(ietf.org에 들어가 검색해보자.)
  • HTTP, SMTP처럼 
  • Skype, Zoom 같은 경우는 프로토콜이 공개되어있지 않다.

응용 서비스가 제대로 이루어지려면 전송 서비스에서 어떻게 일을 해야 할까?

  • data integrity 데이터가 온전히 전달되어야 한다. 이를 영어로 'reliable'이라고 부르기도 한다. (하지만 오디오 파일 같은 경우는 좀 깨져도 상관없겠지)
  • timing '즉시성'  딜레이가 거의 없어야 한다. 이와 반대로 이메일은 좀 늦어도 괜찮겠지?
  • throughput '유지 성?' 꾸준히 일정량의 데이터를 쏴야 할 때, ex) youtube.com
  • security '보안' 암호화(TCP에서는 아예 제공하지 않았는데, 이제 TCP가 암호화 기능을 갖춘 게 TLS), 데이터 완전성 
TCP service UDP service
- 믿을 만한 정보 전송 
- 플로우 컨트롤, 보내는 정보가 받을 수 있는 정보량을 절대 넘지 않는다.
- congestion control 네트워크 내부의 데이터를 라우터들이 힘들어할때, 해당 데이터들을 받아서 sender와 reciever 사이의 전송 속도를 조정하는 방식
-connetion-oriented : 서버 프로세스와 클라이언트의 앤드 시스템 사이의 효율 개선을 위해 사용됨


- 미 제공 기능 -
timing guaranty : 시간을 보장하지 안흔다.
minimum throughput : 꾸준한 데이터 전송을 보장하지 않는다.
unreliable data transfer : 데이터가 온전하지 않을 수 있기 때문에 온전한 데이터 전송이 필요하다면, TCP protocol을 사용해야 한다.





- 미 제공 기능 -
신뢰성, 혼잡 해결성, 시간, 최저 전송, 보안

이렇게만 보았을 때는 TCP가 훨씬 좋아 보인다. 그렇다면 UDP를 왜 사용하는가?

 

internet telephony, internet games와 같이 태생적으로 TCP가 해줄 수 없는 것들을 지원한다.

 

실시간 전송이라던지, 오류가 나면 안 되는 정보라든지.  UDP를 사용할 수밖에 없다. 우리가 롤이나 오버워치를 하는데, 끊김이 하나도 없는 대신, 상대방의 화면과 나의 화면이 다르게 송출된다고 생각해보자.

 

 

5G 또한 슬로건으로 'Ultra reliable' 'Law latency'  두 개가 가능할 수가 없는데, 우리가 지금 사용하는 것이다.

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.