인터넷 5계층
인터넷에서는 ISO/OSI 7계층의 상위 3개를 묶어서 Application Layer라고 부른다. 즉, 7계층의 Application, Presentation, Session 계층이 묶여져 인터넷의 Application Layer가 되는 것이다. 인터넷에서는 이 3가지 계층을 엄밀하게 나누어 표현하기 어렵기 때문에 이렇게 묶어서 표현한다.
네트워크 응용의 구조
1) Client-Server
Client-Server구조는 server가 열려있기 때문에 언제나 원하는 서비스를 받을 수 있는 형태이다. 웹 검색이 클라이언트 서버의 대표적인 예라고 할 수 있다. 웹검색은 서버가 client를 위해 언제나 대기하고 있다는 장점이 있다 (언제나 대기하고 있는 형태가 아니라면, 사용자는 원하는 때에 검색을 할 수 없다). 그러나, 이렇게 언제나 대기하고, 모든 서비스에 관여할수록 서버의 부하가 높아진다는 단점이 존재한다.
2) Peer-to-Peer
토렌토 같은 경우는 제공하는 사람이 없으면 서비스를 제공받지 못한다. 이런 형태를 Peer-to-Peer라고 한다. 중개 역할이 없고, 필요한 사람끼리 직접 파일을 교환하는 형태이다. 이런 방식으로 서버의 부하를 분산시킬 수 있지만, 전체적인 관리가 미흡할 수 있다는 단점이 있다.
3) 하이브리드
서버가 관리는 해주지만, 실제적인 데이터 교환은 Peer-to-Peer 형식을 채택하는 구조이다. 스카이프가 대표적인 예라고 할수있다. 스카이프는 서버에서 통화 자체에는 개입하지 않지만 통화가 이루지기 전까지의 관리는 담당한다. 또한 스타크래프트 같은 게임의 경우도 하이브리드 구조이다. 서버가 게임에는 관여하지 않지만, 누가 접속을했고 어떤 방이 만들어졌는지를 파악하고, 관리한다. 게임이 시작된 후에는, 유저끼리 통신하는 형태이다.
프로세스간 통신
프로세스간의 통신을 이야기하기전에 먼저, '응용'과 '프로세스'의 개념을 살펴보자.
응용
응용이란 네트워크로 연결된 컴퓨터들이 협력하여 제공하는 서비스이다. 예를들어, client가 구글 검색을 한다고 했을때, 클라이언트 단말 + 서버 단말 + 시스템 이 모여 협력해야지만이 서비스가 제공된다. 즉, 하나의 서비스를 제공하기 위해 여러 컴퓨터가 협력해야만 한다. 이를 응용이라고 한다.
프로세스
프로세스란, 하나의 컴퓨터에서 독립된 메모리 공간을 가지고 수행되고 있는 프로그램의 최소 단위이다. 예를들어, 웹브라우저를 실행시키면 하나의 컴퓨터에서 독립된 메모리 공간을 가지고 웹브라우저가 돌아간다. 이때 웹브라우저는 하나의 프로세스가 된다. 실행된 웹브라우저는 웹서버에 통신을 요청하고, 웹서버는 통신 내용을 보고 반환해야할 것을 연산해서 응답을준다. 이런 연결된 형태를 하나의 응용이라고 할 수 있다.
즉, 연결된 전체를 아우르는것을 응용이라하고, 프로세스는 응용을 구성하는 일부라고 생각하면 되겠다.
프로세스 주소
1) 기계주소 (IP)
구청에서 등본 서비스를 받고싶다면, 구청의 주소를 알아야 하고 그 뒤에 일을 처리해줄수 있는 사람을 찾아야 한다. 이때 구청의 주소에 해당하는것이 기계주소(IP)이다.
기계주소는 xxx.xxx.xxx.xxx의 형태를 가지며 xxx에는 0~255의 숫자가 기입된다. 176.37.1.4가 하나의 IP주소라고 할수 있다. 이렇게 각자리에 256가지 경우의수가 오게되면 약 40억개(256^4)의 IP주소가 생성될 수 있다. 원칙적으로는 IP가 하나의 기기를 가르켜야한다. 그러나, 기기가 40억대를 넘어가는 가능성도 존재하기 떄문에 기기가 IP를 나눠 쓰기도 한다 (하나의 동네가 될 수도 있다). 그리고 이렇게 나눠써도 큰 문제가 없다.
2) 포트번호
구청에서 등본 서비스를 받기위해, 구청에 도착했다고 하자. 그러나, 구청에는 매우 많은 부서가 있기 때문에 구청에 들어가기만한다고 원하는 서비스를 받을 수 있는 것은 아니다. 원하는 서비스를 제공하는 부서에 찾아 가야한다. 이처럼 컴퓨터도 IP 주소만 알면 끝나는 것이아니라, 원하는 서비스를 제공하는 부서가 어딘지 찾아야한다. 이에 해당하는것이 포트 번호이다. 포트번호는 패킷이 누구에게 전달되어야 하는지를 나타낸다.
컴퓨터에는 많은 프로그램이 돌아간다. 웹브라우저도 돌아가고, 워드 프로세서도 돌아가고, 그리고 게임도 돌아간다. 그때, 전달받은 패킷을 누구에게 전달하는지를 찾는것은 중요하다. 그 전달 대상을 찾기 위해 필요한 이름표가 바로 포트번호이다. 하나의 컴퓨터에는 2^16개의 포트번호가 존재한다 (TCP 위에서 2^16개, UDP에서도 2^16개 >> 전체적으로는 2^32개만큼의 포트존재 가능. 그러나, 주로사용하는 것은 TCP).
서버에는 여러 프로세스가 있다. 이때, client가 서버(IP: 176.37.1.4)의 process에 접근하기 위해서는 precess의 주소를 알아야 한다. 예를들어, 웹서버의 포트번호는 80번이고, proccess의 주소는 '176.37.1.4의 TCP 80번 포트' 이다. Client가 이 주소로 패킷을 보내게 되면 서버의 웹서버로 가게 된다.
이때, client에서 웹브라우저를 여는 port 번호는 정해져 있지 않다. 일반적으로 client가 먼저 server에 접속한다. 이때, 웹서버는 요청을 누가 보냈는지 편지봉투를 보고 확인할 수 있다. 이 편지 봉투에서 보낸사람의 주소를 알 수 있기 때문에, 다시 요청을 client에게 반환하는 것이 가능하다. 이때문에 클라이언트쪽에서의 특정 port번호가 필요없는 것이다.
소켓 통신
컴퓨터 끼리 통신을할때는, 편지를 부치는 것처럼 상대방의 주소를 쓴다. 컴퓨터 통신의 경우 패킷을 자주 보내기 때문에, 편지를 보낼때마다 나와 상대방의 주소를 기입하면 번거롭다. 예를들어, 웹브라우저(2.2.2.2, 포트번호 7890)가 웹서버(1.1.1.1, 포트번호 80)에 접속한다고 하자. 그러면 보내는 통신의 형태는 아래와 같다.
보낸이: | 2.2.2.2 7890 |
받는이: | 1.1.1.1 80 |
삼성전자주가 |
이런 형태로 통신을 하면 번거롭다. 패킷을 보낼때마다 매번 누구랑 이야기했는지 기억해야하기 때문이다. 이방식은 통신할때마다 수신자(또는 발신자)를 기억해뒀다가 편지봉투에 기재해야된다. 우리는 보통 네트워크에 한번 접속하면 같은 대상과 통신을 연이어서 하기때문에, 이런 번거로운 과정을 줄이고자 private channel을 만든다. 그리고 이 private channel을 이용하면 수신인/발신인 정보를 재활용해서 통신한다. 이러한 통신의 형태를 소켓 통신이라고 한다.
만약, 소켓통신을 이용하지 않는다면 사용자가 늘어날때마다 점점더 많은 편지 봉투를 써야한다. 반면, 소켓을 이용하면 하나의 접속이 들어올때마다 private channel을 생성할 수 있고, 접속한 상대가 누구인지 기억할 필요가 없어진다 (IP와 포트번호를 기억할 필요가 없다). 이를 이용하면 응용프로그램을 쉽게 생성할 수 있다.
'네트워크' 카테고리의 다른 글
[네트워크] HTTP 개요 (0) | 2023.01.10 |
---|---|
[네트워크] TCP/UDP (0) | 2023.01.07 |
[네트워크] 계층 개요 (0) | 2022.12.28 |
[네트워크] 네트워크 품질 (0) | 2022.12.28 |
[네트워크] 컴퓨터 통신의 역사3 (1) | 2022.12.22 |