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차원 공간에 여러 개의 연속된 대상을 배열 하는 방법
- 최상위 바이트부터 차례로 저장하는 방법
- 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열 하는 방법
- 빅 엔디안(Big-endian)
- 리틀 엔디안(Little-endian)
- 최하위 바이트부터 차례로 저장하는 방법
- 엔디안(Endianness)
/* 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
- Ad-hoc 네트워크
(http://www.ktword.co.kr/test/view/view.php?m_temp1=2833) - 리틀 엔디안 VS 빅 엔디안 - 프로그래머의 블로그
(https://genesis8.tistory.com/37) - HTTP - 위키백과, 우리 모두의 백과사전
(https://ko.wikipedia.org/wiki/HTTP) - MIME 타입 - HTTP | MDN
(https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types)
728x90
'🖥️ Computer Science > Computer Architecture' 카테고리의 다른 글
Ch9. Dynamic Memory Allocation(9.9) (1) | 2022.12.06 |
---|---|
Ch1. A Tour of Computer Systems(1.7 ~ 1.9) (0) | 2022.12.06 |
Ch1. A Tour of Computer Systems(1.1 ~ 1.6) (0) | 2022.11.03 |