학습목표
👉 기본적인 클라이언트 - 서버 작성법 및 이해
👉 웹 브라우저로 텍스트와 그래픽을 갖는 정적 및 동적 컨텐츠를 가진 웹서버 개발하기
00. 클라이언트 - 서버 프로그래밍 모델
모든 네트워크 프로그램은 클라이언트 - 서버 모델에 기초하고 있다. 응용은 한 개의 서버프로세스와 한개 이상의 클라이언트 프로세스로 구성된다. 서버는 리소스를 관리하고 조작해서 클라이언트에게 서비스를 제공한다.
클라이언트와 서버를 공부할 때, 클라이언트나 서버가 호스트나 디바이스가 아닌 '프로세스'라고 이해하는 것이 중요하다.
호스트란?
👉 인터넷을 통해 다른 컴퓨터들과 쌍방향 통신이 가능한 컴퓨터를 말한다.
클라이언트 - 서버 모델에서 근본적인 연산 단위는 '트랜잭션'이다. 클라이언트-서버 트랜잭션은 네단계로 구성된다.
1. 클라이언트가 서비스를 필요로 할때 클라이언트는 한 개의 request을 서버에 보낸다.
2. 서버는 요청을 받고 해석해서 서버의 자원들을 적절한 방법으로 조작한다.
3. 서버는 response를 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.
4. 클라이언트는 응답을 받고 이것을 처리한다.
01. 네트워크
네트워크는 컴퓨터 하드웨어 및 소프트웨어 자원을 통해 통신한다. 네트워크 통신 시, 클라이언트와 서버는 별도의 호스트에서 돌아갈 수도 있고, 같은 호스트에서 돌아갈 수도 있다. 여기서 중요한 점은 호스트에게 네트워크는 단지 또 다른 I/O(입출력) 디바이스이며, 데이터의 소스와 싱크로 서비스한다. 위 그림의 I/O버스의 확장 슬롯에 꽃혀 있는 Network adapter는 네트워크에 물리적인 인터페이스를 제공하며, 네트워크에서 수신한 경우 해당 데이터는 I/O와 메모리버스를 거쳐 어댑터 - 메모리 - DMA 전송 복사된다.
DMA(Direct Memory Acess)란?
👉 CPU의 개입이 없다는게 가장 중요한 키포인트!
👉 주변장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 한다.
👉 사이클 스틸링이라고도 한다. (왜? CPU의 성능을 측정하는 것을 사이클이라고 하는데 CPU가 일할 1회를 뺏어서 DMA에서 CPU대신 일을 해준다.)
👉 사이클 : CPU 너 한사이클에 얼마나 일 할 수 있어?
네트워크는 계층구조 시스템이다. 계층구조란, 관계를 계층적으로 도식화한구조이다. 예시를 들자면 아래 표를 4층은 3층에 대해 의존적이다. 의존의 범위는 다양하다. 행위나 기능에 대해 의존적일 수도 있고, 존립에 대해 의존적일 수도 있다. 이런 의존관계가 직렬적으로 정렬이 가능할때, 계층구조라고 한다.
OSI 7계층은 네트워크에서 통신이 일어나는 과정을 계층구조로 나누었다.
4 |
3 |
2 |
1 |
(0) OSI 7계층 단계별 구조
(1) LAN(Local Area Network)
LAN은 근거리 지역 내 다양한 이기종 컴퓨터의 상호 접속 및 자원의 공유 기반 망이다. 가장 대중적인 LAN 기술은 이더넷(Ethernet)이다. 이더넷 어댑터는 비휘발성 메모리에 저장된 전체적으로 고유한 48비트 주소를 가진다.
1) 이더넷 세그먼트 : 이더넷 세그먼트는 전선들과 허브라고 부르는 작은 상자로 구성되며, 대개 방이나 빌딩의 층 같이 작은 지역에 설치한다. 각 전선은 동일한 최대 비트 대역폭을 가지며, 대개 100Mb/s나 1Gb/s이다. 허브는 각 포트에서 수신한 모든 비트를 다른 포트로 복사한다. 그래서 모든 호스트는 모든 비트로 볼 수 있다. 호스트는 프레임이라고 부르는 비트들을 세그먼트의 다른호스트들에게 보낼 수 있다. 프레임은 헤더와 데이터비트로 이루어져있다. 프레임의 헤더는 소스, 목적지, 프레임의 길이를 식별할 수 있는 비트들로 구성되어있다.
2) 브릿지형 이더넷 : 이더넷 세그먼트가 연결되어 브릿지형 이더넷이라고 하는 더 큰 LAN을 구성할 수 있다. 브릿지 이더넷은 전체 빌딩이나 캠퍼스 규모로 설치 될 수 있고, 브릿지형 이더넷에서 일부 선은 브릿지로 연결하고, 다른 선들은 브릿지 허브로 연결한다. 이더넷 세그먼트와 달리 각 선의 대역폭은 다를 수 있다. 브릿지는 허브보다 더 높은 전선의 대역폭을 가진다. 알고리즘을 사용해 어떤 호스트가 어떤 포트에 도달 가능한지 장기간에 걸쳐 학습하고(똑똑이,,,) 그 후 필요한 경우 선택적으로 하나의 포트에서 다른 포트로 프레임을 복사한다.
호스트 A가 같은 세그먼트에 있는 B로 한 프레임을 전송하려면 브릿지 X는 이 프레임이 입력포트에 도달할 때 브릿지 X는 해당 프레임을 버린다. 그래서 다른 세그먼트에서의 대역폭 전송을 절약한다.
그렇지만 만일 호스트 A가 다른 세그먼트의 호스트 C로 프레임을 전송한다면 브릿지 X는 이 프레임을 브릿지Y에 연결된 포트로 복사하고, 호스트C의 세그먼트에 연결된 포트로 프레임을 복사하게 된다.
(2) WAN(Wide Area Network)
라우터는 네트워크 간 연결을 구성한다. LAN들은 네트워크 간 연결을 구성하는 라우터에 의해서 연결 될 수 있다. 이러한 연결을 상호 연결 네트워크라고 하며, 각 라우터는 각 네트워크에 대해 어댑터(포트)를 가지고 있다. WAN은 LAN보다 지리적으로 더 넓은 지역에서 운용될 수 있다. 라우터는 LAN과 WAN을 연결해 internet을 만든다. 아래 그림은 세 개의 라우터로 연결된 LAN과 WAN의 쌍을 가지는 internet의 예시를 보여준다.
인터넷은 매우 다르고 비호환적인 여러가지 LAN과 WAN들로 이루어져있다. 통신을 하기 위해서는 해당 규약이 필요했고, 프로토콜 소프트웨어 계층에서 두가지 기본 기능을 제시한다.
첫째, 명명법이다. internet 프로토콜은 호스트 주소를 통일된 포맷으로 정의해서 이 차이점을 줄였다.
둘째, 전달기법이다. internet 프로토콜은 각자 송수신하는 데이터비트들을 패킷이라고 부르는 비연속적인 단위로 묶는 통일된 방법을 정의한다. 패킷은 패킷 크기와 소스 및 목적지 주소를 가지는 헤더와 소스 호스트가 보내는 데이터비트를 포함하는 데이터로 구성된다.
호스트와 라우터가 호환성이 없는 LAN을 통해 internet 프로토콜을 어떻게 사용하는지에 대한 과정이다.
1. 호스트 A는 클라이언트의 가상공간에서 커널 버퍼로 데이터를 복사하는 시스템 콜을 호출한다.
2. 호스트 A의 프로토콜은 internet 헤더(B의 주소)와 LAN1 프레임헤더를 데이터에 추가하고, LAN1 프레임(패킷)을 생성하고 어댑터로 전달한다. (데이터 밖에 정보들을 추가하고 감싸는 것을 캡슐화라고 한다.)
3. LAN1 어댑터는 이프레임을 네트워크로 복사한다.
4. 프레임이 라우터에 도착하면, 라우터의 LAN1은 전선에서 프로토콜 소프트웨어로 전달한다.
5. 라우터는 패킷 헤더에서 주소를 가져와 패킷을 전달할 곳을 결정한다. (LAN2 라우팅 테이블에서의 인덱스로 이것을 사용하며 LAN1의 프레임 헤더를 벗겨내고, 호스트 B의 주소를 가지는 LAN2 프레임 헤더를 앞에 붙여서 어댑터로 전달)
6. LAN2 어댑터는 네트워크로 복사
7. 프레임이 호스트 B에 도착하면 어댑터는 프레임을 전선에서 읽어들이고, 프로토콜 소프트웨어로 넘긴다.
8. 마지막으로 B의 프로토콜 소프트웨어는 패킷 헤더와 프레임 헤더를 벗겨낸다.(해당 데이터 서버의 가상공간으로 복사)
'Computer Systems' 카테고리의 다른 글
🖥[CSAPP] 11장. 네트워크 프로그래밍 HTTP (0) | 2022.11.07 |
---|---|
🖥[CSAPP] 3장. 프로그램의 기계수준 표현 (0) | 2022.11.06 |
🖥[CSAPP] 11장(5). 네트워크 프로그래밍_ 웹서버 (0) | 2022.11.04 |
🖥[CSAPP] 11장. 네트워크 프로그래밍(웹 서버 ver.0) (0) | 2022.11.04 |
🖥[CSAPP] 9장. 분리 가용리스트 (Segregated Free List) (1) | 2022.11.02 |
댓글