네트워크 프로그래밍

김정민·2021년 1월 26일
0

클라이언트 - 서버 프로그래밍 모델

모든 네트워크 응용 프로그램은 같은 프로그래밍 모델, 유사한 논리 구조, 같은 프로그래밍 인터페이스에 기반해서 만들어졌다. 클라이언트 - 서버 모델은 모든 네트워크 프로그램들의 기반이 되는 프로그래밍 모델이다.

클라이언트 - 서버 프로그래밍 모델은 하나의 서버와 하나 또는 더 많은 수의 클라이언트로 구성된다. 서버는 리소스를 관리하고, 클라이언트에게 리소스를 가공해서 서비스를 제공해주는 역할을 한다.

클라이언트 - 서버 모델의 기본 동작 방식을 트랜잭션이라 부른다. 트랜잭션은 네 가지 단계로 구성되어 있다.

  1. 클라이언트는 서비스가 필요하면, 서버에게 request를 보내면서 트랜잭션을 시작하게 된다. 예를 들어, 웹 브라우저가 어떤 파일이 필요하면, 브라우저는 웹 서버에게 request를 보낸다.

  2. 서버는 클라이언트에게 받은 request를 해석한다. 그리고 클라이언트에게 필요한 방식으로 리소스를 가공한다. 웹 서버가 웹 브라우저에게 어떤 파일이 필요하다는 request를 받으면, 웹 서버는 서버의 디스크 파일을 읽는 식이다.

  3. 서버가 클라이언트에게 필요한 리소스를 보낼 준비가 되면, 서버는 클라이언트에게 reponse를 보내고 다음 request를 기다리는 상태로 된다. 클라이언트에게 필요한 파일을 찾았으면, 이것을 클라이언트에게 보내주게 되는 것이다.

  4. 클라이언트가 서버로부터 reponse를 받고 이를 클라이언트에게 필요한 방식으로 가공한다. 웹 브라우저가 웹 서버로부터 필요한 페이지를 받고나서, 이를 스크린에 띄어준다.

TCP/IP

컴퓨터와 컴퓨터 간의 지역네트워크(Local Area Network)나 광역네트워크(Wide Area Network)에서 원활한 통신을 가능하게 하도록 하기 위한 통신 규약(Protocol)이다. TCP/IP는 두 개의 프로토콜로 이루어져 있고, 통상적으로 IP 프로토콜 위에 TCP 프로토콜이 놓이게 된다.

IP(Internet Protocol) : node(컴퓨터, 스마트폰 등)와 node 사이에 데이터 패킷을 전송하기 위해서는 각 node에 주소를 필요로 한다. IP는 node의 주소를 담고 있다.

IP의 정보는 패킷이라는 덩어리로 나뉘어 전송된다. 이 패킷은 각 node들이 가지고 있는 IP 주소를 찾아 전송되기 때문에 이전에 통신한 적이 없는 호스트에게 패킷을 보낼 때 추가적으로 경로 설정을 해줄 필요가 없다.

IP는 비신뢰성, 비연결성이라는 특징을 가지고 있다. IP는 전송하는 패킷이 목적지까지 정확하고, 안전하게 전송됐는지 보장하지 않기 때문이다. 예를 들어 전송 과정에서 패킷이 손상되거나, 패킷의 순서가 뒤바뀌거나, 패킷이 사라질 수도 있다. 그래서 정확하고 안전한 패킷의 전송을 보장하기 위해 TCP 프로토콜과 함께 사용된다.

IP의 주소는 버전에 따라 다르다. IPv4는 32비트로 이루어진 주소번호를 사용하고, IPv6은 128비트로 이루어진 주소번호를 사용한다. 이 주소를 IP 주소라고 부르며 Ipv4의 경우 "192.168.100.100"과 같이 표기할 수 있다. 하지만 사람이 이러한 숫자로 된 IP 주소를 식별하기 어렵기 때문에 domain name service(www.naver.com, google.com)를 사용한다.

TCP(Transmission Control Protocol) : 서버와 클라이언트 사이에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜

과거에는 데이터를 한 덩어리로 묶어 통신에 사용했다. 네트워크 상에는 여러 개의 컴퓨터가 존재하고, 동시 다발적으로 데이터를 주고 받는 상황이 연출된다. 이 과정에서 전송되는 데이터의 크기가 커질수록 한 대의 컴퓨터만 데이터를 주고 받고, 나머지 컴퓨터들은 앞에 있는 컴퓨터의 작업이 끝날 때까지 기다려야 되는 상황이 발생하게 된다.

