- 애플리케이션의 원리
- 웹(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' 두 개가 가능할 수가 없는데, 우리가 지금 사용하는 것이다.