이번주에는 웹 서버의 개념을 기초수준부터 정리하고 많이 사용되는 개념인 TCP/IP를 정리하고자 한다.
1. 클라이언트 - 서버 프로그래밍 모델
2. 네트워크
3. TCP/IP 프로토콜
1. 클라이언트 - 서버 프로그래밍 모델
거의 모든 네트워크들의 기본모델이다.
실제 세계에서 Client side에서 Server에 요청을하면 server에서 동적, 정적 컨텐츠를 보내줌.
서버는 리소스를 관리하고 리소스를 조작해서 클라이언트가 원하는 서비스를 제공함.
예를 들어,
1. 브라우저에서 특정 domain (서버 주소) 으로 접근하면 server에서 메인화면을 브라우저에 전송해준다. - 웹서버
2. 혹은, 다른 서버간의 파일 교환하는 소프트웨어 ex)파일질라 - FTP
클라이언트와 서버는 프로세스이며, 머신이나 호스트가 아님을 기억할 것. (1개의 머신, 호스트가 여러가지 프로세스를 서비스 할 수 있음)
2. 네트워크
클라이언트와 서버는 많은 경우 별도의 호스트에서 운영되고, 컴퓨터 네트워크와 하드웨어 및 소프트웨어 자원을 사용해서 통신한다. 호스트 입장에서 네트워크는 마우스, 키보드, 모니터와 마찬가지로 I/O디바이스이다.
네트워크에서 수신한 DATA는 I/O와 메모리 버스를 통해, 어댑터에서 메모리로 DMA전송으로 복사된다.
-> DMA(direct memory access)는 말그대로 cpu를 안거치고 직접 메모리로 복사된다는 의미임.
CS 교과서 chapter 10에 명시되어 있는데, 모든 I/O Device는 파일로 모델링되며, 입출력은 메모리와 디바이스 상호간의 데이터 복사와 동일하다. 클라이언트와 서버 사이 통신에 사용되는 Socket도 마찬가지로 파일임을 기억할 것.
(참고)
네트워크는 Layer별로 구분이 된다. 좀 자세히 알려면 아쉽지만 책사서 공부해야한다. 그냥 이런게 있다고..
OSI(Open System Interconnection) 에서는 7layer 로 구분하고 TCP/IP에서는 조금 적은 layer 로 나뉜다.
Layer가 나뉘어져 있기 때문에 장점이 있다. 독립적으로 문제파악이 가능하고, 독립적으로 진보, 진화(?)할 수 있다.
1layer인 물리 계층(LAN(ethernet), WAN(router) 위에 3layer인 Network layer가 있고, 전송관련 개념인 TCP,UDP는 4layer에 속한다.
호스트간의 네트워크는 서로 비호환적일 수도 있다. 하지만 각 호스트와 라우터에서 돌고있는 프로토콜 소프트웨어로 문제없이 소통 가능하다. 호스트당 하나만 가지고 있는 인터넷 주소, 데이터 비트를 패킷이라고 부르는 비연속적인 단위로 묶는 통일된 방법이 정의되어 있다.
호스트간의 데이터 전송 다이어그램이다. 데이터에 Internet헤더(패킷 헤더), LAN 프레임 헤더가 추가되어있다. 프레임헤더는 라우터로의 주소가 지정되어 있고, 패킷헤더에는 목적지 호스트의 주소가 지정되어 있다.
3. TCP/IP 프로토콜
TCP와 UDP 간단히 설명...
TCP의 경우 신뢰성있는 통신을 보장한다. '안전한' '완전' '양방향' 연결임. 따라서 데이터가 전달되는 과정에서 여러 스위치 라우터 등등을 거치면서 데이터가 잘못 전달되는 현상이나 전달이 안되는 경우 오류제어, 흐름제어를 통해 신뢰성있는 데이터가 전달될 수 있도록 한다. TCP는 연결시 3-way hanshaking 방식으로 목적지와 상호 패킷을 교환하여 연결한다. 연결을 종료할 때는 4-way hanshaking 방식을 사용한다. 신뢰성 연결과 전달을 보장하는 만큼 중간의 확인과정을 거치고 연결을 계속 유지해야되기 때문에 그만큼의 리소스가 더 들어간다.
UDP 프로토콜의 경우 비연결형 프로토콜로서 데이터를 빠르게 전달하는데에 초점을 두고 있다. 따라서 UDP는 목적지에 데이터가 제대로 전달 되었는지 조차 확인하지 않는다. 그냥 전송하면 끝인 것이다. 이렇게만 말하면 이걸 왜쓰냐라고 할 수 있는데 비연결을 지향하고 데이터를 전달할 때 TCP에 비해 오버헤드가 적다. 그래서 신뢰성 있는 데이터 전송이 필요할 때보다 스트리밍같이 연속적인 특성을 가지고 있는 서비스에 사용한다.
인터넷 생방송 같은경우 UDP많이 사용한다고 한다... 속도가 중요하기도 하고, 패킷이 소실되어 영상화질 떨어져도 욕좀 먹을 뿐 크리티컬한 문제를 초래하지는 않으니..
TCP/IP는 간단히 구현한 소켓 인터페이스와 I/O함수들을 통해 통신이 가능하다.
소켓함수는 일반적으로 시스템콜들로 구현된다. 시스템콜이 커널에서 트랩을 발생시키고, 커널 모드 함수들을 호출한다. IP는 데이터그램이라고 불리는 패킷을 목적지 호스트로 배달하는 역할을 해준다..
(호스트에서 호스트.. 조금더 구체적으로 말하면 프로세스에서 프로세스임..)
소켓 인터페이스 설명 전에 잠시 개념정리
IP 주소
unsigned 32bit int 형태 (Big endian byte order)
네트워크 프로그램은 보통 IP를 구조체에 저장한다. (struct in_addr)
IP구조체에서 항상 big endian byte order로 변환되어 저장된다.
보통 dotted-decimal 형태로 저장되어 있다. ex) 128.2.194.242 (= 0x8002c2f2)
Internet Domain
클라이언트와 서버는 서로 통신할때 IP주소를 사용하는데, 사람이 기억하기 어렵다.
이를 위해 특정 IP를 Domain이라는 문자형 주소로 매핑해서 인터넷 주소로 사용한다.
Domain은 DNS(Domain Name Syetem)이라는 분산 데이터베이스에 의해 관리되어 왔다.
linux terminal에서 nslookup함수를 통해 domain에 대응하는 IP를 확인 가능하다.
소켓(Socket)
연결의 종단점(end point)라고 묘사된다. 실체는 파일이며 상호 통신의 매개체라고 이해하면 된다.
프로세스는 소켓을 fd(file descriptor)로 관리한다.
각각의 소켓은 인터넷주소(IP)와, 정수 포트로 이루어진 소켓 주소를 가지며 address:port 형태로 나타낸다.
클라이언트의 경우 소켓이 연결요청시에 커널이 포트번호를 자동으로 할당해준다.
서버의 소켓 주소에 있는 포트는 보통 영구적으로 이용되는 well-known 포트 번호이다.0
file descriptor 간단설명..
process는 각각 Descriptor table을 가지고 있고 file 들을 인덱스 방식으로 관리한다.
0,1,2번의 경우 stdin, stdout, stderr (표준 입출력, 에러)이 항상 차지하고 있고 새로운 파일은 3번부터 낮은 번호 순서로 할당된다.
오픈된 file별로 file table을 가지고 있고, 테이블의 엔트리는 현재 파일 위치, 현재 해당 파일 참조 횟수가 적혀있다.
4. 소켓 인터페이스 (이어서 정리..)
'컴퓨터 시스템 > CSAPP' 카테고리의 다른 글
[ CSAPP / ch11 ] tiny web server, web proxy (0) | 2021.09.27 |
---|---|
C 입력 버퍼와 출력 버퍼 stdin, stdout (0) | 2021.09.24 |
링킹 (linking) 소스파일과 헤더파일 (0) | 2021.09.14 |
동적 메모리 할당(Dynamic memory allocation), malloc 함수 구현 (malloc lab) (0) | 2021.09.14 |
데이터 세그먼트 간단정리 (0) | 2021.09.06 |