그래서 데이터를 통신에 적합한 크기로 잘게 나누어 이러한 문제를 해결하게 됐는데 이를 패킷이라 부른다. 패킷으로 분할된 데이터는 목적지에서 다시 재조립되는 과정을 거치는데, IP는 앞서 말한 것처럼 패킷의 안전하고 정확한 전송을 보장해주지 않는다.

TCP는 패킷이 전송되는 과정에서 손실되거나 순서가 바뀌는 현상이 발생하면 이러한 변화를 찾아 교정하고 순서를 재조합할 수 있도록 도와주는 프로토콜이다. TCP는 연결 지향 프로토콜인데, 데이터의 송수신을 위해 클라이언트와 서버가 서로 연결되어 있어야 하고 데이터가 유실되면 데이터 재전송을 요청함으로 패킷의 정확성과 안전성을 보장한다.

TCP/IP는 node들이 서로 연결된 상태에서 서로 올바른 통신을 하도록 도와주는 역할을 한다. TCP는 전송되는 데이터의 정확성과 신뢰성을 보장하고, IP의 주소를 따라 데이터가 전송할 수 있도록 한다.

OSI 7 계층

컴퓨터와 컴퓨터 사이의 데이터 전송을 위해서는 OSI 7 계층을 직-간접적으로 거치게 된다. 각 계층을 나눔으로써 캡슐화와 정보 은닉이 가능해지게 되고, 각자의 계층만 신경쓸 수 있게 된다. 예를 들어 서비스 개발자는 Application, Presentation 레이어만 신경 쓰면 되고, 응용 프로그램 개발자는 Session, Transport 레이어만 신경 쓰면 된다. Network 레이어 아래의 계층은 운영 체제가 알아서 챙겨주므로 대부분 신경 쓸 필요가 없게 된다.

TCP/IP는 OSI 7 계층을 더 단순화 시켜 4 단계로 만들어 사용한다.

  • Application 레이어 : 네트워크를 사용하는 응용 프로그램으로 이루어지며, OSI 계층의 Application, Presentation 레이어를 모두 포함한다.
  • Transport 레이어 : 데이터를 목적지까지 전송하기 위한 일을 수행하는 계층이다. OSI의 Session, Transport 레이어를 포함하고 있으며, 각각의 시스템을 연결하고 TCP를 이용하여 데이터의 정확성과 신뢰성을 보장해준다.
  • Internet 레이어 : 데이터를 정의하고 데이터의 경로를 배정하는 일을 담당한다. 데이터를 정확하게 배정(라우팅)하기 위해 IP를 사용한다. OSI의 Network, Data Link 레이어를 포함한다.
  • Physical 레이어 : 이더넷 카드와 같은 하드웨어를 다루는 물리적 계층이다.

TCP/IP 4계층에 의한 데이터 전송

웹 브라우저에서 사용자가 페이지를 요청하면, 요청 내용을 인터넷 상에서 전달하기 용이한 TCP 패킷으로 만들게 된다.(HTTP -> TCP 계층 이동, Application 레이어)

TCP 패킷으로 만들어진 데이터(요청 내용)는 원하는 주소로 이동할 수 있도록 IP 패킷으로 만들어진다.(TCP -> IP 계층 이동, Transport 레이어)

TCP, IP 계층을 지나면서 만들어진 데이터 패킷은 원하는 주소로 가기 위해 이더넷 카드를 이용하게 된다. 이더넷 카드는 IP 패킷의 정보(출발지, 목적지)를 분석해서 인터넷 상의 원하는 주소로 보낸다.(IP -> Ethernet 계층 이동, Internet 레이어)

이더넷 카드에 도착한 데이터 패킷의 목적지가 자기 자신이면 다시 Transport 레이어로 보내지고, 이곳에서 TCP가 데이터가 변했는지 검사를 하고 이상이 없으면 Application 레이어로 데이터 패킷을 보낸다.

웹 브라우저에서 요청한 정보가 계층 이동의 과정을 거치면서 웹 서버에 도착하면, 웹 서버는 위의 과정을 순차적으로 실행하여 웹 브라우저에게 필요한 데이터를 보내주게 된다.

각각의 계층은 각각의 계층만 상대하고 있음을 알 수 있고, 네트워크 프로그래밍은 TCP/IP 4계층을 이용해서 프로그램을 개발하는 과정이라 할 수 있다.

컴퓨터 시스템의 Tiny 웹 서버

0개의 댓글