배운것
클라이언트 - 서버 프로그래밍 모델
모든 네트워크 Application Program은 클라이언트-서버 모델이 기초하고 있다.
이 모델을 사용해서 Application은 한개의 서버 프로세스와 한 개 이상의 클라이언트 프로세스로 구성된다.
서버는 (1) 일부 리소스를 관리하고, (2) 리소스를 조작해서 클라이언트를 위한 일부 서비스를 제공한다.
!! URL : Uniform Resource Locator 👈 이 리소스도 위 리소스에 포함된다.
예를 들어, 웹 서버는 디스크 파일들을 관리하고 클라이언트를 대신해서 이들을 가져오고 실행한다.
클라이언트 - 서버 모델에서 근본적인 연산은 트랜잭션이다.
클라이언트 - 서버 트랜잭션은 네 단계로 구성된다.
1) 클라이언트가 서비스가 필요로 할 때, 클라이언트는 한개의 Request를 서버에 보내는 것으로 트랜잭션을 게시한다.
2) 서버는 요청을 받고 해석하고, 자신의 Resource를 적절한 방법으로 조작(제어)한다.
3) 서버는 Response을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다
4) 클라이언트는 Response를 받고 이것을 처리한다. (디스플레이 출력)
클라이언트와 서버는 프로세스이다.
네트워크
호스트에게 네트워크는 단지 또 다른 I/O Device이며, 데이터를 위한 소스와 싱크로 서비스한다.
물리적으로 네트워크는 기하학적 위치로 구성된 계층 구조 시스템이다.
하위수준은 LAN(Local Area Network)로 빌딩이나 캠퍼스에 설치된다.
가장 대중적인 LAN기술은 현재까지는 Ethernet이다.
Ethernet Segment는 몇개의 전선들과 허브라고 부르는 작은 상자로 구성된다.
Ethernet Segment의 한쪽 끝은 호스트의 어댑터에 연결되고, 다른 끝은 허브의 포트에 연결된다.
허브는 각 포트에서 수신한 모든 비트를 종석적으로 다른 모든 포트를 복사한다.
각 이더넷 어댑터는 어댑터의 비휘발성 메모리에 저장된 전체적으로 고유한 48비트 주소를 가진다.
호스트는 "Frame"이라고 부르는 비트들을 세그먼트의 다른 호스트에 보낼 수 있다.
각 Frame은 "Frame Source & Destination", "Length of Frame"를 식별할 수 있는 고정된 "Header Bit(Ethernet header)", "Data bit"로 이루어진다.
모든 호스트 어댑터는 이 프레임을 볼수는 있지만, 목적지 호스트만이 실제로 이것을 읽어들인다.
전선들과 브릿지라고 하는 작은 상자들을 사용해서 다수의 이더넷 세그먼트가 연결되어 브릿지형 이더넷이라고 한다.
계층구조의 상부에서 다수의 비호환성 LAN들은 Router라고 부르는 특별한 컴퓨터에 의해서 연결될 수 있으며, 라우터는 네트워크 간 연결을 구성한다.
Router는 (1) 고속의 point-to-point 전화 연결을 할 수 있으며, 이들은 (2) WAN(Wide-Area-Network)라고 하는 네트워크의 사례다.
internet의 중요한 특성은 이것이 매우 다르고 비호환적인 기술을 갖는 여러가지 LAN과 WAN들로 이루어져 있다는 점이다.
각 호스트는 물리적으로 다른 모든 호스트에 연결되어 있지만, 어떻게 어떤 소스 호스트가 모든 비호환적인 네트워크들을 지나서 데이터 비트를 다른 목적지 호스트로 전송할 수 있는가 ?
해답은 여러가지 네트워크 간의 차이를 줄여주는 각 호스트와 라우터에서 돌고 있는 "프로토콜 소프트웨어의 계층"이다.
이 프로토콜은 두가지 기본 기능을 제공한다.
1) Naming Scheme(명명법) : 서로 다른 LAN 기술은 주소를 호스트에 할당하는 서로 다린 비호환성을 갖는 방법을 사용한다.
internet 프로토콜은 호스트 주소를 통일된 포맷을 정의해서 이 차이점을 줄인다.
각 호스트는 자신을 유일하게 식별하는 internet 주소 최소한 한개가 할당된다.
(궁금하시면 ip -> host-Ip, network-ip 중 host-ip A,B,C,D,E에 관해 찾아보세요!)
2) delivery mechanism(전달 기법) : 서로 다른 네트워킹 기술은 서로 다른 비호환성을 갖는 비트 인코딩방법과 Frame 내에 이들을 packaging하는 방법을 가지고 있다.
internet protocol은 데이터 비트를 packet이라고 부르는 비연속적인 단위로 묶는 통일된 방법을 정의해서 이 차이점을 줄인다.
packet은 패킷 크기와 소스 및 목적지 호스트 주소를 포함하는 헤더와 소스호슽트가 보낸 데이터 비트를 포함하는 데이터로 구성된다.
글로벌 IP 인터넷
각 인터넷 호스트는 TCP/IP Protocol(Transmission Control Protocol / Internet Protocol)을 구현한 소프트웨어를 실행한다.
인터넷 클라이언트와 서버는 "소켓 인터페이스"와 Unix I/O 함수들의 혼합을 사용해서 통신한다.
소켓 함수들은 일반적으로 시스템 콜들로 구현되는데, 이 시스템 콜은 커널에서 트랩을 발생시키며, TCP/IP 에서 다양한 커널 모드 함수를 호출한다.
IP는 기본 명명법과 데이터 그램이라고 하는 패킷을 한 인터넷 호스트에서 다른 호스트로 보낼 수 있는 배달 메커니즘을 제공한다.
TCP는 IP위에 구현한 복잡한 프로토콜로 프로세스들 간에 안전한 완전 양방향 연결을 제공한다.
IP 주소
IP주소는 빅엔디안 바이트 순서를 따르며, host-ip와 network-ip로 구성된다.
Internet Domain Name
인터넷 클라이언트와 서버는 서로 통신할 때 IP주소(ex, 123.124.123.124)를 사용한다.
IP주소를 기억하기 어려우니 www.coding-hyeok.com 처럼 간단한 도메인 이름을 매핑 시킨다.
이러한 인터넷 도메인 네임을 관리하는 것이 DNS(Domain Name System)이다.
인터넷 연결
인터넷 클라이언트와 서버는 연결을 통해서 byte stream을 주고 받는 방식으로 통신한다.
이 연결은 두 개의 프로세스를 연결한다는 점에서 point-to-point연결이다.
데이터가 동시에 양방향으로 흐를 수 있다는 의미에서 이것은 fill-duplex(완전양방향)이다.
Socket(소켓)은 연결의 End-point(종단점)이다.
각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가지며, 이것은 address:port로 나타낸다.
클라이언트의 소켓 주소 내의 포트는 클라이언트가 연결 요청을 할 때 커널이 자동으로 할당하며, 이것은 ephemeral(단기) 포트라고 한다.
그러나, 서버의 소켓 주소에 있는 포트는 대게 영구적으로 서비스에 연결되는 잘 알려진 포트다.
ex) 웹서버는 80, 이메일 서버 25
연결은 두개의 end-point의 소켓 주소에 의해 유일하게 식별된다.
이 두개의 소켓 주소는 "socket pair(소켓 쌍)"이라고 하며 tuple로 나타낸다.
(cliaddr:cliport, servaddr:servport)
cliaddr : 클라이언트의 IP주소
cliport : 클라이언트의 포트
servaddr : 서버의 IP주소
servport : 서버의 포트
느낀점
rb tree, malloc은 이걸 해서 도대체 어디써? 라는 생각이 들면서 재미가 없었다.
그러나, 웹 프로그래머 지망생으로써, 웹서버 구현은 나의 흥미를 이끌기에 충분했던 것 같다. 아니 넘쳤다.
너무 재밌다.
그러나, 양이 너무 방대해서 일주일 안에 끝까지 알고 구현을 하기엔 벅찰 것 같다. 그래서 얕고 넓게 이해하고 넘어가려고 한다.
깊게 못파는 것에 대해 학교 다닐때 좀 들어놓을 걸 이라는 생각이든다.
시간이 부족하다고 느낀만큼 더 열심히 해보도록 하자!
모두들 열코🔥!
'SW정글사관학교' 카테고리의 다른 글
[SW 정글] 5/14 TIL - what is HTTP? (0) | 2022.05.17 |
---|---|
[SW 정글] 5/13 TIL - 웹서버 (0) | 2022.05.14 |
[SW 정글] 웹서버 구현 error - 403 Forbidden , Tiny couldn't read the file: ./ (feat, c) (0) | 2022.05.13 |
[SW 정글] 5/7~11 TIL 가상메모리 - 주소번역, TLB, 메모리 계층구조, malloc 구현 (2) | 2022.05.11 |
[SW 정글] 5/6 TIL 가상메모리 (2) | 2022.05.07 |