본문 바로가기

컴퓨터 네트워크/Computer Networking 정리

CH2 : Application Layer (1)

* 이 글에 관련된 모든 내용은 Computer Networking A Top-Down Approach 7th에서 가져온 내용이다. *

 

어플리케이션 레이어는 우리에게 가장 친숙한 레이어이다.

우리가 사용하는 어떤 service application은 모두 이 레이어에 적용되기 때문이다.

 

program을 개발할때는 네트워크 코어에 대해서(이 end system에 존재하는 app이 다른 end system과 어떻게 통신할지)는 고려하지 않는다. 때문에 app개발은 더욱 더 빠르게 성장할 수 있었다.

 

이 글에서는 Application Layer챕터에서 배울 내용을 간략하게 설명하고 각 내용에 대한 자세한 설명은 뒤 내용에서 한다.

 

Application archtectures


어플리케이션의 구조에는 세가지의 형태가 있다.

 

1. Clinet-Server

2. Peer-to-Peer

3. Hybrid of client-server and P2P

 

위 세가지에 대해서 알아보자.

 

Client-server


클라이언트들이 서버를 통해 소통하는 방식이다.

 

 

Server : 

  - always-on host

  - 영구적인 IP address를 갖는다.

 

Clients : 

  - 서버를 통해 소통한다.

  - 간간히 연결된다.

  - dynamic한 (영구적이지 않은) IP를 가질 수 있다.

  - client끼리의 직접적인 소통은 없다.

 

 

 

 

Pure P2P


server를 통하지 않고 peer간의 직접적인 통신이 일어난다.

 

 

 

 - no always on server

 

 - 서비스 요청을 받은 peer는 요청을 보낸 peer에게 서비스를 직접 제공해준다.

 

 - perr들은 간간히 연결되고 IP주소를 바꾼다. 때문에 복잡한 management가 요구된다.

 

 

 

 

 

 

Hybrid of Client-Server and P2P


Client-Server방식과 Pure P2P방식을 합친 것이다.

기존 Client-Server 방식에서는 server에 직접적인 데이터 저장이 이루어졌다면, 이 방식에서 server는 어디 peer로 갈지에 대한 방향성만 알려준다. 즉, P2P방식을 위해 어디 peer가 해당 정보를 가지고 있는지 위치만 알려주는 셈이다.

 

때문에 이 방식에서 서버는 directory server라고도 불린다.

 

 

Process간의 통신


process간의 통신은 두가지 경우로 나눌 수 있다.

 

1. 같은 host안에 있는 서로 다른 process가 통신하는 경우

  - 이는 OS에서 정의된 Inter-process communication을 통해 통신한다.

2. 다른 host들의 각 process가 서로 통신하는 경우

  - 메시지를 교환하며 통신한다.

 

 

Sockets


socket interface 

 - 어플리케이션과 TCP/UDP 또는 다른 프로토콜 스택 사이에 존재한다. 아직 TCP와 UDP에 대해 배우진 않았지만 이 둘은 Layer4(Transport Layer)에 존재하는 프로토콜이다.

 

- 프로세스는 이 소켓으로부터 또는 소켓으로 메시지를 전달하거나 받는다.

 

 

 

다른 host를 판별하기 위해선 layer3(network layer)에서 IP를 구분하여 한다. 

그렇다면 같은 host안에 있는 프로세스들은 어떻게 구분할까?

이또한 아직 배우지 않았지만 미리말하자면 port number로 구분한다.

 

웹프로그래밍을 해보았다면 포트넘버에 대해서 익숙할 것이다. 인터넷 주소창 뒤에 :8080 << 이런식으로 붙는 것이 프로세스를 구분하기위한 포트넘버이다.

 

Transport service requirements 


예를 들어 file transfer기능은 데이터의 로스가 발생하면 안되고, 꼭 정해진 bandwidth가 아닌 자신이 현재 얻은 bandwidth만큼만 사용해도 된다. 또한 시간지연에 민감하지 않다.

 

 

TCP vs UDP


앞서 언급되었던 TCP와 UDP에 대해 잠깐 짚고 넘어가자.

물론 각 프로토콜에 대한 자세한 설명은 뒤에 다시 나올것이다!

 

TCP

 - reliable transport : TCP는 에러에 대한 체크를 하고 그에 대한 처리를 지원한다.

 - flow control : 만약 리시버쪽의 버퍼가 더이상 메시지를 받을 여력이 안되면 센더는 데이터를 전송하지 않는다.

 - congestion control : 만약 네트워크가 더이상 데이터를 받지 못하는 상태라면 보내지 않는다.

 - 또한 timing과 minimum bandwidth에 대한 보장을 해주지 않는다.

 - connection-oriented : 쌍방향의 커넥션이 형성되었을 때만 사용할 수 있다.

 

UDP

 - unreliable data transfer : 에러를 체크하는 기능은 있지만 그에 따른 처리는 하지 않는다.

 - tcp에 존재하는 여러기능을 모두 지원하지 않는다. 또한 쌍방향의 커넥션이 형성되어있지 않아도 dst의 IP와 포트넘버만 알면 데이터를 전송해버린다. (무지성 전송)

TCP/UDP의 사용예시