[SW사관학교 정글]51일차 TIL : 네트워크 프로그래밍

김승덕·2022년 11월 8일
0
post-thumbnail

네트워크 프로그래밍

네트워크 응용은 우리 주변에 흔하게 찾아볼 수 있다. 모든 네트워크 응용들은 동일한 기본적인 프로그래밍 인터페이스를 사용한다는 점이다.

  • 프로레스, 시그널, 바이트 순서, 메모리 매칭, 동적 저장장치 할당
  • 기본적인 클라이언트-서버 프로그래밍 모델
  • 인터넷이 제공하는 서비스를 사용하는 클라이언트-서버 프로그램을 작성하는 방법
  • 위의 모든 개념을 연결해서 작은 웹서버 만들기

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

모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초하고 있다. 그리고 클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다. 클라이언트-서버 트랜잭션은 4단계로 구성된다.

  1. 클라이언트가 서비스를 필요로 할때, 클라이언트는 한 대의 요청을 서버에 보내는 것으로 트랜잭션을 개시한다.
    1. 예를 들어 웹 브라우저가 파일을 필요로할 때, 웹 서버로 요청을 보낸다.
  2. 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다.
    1. 예를 들어 웹 서버가 브라우저로부터 요청을 받을 때 디스크 파일을 읽는다.
  3. 서버는 응답을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.
    1. 예를 들어 웹 서버는 이 파일을 다시 클라이언트로 돌려보낸다.
  4. 클라이언트는 응답을 받고 이것을 처리한다.
    1. 서버로부터 페이지를 한 개 받은 후 이것으 스크린에 디스플레이한다.

클라이언트와 서버는 프로세스이며, 머신이나 호스트가 아니라는 점을 유의하자.

네트워크

클라이언트와 서버는 종종 별도의 호스트에서 돌아가며, 컴퓨터 네트워크의 하드웨어 및 소프트웨어 자원을 사용해서 통신한다.

호스트에게 네트워크는 단지 또 다른 I/O 디바이스이며 데이터를 위한 소스와 싱크로 서비스한다. I/O 버스의 확장 슬록에 꽃혀있는 어뎁터는 네트워크에 물리적인 인터페이스를 제공한다.

물리적으로 네트워크는 기하학적 위치로 구성된 계층구조 시스템이다. 하위수준은 LAN으로 빌딩이나 캠퍼스에 설치된다. 가장 대중적인 LAN기술은 이더넷이다.

이더넷 세그먼트는 몇 개의 전선들과 허브라고 부르는 작은 상자로 구성된다.

위에 이미지에 브릿지(bridge)라고하는 작은 상자들을 사용해서 다수의 이더넷 세그먼트가 연결되어 브릿지형 이더넷이라고 하는 더 큰 LAN을 구성할 수 있다.

브릿지는 허브보다 더 높은 전선의 대역폭을 가진다. 우수한 분산 알고리즘을 사용해서 이들은 자동으로 어떤 호스트가 어떤 포트에서 도달 가능한지 장시간에 걸쳐 학습하고, 그 후 필요한 경우 선택적으로 하나의 포트에서 다른 포트로 프레임을 복사한다.

계층 구조의 상부에서 다수의 비호환성 LAN들을 라우터라고 부르는 특별한 컴퓨터에 의해서 연결될수 있으며, 라우터는 네트워크 간 연결을 구성한다. 각 라우터는 이들이 연결되는 각 네트워크에 대해 어댑터를 가지고 있다. 라우터는 또한 고속의 point-to-point 전화 연결을 할 수 있으며, 이들은 WAN이라고 하는 네트워크의 사례다.

internet의 중요한 특성은 이것이 매우 다르고 비호환적인 기술을 갖는 여러가지 LAN과 WAN들로 이루어져있다는 점이다. 그럼 어떻게 어떤 소스 호스트가 모든 비호환적인 네트워크들들 지나서 데이터 비트를 다른 목적지 호스트로 전송할 수 있을까?

해답은 여러가지 네트워크 간의 차이를 줄여주는 각 호스트와 라우터에서 돌고 있는 프로토콜 소프트웨어의 계층이다. 이 소프트웨어는 어떻게 호스트들과 라우터들이 데이터를 전송하기 위해서 협력하는지를 결정하는 프로토콜을 구현한것이다. 이 프로토콜은 두 가지 기본 기능을 제공한다.

  • 명명법 : internet 프로토콜은 호스트 주소를 위한 통일된 포맷을 정의해서 이 차이점들을 줄인다. 각 호스트는 자신을 유일하게 식별하는 internet 주소 최소한 한개가 할당된다.
  • 전달 기법 : 서로 다른 네트워킹 기술은 서로 다른 비호환성을 갖는 비트 인코딩 방법과 프레임 내에 이들을 패키징 하는 방법을 가지고있다.

위 그림은 호스트와 라우터가 호환성이 없는 LAN을 통해서 데이터를 전송하기 위해 internet 프로토콜을 어떻게 사용하는 지에 관한 예제를 보여준다. 8단계가 존재한다.

글로벌 IP 인터넷

위의 그림은 인터넷 클라이언트-서버 응용의 기본적인 하드웨어 및 소프트웨어 구조를 보여준다.

각 인터넷 호스트는 TCP/IP 프로토콜을 구현한 소프트웨어를 실행한다. 인터넷 클라이언트와 서버는 소켓 인터페이스와 UNIX I/O 함수들의 혼합을 사용해서 통신한다. 소켓 함수들은 일반적으로 시스템 콜들로 구현하는데 이 시스템 콜은 커널에서 트랩을 발생시키며 TCP/IP에서 다양한 커널 모드 함수들을 호출한다.

TCP/IP는 실제로는 프로토콜의 집합으로 각각은 서로 다른 기능을 제공한다.

  • IP는 기본 명명법과 데이터그램이라고 하는 패킷을 한 인터넷 호스트에서 다른 소스트로 보낼 수 있는 배달 메커니즘을 제공한다.
  • UDP는 IP를 다소 확장해서 데이터그램이 호스트에서 호스트로 가는 대신 프로세스에서 프로세스로 전송될 수 있다.

프로그래머 관점에서 인터넷을 다음과 같은 특징을 갖는 전 세계적인 호스트의 집합이라고 생각할 수 있다.

  • 호스트의 집합은 32비트 IP주소 집합에 매핑된다.
  • IP 주소의 집합은 인터넷 도메인 네임(Internet Domain Name)이라고 부르는 식별자의 집합에 매핑된다.
  • 하나의 인터넷 호스트의 프로세흐틑 연결을 통해서 다른 인터넷 호스트의 프로세스와 통신할 수 있다.

인터넷 연결

인터넷 클라이언트와 서버는 연결을 통해서 바이트 스트림을 주고받는 방식으로 통신한다. 이 연결은 point-to-point연결이고 완전 양방향이다.

소켓은 연결의 종단점이다. 각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가지며 이것은 address : port로 나타낸다.

연결은 두 개의 종단점의 소켓 주소에 의해 유일하게 식별된다. 이 두개의 소켓주소는 소켓 쌍이라고 알려져 있으며, tuple로 나타낸다.

(cliaddr:cliport, servaddr:servport)

참고자료

CSAPP 11장

🙋‍♂️ 오늘의 하루는...

오늘은 proxy를 구현해보았다.
혼자 하다가 같이 만드니 서로 보완을 해주면서 만들수있어서 좋은것같다.
하지만 나는 좀 부족하다.
제대로 이해하고 넘어가지 못한것같다.
프록시의 rio 부분을 좀 더 자세히 살펴보아야겠다.

profile
오히려 좋아 😎

0개의 댓글