통신을 필요로하는 다양한 application이 있다.
ex) e-mail, web, text message, voice talk, streaming stored video
다양한 application들은 end system(host)에서 돌아가는 프로그램이다.
ex) 웹브라우저(application)가 network를 통해 web server와 통신한다.
이런 응용들은 network core device를 고려하지 않고 개발 된다. (통신 중간에 무슨일이 일어날지 신경쓸 필요가 없다.)
오직 end system인 host와 server만 고려하면 된다. 이런 구조가, 빠른 서비스 개발이 가능하도록 했고 인터넷 발전의 박차를 가했다.
1. client server architecture
server : always-on, 영구적인 ip, 많은 사용자를 고려하여 cluster구조를 이룬다(data centers for scaling)
client : 서버와 통신하는 사용자에 해당한다. ip가 얼마든지 바뀔 수 있고 필요에 따라 그때 그때 접속, client끼리 직접 통신을 하지 않는다.
서버의 규모에 따라 capacity가 결정된다.
2. P2P architecture
임의의 두 end system끼리 직접 통신을 한다. 어떤 호스트도 동시에 server, client가 될 수 있다.
토렌트를 생각하면 된다. 내가 파일을 내려받으면서도 동시에 배포자가 될 수 있다.
한 peer가 다른 peer에게 서비스를 요청하고 응답을 받는다.
최소한의 기능을 수행할 server를 제외하면 이상적으로는 always on server가 필요 없다.
peer가 많을수록 capacity가 커진다.
peer는 ip가 얼마든지 바뀔수 있고 그때 그때 필요에 따라 접속하기 때문에 p2p서비스는 management가 server-client보다 더 복잡하다.
ex) bitcoin, bitTorrent, kankan
3. Process communicating
Process는 host에서 돌고있는 프로그램이다. (프로그램의 인스턴스이다.)
동일한 호스트 내에서 따로 돌아가는 process끼리 inter process communication(IPC) 혹은 message를 통해 통신할 수 있다.
서로 다른 호스트의 프로세스끼리 message를 주고받을 수 있다.
client는 통신을 initiate하는 process이고 contact를 기다리고 있는 process가 server이다.
보통 p2p architecture의 application은 client, server process 둘다 가지고 있다.
4. Socket
비유하자면 문이다. 프로세스는 message를 소켓을 통해 주고 받는다.
소켓은 우리가 application layer와 transport layer 사이의 api이다.
transport 이하 계층은 os에 의해 관리된다.
physical layer의 일부는 device driver(os), firmware(hw, 랜카드 등에 들어가는 sw)에 의해 통제된다.
모든 process가 각자를 식별할 ip를 갖는게 아니다.
host는 식별가능한 하나의 ip를 가지고 있고 process구분은 port number를 사용한다.
대표적으로 몇가지를 소개한다.
Http server : 80
mail server : 25
ssh server : 22
Bitcoin : 8333
예를들어 www.google.com으로 HTTP 메시지를 보내고 싶다면 IP 주소 xxx.xxx.xx.xxx와 포트번호 80을 사용한다.
5. Application layer protocol
application layer는 request, response 인지 구분하고 message 필드의 값들과 문법을 확인한다.
보통은 HTTP, FTP처럼 공유,공개된 standard protocol을 사용해서 서로 다른 회사의 server os, browser일지라도 통신을 가능하게 한다.
하지만 독립적으로 구축한 protocol을 사용하는 Skype같은 서비스도 있다.
6. Transport service
application layer는 소켓을 통해 전송 부분은 transport service에 의존한다고 했다.(Transport layer계층에 있는 프로토콜)
transport service가 무엇이 있는지 살펴본다.
- file전송, web transaction처럼 100% 신뢰성있는 data 전송이 요구될 수 있다. 반대로 약간의 loss는 감수할 수 있는 audio, facetime 같은 서비스도 있다.
- 아니면 전송 order가 중요한 서비스가 있을 수 있다.
- 거의 즉각적인 low delay의 전송이 필요할 수 있다. (통화) LoL같은 게임에서도 반응속도는 매우 중요하다.
- 실시간 고화질의 영상을 보고 싶다면 최소한의 throughput이 보장되어야 할수도 있다.
- 보안이 중요한 통신
즉 이렇게 신뢰성, 시간, throughput, security 성격은 application이 필요로하는 서비스이고 이 서비스는 transport layer가 제공한다.
*참고로 delay, timing(jitter), throughput, in-order 개념을 짚고가자.
첫번째 경우
송신자가 보낸 패킷이 수신자에게 도달하는데 걸리는 시간이 delay이다.
송신자가 보낸 순서대로 패킷이 도달한다 (in order delivery)
패킷이 수신되는 시간 텀이 규칙적이다 (perfect timing, low gitter)
두번째 경우
분명히 4번을 5번보다 먼저 보냈는데 도달은 역순으로 했다.(out of order delivery) 해당 패킷에 오류가 발생한 경우 외에도 패킷마다 찾은 경로가 다르면 수신되는 순서도 얼마든지 다를 수 있다.
패킷이 수신되는 시간 텀도 불규칙하다 (high variation in delay, high gitter)
세번째 경우
같은 시간동안 세번째 경우(delay는 더 길었음에도 불구하고)는 첫번째 경우보다 2배가까이 많은 패킷을 보낼 수 있었다. (high throughput)
참고로 throughput이 높다는 거지 상황에 따라서는 반드시 빠르다고 할 수 없다. 왜냐면 첫번째보다 delay가 길기 때문이다.
perfect timing, low gitter
'ComputerScience > Network' 카테고리의 다른 글
Socket programming (Python) (0) | 2022.03.21 |
---|---|
Application Layer - 2. transport layer service, TCP/UDP (0) | 2022.03.21 |
Wireshark : Sniff HTTP traffic (0) | 2022.03.14 |
History of Computer Networking and the Internet (0) | 2022.03.14 |
Protocol layers, service models (0) | 2022.03.14 |