728x90

11.1 The Client-Server Programming Model

  • 서버-클라이언트 모델
    • 서버 프로세스는 한 개 또는 여러 개의 클라이언트 프로세스로 구성된다.
    • 서버 : 리소스 관리, 리소스 조작 → 클라이언트를 위한 서비스 제공
  • 서버-클라이언트의 근본적인 연산은 ‘트랜잭션’이다.
    • 아래와 같은 총 4가지 스텝으로 트랜잭션이 이루어진다.

⚠️ 클라이언트와 서버는 프로세스이며, 머신이나 호스트는 아니다.

 

 


11.2 Networks

  • 클라이언트와 서버는 별도의 호스트에서 돌아가며, 컴퓨터 네트워크의 H/W 및 S/W를 사용해서 통신한다.
  • 호스트에게 네트워크는 또 다른 I/O 디바이스 이다.

 

  • I/O bus의 확장 슬롯에 어댑터가 꽂혀있으며, 네트워크에 물리적인 인터페이스를 제공한다.
  • 네트워크에서 수신한 데이터 : I/O → memory bus → adapter → memory
    • 보통 DMA 전송으로 복사된다.
    • 💡 DMA(Direct Memory Access) : CPU의 개입없이 I/O 장치와 기억장치 사이의 데이터 전송

 

  • 계층 구조 시스템
    • 물리적인 관점의 네트워크 : 기하학적 위치로 구성된 계층구조 시스템
    • SAN(System Area Network) : 컴퓨터 클러스터 간 연결
    • LAN(Local Area Network) : 빌딩이나 캠퍼스간 연결
    • WAN(Wide Area Network) : 도시나 나라간 연결

 

1.이더넷 세그먼트(Ethernet Segment)

  • 전선 - 허브간 연결

 

  • 호스트 어댑터 - 허브 포트에 연결
  • 이더넷 어댑터는 고유한 48bit 주소를 갖는다.(MAC address)
    • 💡 ip 주소가 네트워크 주소라면 mac 주소는 하드웨어 주소이다. (= 그 기계의 고유번호)
  • ‘프레임’ 이라는 명칭으로 호스트는 일련의 청크 비트를 다른 호스트로 전송한다.
  • 허브는 종속적으로 각 포트에서 수신한 모든 비트를 다른 모든 포트로 복사한다.
    • 모든 호스트들은 송수신되는 모든 비트를 볼 수 있지만 목적지 호스트만 해당 데이터를 읽어들인다.

 

2.브릿지형 이더넷(Bridged Ethernet Segment)

  • 다수의 이더넷 세그먼트가 연결되어서 브릿지형 이더넷을 구성한다.

 

  • 어떤 호스트가 어떤 포트에서 도달가능한지 장기간에 걸쳐 학습하고 하나의 포트에서 다른 포트로 프레임을 복사한다.
  • 이후 중간 호스트에서 다음 호스트로 가기전에 해당 프레임을 버린다.

 

3.인터넷(internets)

  • 라우터를 이용해 다수의 비호환적인 LAN들을 물리적으로 연결한다.
  • 라우터는 각 네트워크에 대해 어댑터(포트)를 가지고 있다.

 

 

  • 이렇게 연결된 네트워크들을 인터넷이라고 부른다.

 

  • 인터넷의 논리적 구조
    • 애드 훅이 네트워크로 상호 연결된다.
      • 💡 애드 훅(Ad-hoc) : (임기변통) 독립 단말끼리 외부의 도움없이, 자기들 만으로 자율적인 임시적인 망을 구성
      • 특정한 토폴로지(형태)가 존재하지 않는다.
    • 네트워크를 통해 패킷을 전송한다.

 

  • 비호환적인 네트워크들을 어떻게 연결하는가?
    • 각 호스트와 라우터에서 돌고 있는 프로토콜 소프트웨어를 통해 연결한다.

 

  • 프로토콜
    • 호스트들과 라우터들이 데이터를 전송하기 위해 어떻게 협력해야하는 지를 규정한다.
    • 명명법(Naming Scheme) : 호스트 주소를 통일된 포맷으로 정의한다.
      • 각 호스트는 자신을 유일하게 식별하는 internet 주소 한 개를 할당한다.
    • 전달기법(Delivery mechanism)
      • 비호환성을 갖는 비트에 대한 인코딩 방법과 프레임 내에 이들을 패키징하는 방법 규정
      • 데이터 비트를 패킷(비연속적 단위)으로 묶는 통일된 방법 제공
        • 💡 패킷 : 헤더 + 페이로드로 구성

 

  • 예제 인터넷 구성 : 하나의 라우터에 두 개의 LAN이 연결된 상태

 

  • 캡슐화를 통해 인터넷 데이터를 전송한다.

 

 


