1. 클라이언트-서버 프로그래밍 모델
모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초하고 있다. 이 모델에서 근본적인 연산은 트랜잭션이다.
클라이언트-서버 트랜잭션은 네 단계로 구성된다.
- 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션을 개시한다. (예시- 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청 보냄)
- 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다. (예시- 웹 서버가 클라이언트로부터 요청을 받을 때, 디스크 파일 읽음)
- 서버는 응답(response)을 클라이언트로 보내고, 그 후 다음 요청을 기다린다.
- 클라이언트는 응답을 받고 이것을 처리한다. (예시- 웹 브라우저가 서버로부터 페이지를 받은 후, 이것을 스크린에 디스플레이함)
클라이언트와 서버는 프로세스(실행 중인 프로그램)이며 모든 서버는 호스트이지만, 모든 호스트가 서버는 아니다.
* 호스트(host)?
네트워크 주소가 할당된 네트워크 노드.
네트워크에 연결이 확립된 모든 장치는 호스트의 자격이 있는 반면, 다른 장치(client)로부터 연결을 수락하는 호스트만 서버가 될 수 있다.
2. 네트워크
네트워크는 위에서 말한 클라이언트와 서버가 서로 데이터를 요청하고 응답하는 것과 같이 호스트들을 서로 연결하고 통신할 수 있는 것을 말한다. 물리적으로 네트워크는 기하학적 위치로 구성된 계층구조 시스템이다.
| LAN(Local Area Network)
네트워크 계층구조의 하위수준으로는 LAN이 있고, 가장 대중적인 LAN기술은 이더넷(Ethernet, 네트워크에 연결된 각 기기들이 48bit의 고유의 MAC주소를 가지고 이 주소를 이용해 상호간에 데이터를 주고 받음)이다.
이더넷 세그먼트는 몇 개의 전선들과 허브라고 부르는 작은 상자로 구성된다. 각 전선은 동일한 최대 비트 대역폭(대개 100Mb/s거나 1Gb/s)을 가진다.
호스트는 프레임이라고 부르는 비트들을 세그먼트의 다른 호스트에 보낼 수 있다. 각 프레임은 프레임의 소스와 목적지, 프레임의 길이를 식별할 수 있는 고정된 헤더 비트를 가지고 있으며, 그 뒤에 데이터 비트가 이어진다. 모든 호스트 어댑터는 이 프레임을 볼 수 있지만 목적지 호스트만이 실제로 읽어들인다.
전선들과 브릿지라고 하는 작은 상자들을 사용해서 다수의 이더넷 세그먼트가 연결되어 브릿지형 이더넷이라고 하는 더 큰 LAN을 구성할 수 있다.
브릿지는 허브보다 더 높은 전선의 대역폭을 가지며 우수한 분산 알고리즘을 사용해서 선택적으로 필요한 호스트에게만 프레임을 보낼 수 있도록 한다.
위의 그림에서 예시를 들자면, 만일 호스트A가 같은 세그먼트에 있는 호스트B로 한 프레임을 전송하려고 한다면 브릿지 X에서 필터링을 거쳐서 다른 세그먼트로 프레임이 복사되지 않도록 하여 다른 세그먼트에서의 대역폭을 절약한다. 다른 경우로 만약 호스트A에서 호스트C로 프레임을 전송한다면 브릿지X는 이 프레임을 브릿지Y에 연결된 포트로만 복사하고, 브릿지Y는 호스트C가 있는 세그먼트로만 이 프레임을 복사한다.
| WAN(Wide-Area Network)
다수의 비호환성 LAN들은 라우터라고 부르는 특별한 컴퓨터에 의해 물리적으로 연결될 수 있으며, 라우터는 네트워크 간 연결(상호연결 네트워크)을 구성한다. 라우터들은 WAN으로 연결되며, 이렇게 LAN과 WAN들이 연결되어 internet을 구성한다.
물리적으로 서로 다른 곳에 연결된 호스트들이 어떻게 데이터를 주고 받을 수 있을까? 답은 프로토콜 소프트웨어의 계층이다. 이 소프트웨어는 어떻게 호스트들과 라우터들이 데이터를 전송하기 위해서 협력하는지 결정하는 프로토콜을 구현한 것이다.
프로토콜은 두 가지 기본 기능을 제공해야 한다.
- 명명법(Naming Scheme): 각 호스트는 자신을 유일하게 식별하는 internet주소 최소한 한 개 할당
- 전달기법(delivery mechanism): 패킷이라고 부르는 데이터 비트 단위로 묶는 통일된 방법으로 전송
*패킷: 패킷 크기와 소스, 목적지 호스트 주소를 포함하는 헤더 + 데이터 비트를 포함하는 데이터
아래의 그림은 하나의 라우터에 연결된 두 개의 LAN으로 구성된 internet의 예시를 보여준다.
3. 글로벌 IP 인터넷
글로벌 IP 인터넷은 internet을 성공적으로 구현한 가장 유명한 것
* Internet vs internet
소문자 internet: 인터넷의 일반적인 개념
대문자 Internet: 글로벌 IP Internet 의미
위 그림은 인터넷 클라이언트-서버 응용의 기본적인 하드웨어 및 소프트웨어 구조를 보여준다.
| IP
IP는 기본 명명법과 데이터그램이라고 하는 패킷을 한 인터넷 호스트에서 다른 호스트로 보낼 수 있는 배달 메커니즘을 제공한다. IP매커니즘은 만일 데이터를 잃어버리거나 네트워크 내에서 중복되는 경우 복구하려고 노력하지 않는다.
| TCP/IP
TCP는 IP 위에 구현한 프로토콜로 프로세스들 간에 안전한 완전 양방향 연결을 제공한다. 즉 전송이 딜레이되더라도 데이터 손실이 없도록 한다.
| UDP
UDP는 IP를 확장해서 데이터그램이 호스트에서 호스트로 가는 대신, 프로세스에서 프로세스로 전송될 수 있다. IP와 마찬가지로 데이터그램이 손실되는 경우 복구하려고 노력하지 않지만 제 시간에 데이터를 전달한다.
IP의 특징은 다음과 같다.
- 호스트의 집합은 32비트 IP주소에 매핑
- IP주소의 집합은 인터넷 도메인 네임(Inetnet Domain Name)이라고 부르는 식별자의 집합에 매핑
- 하나의 인터넷 호스트의 프로세스는 연결을 통해서 다른 인터넷 호스트의 프로세스와 통신
2. IP 주소
IP주소는 비부호형 32비트 정수. 네트워크 프로그램은 IP주소를 IP주소 구조체에 저장
// IP address structure
struct in_addr {
unit32_t s_addr; // Address in network byte order (big-endian)
}
IP주소는 dotted-decimal표기라고 하는 형식으로 제시되며, 이것은 각 바이트가 십진수 값을 사용하고 다른 바이트들과는 점을 사용해서 구분된다. (예시- 128.2.194.242는 주소 0x8002c2f2의 dotted-decimal 표현)
3. 인터넷 도메인 이름(Internet Domain Name)
인터넷 클라이언트와 서버는 서로 통신할 때 IP주소를 사용하지만, 컴퓨터 사용자 입장에서 정수들로 이루어진 주소값을 기억하기 어려워하기 때문에 도메인 이름을 별로도 정의한다(www.google.com과 같은 우리에게 익숙한 도메인 이름들!).
인터넷은 도메인 이름의 집합과 IP주소 집합 사이에 매핑을 정의하고, 이 매핑은 DNS(Domain Name System)이라는 전 세계에 분산된 데이터베이스에 의래 관리되어 왔다. NSLOOKUP 프로그램으로 도메인 이름과 연관된 IP주소를 일부 조사할 수 있다.
'개발자 도전기 > [CS] CSAPP' 카테고리의 다른 글
네트워크 프로그래밍(Network Programming) | 웹 서버, 소형 웹 서버 Tiny 만들기 (0) | 2021.09.24 |
---|---|
네트워크 프로그래밍(Network Programming) | 소켓 인터페이스, getaddrinfo함수, addrinfo구조체 (0) | 2021.09.24 |
Malloc Lab | 동적 메모리 할당(3) - Implicit - first fit, next fit 코드 구현 (0) | 2021.09.15 |
Malloc Lab | 동적 메모리 할당(2) - 묵시적 가용 리스트(Implicit free list) (0) | 2021.09.14 |
Malloc Lab | 동적 메모리 할당(1) - 개념 정리 (0) | 2021.09.14 |
댓글