지난 시간
인터넷
1.응용계층
2.전송계층
3.네트워크계층
4.링크계층
5.물리계층
ISO/OSI 7계층
목표
클라이언트/서버, 소켓 통신에 대하여 배운다.
CH2. 응용계층
우리의 Application 즉, 응용 프로그램의 구조를 파악해야만, 기존의 presentation layer, session layer를 선택할 수 있는지 알 수 있다.
=> 네트워크 응용의 구조에 대해 알아보자.
1. 네트워크 응용의 구조
1) Client-Server 구조
응용을 서비스해주는 컴퓨터를 따로 두는 구조
ex) 물물 교환 느낌
단점)
- 내가 원하는 상황을 지원할 수 있는 실제 end user를 찾지 못하면 deal은 실패
장점)
- service를 제공하는 곳에 가서 원하는 때에 원하는 service를 구할 수 있음.
대표적인 예)
- 웹 검색 : 구글에 김연아 검색 => 언제나 구글 서비스는 동작 (구글이 항상 서버 켜놓으니까 가능)
2) Peer-to-Peer (p2p)구조
우리가 원하는 파일을 제공하는 사용자가 없으면 그 파일을 협업 형태로 받을수가 없음.
대표적인 예)
3) 하이브리드 구조
ex) Skype(인터넷 전화 통화), 카톡
- 모든 서비스에 서버가 관여할 수록 서버 부하가 높아진다. (ex카톡 전화)
필요할 때는 서버가 관여하고, 전화 통화는 p2p 방식으로. 실제 데이터 음성 통화 전체에 서버가 관여하지 않으면서 통신이 가능해짐. 즉, p2p 구조를 가진다. 직접 전화를 하도록. 전체적인 관리는 서버가 관리하는 client-server 구조.
- Skype: 어떤 사람이 접속을 했고, 안했고, 방식 같은건 서버가 관리. 그러나 정작 통화는 실제 통화하는 연결 자체는 서버가 관여 안함.
- 스타크래프트: 게임 시작 전까지의 모든 관리는 서버가 한다. 실제 게임 자체는 p2p 구조로 간다.
나중에 여러분만의 재밌있는 네트워크 프로토콜을 개발해바라 ~~ 나는 서버가 안정적 동작을 바란다? client-server 구조로 간다. 만약, 영화를 서비스할 때, server가 영화를 제공하니, 안정적이지만, 영화를 갖고 잇고, 모든 사용자에게 하나하나 데이터를 다 관리하니 서버 부하가 커진다. => 아주 옛날 영화는 직접 서버가 서비스를, 그런데 인기있는 블록버스터 영화야 그럼 server는 부하가 많아지기 때문에 이미 제공한 a한테 노거 b한테 서비스해 이런식으로 ,, a 사용자의 용량 문제가 대두돼서 이제는 금지긴 함.
2. 프로세스간 통신
전송 계층은 기본적으로 통신 기법에 대한 방법론을 제공. 응용계층 설계 위해선, 전송 계층이 어떤 방식으로 지원하는지 알아야함.
응용
: 네트워크로 연결된 컴퓨터들이 협의하에 제공하는 서비스.
ex) 구글 검색,
프로세스
: 하나의 컴퓨터에서 독립된 메모리 공간을 가지고 수행되고 있는 프로그램의 단위.
프로그램을 실행시키면 하나의 프로세스로 동작.
구글 클릭 => 웹 브라우저 => 웹 서버
- 응용: 하나 전체를 아우르는 것을, 하나의 응용을 이루게 된 것이라고 함.
- 프로세스 : 그것을 구성하는 독립적인 프로그램
프로세스 간 통신이라고 하는 것은,
- 응용을 이룰 때 어떻게 웹 브라우저가 웹서버와 통신하게 될 것이냐 !
프로세스 종류
- 클라이언트 프로세스
- 서버 프로세스
서비스를 제공 받기도 하지만 , 제공 하기도 하기 때문에 client라고 하는 것이 아니라 3.피어
프로그램(피어 프로세스 (만약 활성화되어있다면))이라고 함.
프로세스간에 통신을 하기 위해서 전송계층의 도움이 필요함.
근데 우선 그 도움 받기 전에 어떻게 프로세스를 찾을 것인가 부터 생각해보자 !
3. 프로세스 주소
: 프로세스는 특정 기계에서 돌아가는 프로그램.
1) 기계주소
- IP
- xxx.xxx.xxx.xxx 이런 형태를 가짐. (ex) 176.37.1.4)
- xxx는 0~255 숫자를 갖는 특정 정수값임.
- 원칙적으로는 이 주소로, 어떤 컴퓨터 ! 이렇게 지정할 수 있어야함. => 하지만 표현 수 한계(40억)
- 구청에서 서비스를 받고 싶을 때, 우리가 우선적으로 알아야 할게 구청의 주소를 알아야 거기를 감.
2) 포트번호
- TCP, UDP 서비스 각각 2^16개 포트를 열수 있음.
- 구청간다고 무조건 서비스 받을 수 있는 거 아님. 거기서 해당 서비스를 찾아야돼
웹브라우저 포트 번호는 안정해져있고,
웹서버 포트 번호는 80,443으로 정해져있다.
- 웹 브라우저는 서버의 ip주소와 포트번호에게 http 요청을 보낼 때, 자신의 ip주소와 포트번호를 같이 보낸다.
- 웹서버는 이 주소를 받고 해당 프로세스인 웹브라우저에게 응답한다.
=> 서로 간 포트번호와 ip주소를 알고 있으면 통신이 가능해진다.
그런데, !!!
매번 통신할 때마다 웹서버 짜는 사람이 패킷을 보고, 보내는 사람 확인하고, 응답 하고 이런식으로 프로그램 짜면 굉장히 불편하다.
- 프로세스간 통신을 위해 제공되는 응용계층을 위한 API 가 있다 => 소켓
4. 소켓 통신
웹브라우저
- 포트 번호 안정해져도 됨. 항상 언제나 웹서버에 먼저 접속하기 때문임
웹 서버
- 포트 번호 80
웹 브라우저 => 웹 서버
- 보내는 이:기계 주소 + 포트번호 , 받는 이: 기계 주소 + 포트번호 를 써서 보냄.
- 근데 계속 통신할 텐데 똑같은 정보를 계속 보내는 불편함
=> private channel
=> 소켓
이 뿅 생김!
소켓
- 소켓을 재활용
- 굳이 매번 다른 내용 요청할 때마다 새롭게 쓸 필요 없음.
- 소켓 객체를 이용해서 통신을 하면 내가 굳이 접속한 상대가 누군지 기억할 필요 없이 똑같은 상대와 통신하면 됨.