11.3 The Global IP Internet

  • 호스트는 TCP/IP 프로토콜을 기반으로 한다.
  • 인터넷 클라이언트와 서버는 소켓 인터페이스와 Unix I/O 함수의 통합을 통해 접근한다.

 

  • IP(Internet Protocol)
    • 기본 명명법
    • host-to-host (packet unit : datagram)

 

  • UDP(Unreliable Datagram Protocol)
    • 비신뢰성 데이터그램 프로토콜
    • process-to-process

 

  • TCP(Transmission Control Protocol)
    • 완전 양방향 연결
    • process-to-process

 

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

 

  • IPv4 🆚 IPv6
    • IPv4(Internet Protocol Version 4) : 32비트 주소를 이용하는 인터넷 프로토콜
    • IPv6(Internet Protocol Version 6) : 128비트 주소를 이용하는 인터넷 프로토콜
      • 더 넓은 주소 확장 체계를 표현할 수 있다.
    • But, 아직까지도 주요한 인터넷 트래픽은 IPv4를 통해 이루어진다.

 

 

11.3.1 IP Addresses

  • IP 주소는 항상 네트워크 바이트 순서(빅 엔디안)에 따라 저장된다.
    • 호스트의 바이트 순서가 리틀 엔디안인 경우에도 항상 빅 엔디안으로 저장된다.(통일성 제공)

 

  • 빅 엔디안 🆚 리틀 엔디안
    • 엔디안(Endianness)
      • 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열 하는 방법
        • 최상위 바이트부터 차례로 저장하는 방법
    • 빅 엔디안(Big-endian)
    • 리틀 엔디안(Little-endian)
      • 최하위 바이트부터 차례로 저장하는 방법
       

/* Internet address structure */
struct in_addr {
        uint32_t s_addr; /* network byte order (big-endian) */
};
  • 네트워크 프로그램은 이와 같은 IP 주소 구조체에 저장한다.

 

  • IP 주소는 dotted-decimal 표기로 제시된다.
  • 각 바이트는 십진수 값을 사용하며 다른 바이트들과는 점을 사용해서 구분한다.

 

 

11.3.2 Internet Domain Names

  • IP 주소 집합으로 매핑하는 매커니즘과 함께 별도의 도메인 이름 집합을 정의한다.
  • 계층 구조 형성
  • 계층 구조에서 자신의 위치를 인코드

  • DNS(Domain Naming System)
    • 분산된 데이터베이스에 의해 관리
    • 도메인 이름 집합과 IP 주소집합 사이의 매핑을 정의한다.

 

💡 localhost : 같은 머신에서 돌고 있는 클라이언트와 서버들을 참조하기에 편하다.

  • 항상 루프백 주소 127.0.0.1 에 매핑된다.

 

 

nslookup

  • DNS 서버에 질의하여, 도메인의 정보를 조회한다.
