[kocw 이미정]4. Principles of network, applications, Web and HTTP

이건회·2022년 1월 14일
0

네트워크

목록 보기
4/24

Chapter 2 : Application layer

  • 네트워크 애플리케이션은 cliend-server 와 peer-to-peer(p2p) 의 두 가지 구조를 갖는다.

  • 커뮤니케이션을 하는 실질적은 주체는 프로그램이다. 그 프로그램이 있는 호스트가 client-server일 때, 서버에 있는 호스트는 언제나 on 되어있는 호스트이다. 또 영구적인 ip 주소를 갖고 있으며 또 많은 클라이언트를 응대하기 위해 데이터 센터 형태를 갖고 있다. 클라이언트는 언제와 서버와 통신한다. 또한 연결이 되었다가 안되었다가 한다. 또한 인터넷에 연결이 될 때마다 변경이 가능한 다이나믹 ip주소를 갖는다.

  • p2p 는 커뮤니케이션 하는 두 프로세스가 모두 유저 호스트에 있다. 따라서 항상 서버에 있지 않다. 엔드 시스템끼라 통신한다. 이 유저 호스트를 peer라 한다. 서로 서비스를 제공하고 제공 받는 관계이다. p2p에는 별도의 서버가 없고 peer들간 서비스를 주고받는다. 따라서 한 peer가 시스템에 조인하면 request만 갖고 들어오는 것이 아니라 서비스를 제공하기 때문에 시스템의 규모가 커지더라도 괜찮다.

  • peer는 연결이 항상 되어있지 않고 다이나믹ip주소를 가지므로 관리가 복잡하다.

  • 실행 중인 프로그램을 프로세스라 한다. 네트워크에서는 서로 다른 호스트끼리 메세지를 교환하는 것을 의미한다. 프로세스는 클라이언트와 서버 프로세스로 나뉘는데 ,클라이언트는 커뮤니케이션을 시작하고 서버 프로세스는 클라이언트의 요청에 응답하는 것이다.

  • 소켓은 애플리케이션 계층과 transport 계층의 문과 같은 것이다. 내보내거나 받는 메세지 모두 소켓을 통한다.

  • 커뮤니케이션은 두개의 호스트 안의 프로세스에서 이뤄지는 것이다. 따라서 메세지의 최종 목적지는 프로세스이기 때문에 호스트 주소의 ip만 가지고는 정확한 목적지 식별이 힘들다. 따라서 포트 번호를 사용하는데 이것은 호스트 안의 프로세스를 식별하는 번호이다. http 서버의 포트번호는 80으로 고정되어 있고 메일의 경우 25로 고정되어 있는데 이를 웰노운 포트번호라 한다. 매우 보편적으로 사용되기에 여러 클라이언트가 컨택하기 쉽게 하기 위해서다.

  • 어떤 transport 서비스를 원할까? data integrity가 매우 중요하다. 어떤 파일을 전달받거나 웹 트랙잭션의 경우 데이터에 오류가 없고 신뢰할 만 해야 한다. 그러나 오디오와 같은 경우 어느 정도의 손실을 용인한다. 또한 딜레이가 작은 것이 매우 중요하다(low delay). 이는 timing 이라 한다. 또한 최소한 양의 throughput이 보장되는 것이 중요하다. 하지만 throughput이 필요하지 않는 경우가 있는데 이를 elastic apps라 한다. 또한 보안 문제도 중요하다.

  • 위 사진은 각 매체의 경우 필요로 하는 transport 서비스를 정리한 것이다. time sensitive는 데이터가 얼마나 딜레이 없이 즉각적으로 전송되냐를 의미한다.

  • 인터넷에서 tranport 프로토콜 서비스를 제공하는 것은 tcp와 udp가 있다. tcp는 신뢰할 만한 transport서비스를 제공한다. 오류 없이 순서대로 잘 도착하는 것이다. 그러나 udp는 신뢰할 만하지 않다. tcp는 상대방의 tcp와 통신하여 커넥션을 형성하고 데이터를 주고받는다. 이 커넥션을 통해 flow control을 제공하는데, 보내는 tcp와 받는 tcp에서 보내는 tcp가 데이터를 빠르고 많이 보내 받는 tcp의 버퍼가 넘치지 않기 위해 커넥션을 통해 속도를 낮추는 요청을 하는 것을 의미한다. 또한 네트워크의 congestion을 피하기 위해 컨트롤하기도 한다. 이 모든 서비스를 udp에서는 제공하지 않는다. 그러나 tcp는 커넥션을 셋업하고 관리하는 과정에서 오버헤드가 더 발생하므로 빠른 udp를 사용하기도 하는 것이다. 또한 애플리케이션 자체에서 data integrity를 확인하기 위해 더 심플한 udp를 사용하기도 하고, tcp의 flow나 congestion컨트롤 때문에 데이터 결함 시 tcp의 경우 transport계층 버퍼에서 애플리케이션으로부터의 다음 데이터 전송을 막아버릴 수 있다. 이런 경우 데이터를 바로바로 네트워크로 내보내 단위 시간당 딜리버리가 빠른 udp를 선호하기도 한다.

  • 위 사진은 보편적인 애플리케이션이 어떠한 애플리케이션 layer와 transport 프로토콜을 사용하는지 보여준다. TCP를 사용하는 애플리케이션은 data integrity가 중요한 것이다.UDP를 겸하여 사용하는 애플리케이션은 타이밍과 minimum throughput까지도 중요하다.

  • 다음은 애플리케이션 프로토콜에서 정의되어야 하는 요소들이다. 먼저 교환하는 메세지의 종류를 정의하고, 메세지의 신택스(필드,구분,구획)을 정의하고, 메세지의 semantics, 즉 메세지의 해석을 정의한다. 또한 언데 메세지를 받고 응답할지의 룰을 정의한다. app-layer 프로토콜을 open과 proprietary 두 가지가 있는데 proprietary는 open이 아니므로 어떻게 동작하는지 알 수 없고 짐작할 수만 있다.

  1. Web and Http
  • http는 웹을 위해 만들어진 프로토콜이다. 웹페이지는 어러 개의 object로 구성되어 있다. 기본적으로는 웹페이지의 프레임은 base html 파일로 구성되어 있고, 그 안에는 각 object에 대한 레퍼런스를 포함하는데 그 레퍼런스는 URL 형태이다. 각 object는 html일 수도, jpeg일 수도, 오디오 파일일 수도 있다.
  • http는 어떻게 동작할까? http 프로토콜은 클라이언트-서버 구조를 따른다. 따라서 클라이언트 서비스 안에 클라이언트 호스트가 있는데 우리의 브라우저가 바로 http의 클라이언트 호스트 이다. 따라서 우리가 브라우저에 url을 타이핑하면 해당 url에 가서 리소스를 요청하고 스크린에 전시하는 것이다. 서버 프로세스는 웹 서버 호스트에 들어와 브라우저의 요청을 기다리고, 요청을 받으면 해당 object를 전송해 준다.
  • http는 tranport 서비스를 tcp에 요청한다. http는 웹을 지원하기 때문에 웹은 data integrity가 중요하기 때문이다. http는 사용자가 url을 요청하면 그것을 요청하기 위핸 request 메세지를 만드는데 그 전에 tcp 커넥션을 맺어야 한다. 따라서 클라이언트 측에서 http의 80번 포트번호에 커넥션을 시작한다. 서버가 커넥션을 받으면 그 커넥션을 통해 http 메세지를 주고받는다. http는 유저가 이전에 보낸 요청이 어떤것인지 기억을 하지 않는다. 이를 'stateless'라 한다. 서버가 그 히스토리를 기억하려면 그것을 저장해야 하므로 오버헤드가 발생하기 때문이다.
  • 최초의 http는 한 개의 object 만이 tcp 커넥션을 맺었다. 그러나 현재는 여러 object가 하나의 커넥션이 가능하다(non-persistent).
  • http가 애플리케이션 계층 프로토콜이고 tcp는 트랜스포트 계층 프로토콜이므로 트랜스포트계층에서 무언가를 전달해줘야 애플리케이션에서 무언가를 작동할 수 있다. 만약 전화를 하려면 전화가 미리 연결되있는것 같이, tcp커넥션이라는 절차를 통해 커넥션을 맺어야 소통이 가능하다.

  • http 메세지를 전달하기 위해서는 tcp 커넥션을 맺어야 한다. 커넥션 요청을 받을 http 서버는 서버 호스트와 서버 프로세스가 항상 on 상태이다. 언제 요청을 받을지 모르기 때문이다. 따라서 항상 대기 상태이다. 그러므로 tcp 포트 80에서 대기하다가 커넥션 요청이 오면 이를 받아들이고 커넥션 형성 이후 클라이언트는 url이 포함된 http Request 메세지를 보내게 된다. 이는 클라이언트 소켓을 통해서 내려간다. 이 메세지는 또 서버 소켓에 전달이 되고 서버는 요청 메세지를 보고 응답 메세지를 작성한다. 또 그 메세지 안에 요청된 object를 포함시킨다. 그런데 이때 포함시키는 것은 base html 파일만 내보낸다. 이를 다시 소켓으로 내려보낸다.

  • 이는 tcp 커넥션을 통해 다시 클라이언트 쪽으로 들어가고 메세지가 들어오면 http 서버는 tcp 커넥션을 닫아버린다. 따라서 "non-persistent" 동작인 것이다. http 클라이언트는 이를 받아 브라우저에 전시하고 html 파일을 파싱하여 추가적인 오브젝트들에 대한 레퍼런스를 찾아낸 후, 오브젝트에 대한 추가적인 tcp 커넥션을 요청하는 식이 반복되며 이루어진다.
profile
하마드

0개의 댓글