>>> Non-authoritative answer:
>>> Name:    google.com
>>> Address: 142.250.76.142

 

  • 인터넷 연결
    • 연결(connection)을 통해 바이트 스트림을 주고받는다.
    • 소스 프로세스가 보낸 데이터와 동일한 순서로 목적지 프로세스에서 수신된다.
    • ‘point-to-point` : 두 개의 프로세스를 연결한다.
    • ‘완전양방향(full-duplex)’ : 데이터가 동시에 양방향으로 흐를 수 있다.

 

소켓(socket)

  • address : port

 

  • 클라이언트 소켓 주소의 포트
    • 클라이언트가 연결 요청 시, 커널이 자동 할당
    • ‘단기 포트’

 

  • 서버 소켓 주소의 포트
    • 보통 영구적으로 사용
    • 잘 알려진 서비스 이름(well-known-service-name)’ - ‘잘 알려진 포트(well-known-port)

 

  • 연결은 두 종단점의 소켓 주소(소켓 쌍)에 의해 유일하게 식별된다.
    • (클라이언트 IP:클라이언트 포트, 서버 IP:서버 포트 : (cliaddr:cliport, servaddr:servport)

 

 

11.4 The Sockets Interface

  • 소켓 인터페이스 : 네트워크 응용을 만들기 위한 Unix I/O 함수들과 함께 사용되는 함수들의 집합
  • 소켓
    • 통신을 위한 끝점(엔드포인트)
    • Unix 프로그램 관점 : 해당 식별자를 가지는 열린 파일 💡 Unix의 모든 데이터는 파일로 구성된다.
    • 통신 객체(클라이언트 & 서버)의 구체적인 주소를 표현하기 위해서는 ① 주소체계(address family), ② IP 주소, ③ 포트번호 등이 지정되어야한다.
  • 클라이언트 : 연결 요청을 개시하는 능동적 개체
  • 서버 : 클라이언트로부터의 연결 요청을 기다리는 수동적 개체

 

 


11.5 Web Servers

 

11.5.1 웹 기초

  • 웹 클라이언트 ↔ 서버
    • HTTP (텍스트 기반 응용수준 프로토콜) 사용
    • 웹 클라이언트(=브라우저) : 서버로 인터넷 연결을 오픈하고 컨텐츠 요청
    • 서버 : 요청한 컨텐츠로 응답 및 연결 종료
  • 💡 HTTP : HTML(Hypertext Markup Language)로 작성 가능

 

  • 웹 컨텐츠
  • MIME(Multipurpose Internet Mail Extensions)
    • MIME type : 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘

 

  • 정적 컨텐츠 처리
    • 디스크 파일(정적 컨텐츠)를 가져와서 해당 내용을 클라이언트에게 보낸다.
  • 동적 컨텐츠 처리
    • 실행파일을 돌리고, 그 출력을 클라이언트에게 보낸다.
    • 동적 컨텐츠 : 실행파일이 런타임에 만든 출력

 

  • 웹 서버가 리턴하는 모든 내용들은 서버가 관리하는 파일에 연관된다.
  • 해당 파일은 각각 URL이라고 하는 고유 이름을 갖는다.

 

  • Ex1
    • https://www.google.com:80/search?q=godzilla
    • 클라이언트와 서버가 트랜잭션 동안에 사용하는 URL 부분은 다르다.
    • 클라이언트 : https://www.google.com:80
      • 어떤 종류의 서버에 접속해야하며 어디에 서버가 있고, 무슨 포트를 통해 접속해야하는 지 결정한다.
    • 서버 : /search?q=godzilla
      • 리소스의 구분은 / 을 기준으로 구분한다.
      • 리소스의 처음 시작 부분은 홈 디렉토리이다.
      • ? : 리소스와 파라미터 구분
      • & : 파라미터간 구분

 

 

11.5.3 HTTP 트랜잭션

🔑 Keywords

  • HTTP(HyperText Transfer Protocol)
    • 웹상에서 정보를 주고받을 수 있는 프로토콜
    • 주로 html 문서를 주고받는 데에 쓰이며 TCP를 사용하고 HTTP/3부터는 UDP를 사용하며, 80번 포트를 사용한다.

 

  • Telnet
    • 인터넷(원격지 호스트)이나 로컬 영역 네트워크 연결에 쓰이는 네트워크 프로토콜
    • 보통 특정 포트의 개방 여부를 확인하기 위해 쓴다.

 

  • URI(Uniform Resource Identifier)
    • 파일 이름과 옵션인 인자들을 포함하는 URL의 접미어이다.

 

  • HTTP 요청
    • 형태 : method URI version
    • HTTP는 많은 서로 다른 메소드를 지원한다.
      • GET, POST, OPTIONS, HEAD, PUT, DELETE, TRACE
    • version : 요청이 준수하는 HTTP 버전
      • 가장 최신 버전 : HTTP/1.1 → 캐싱과 보안, 클라이언트와 서버의 고급 기능 지원

 

  • HTTP 응답
    • 형태 : version status-code status-message
    • 상태 코드 : 3비트 양수
    • 중요한 헤더 : Content-Type, Content-Length

 

 

11.5.4 동적 컨텐츠의 처리

  • CGI(Common Gateway Interface)
    • 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션

 

 

 

 


Computer Systems: A Programmer's Perspective, 3rd Edition

Randal Bryant (Author), David O'Hallaron (Author)

 

 


🔗 Reference

728x90