-
[WEEK07] 정글5기 - 탐험 준비 - 웹서버 만들기정글 크래프톤 5기 회고 및 정리/WIL 2024. 5. 2. 16:25
1. 네트워크 계층 (OSI7 Layer, TCP/IP Layer)
TCP/IP Layer OSI7 Layer 설명 식별자 데이터 단위 application application - 애플리케이션 목적에 맞는 통신 방법 제공
- HTTP, DNS, SMTP, FTPpresentation - 애플리케이션 간의 통신에서 메시지 포맷 관리
- 인코딩 ↔ 디코딩
- 암호화 ↔ 복호화
- 압축 ↔ 압축풀기session - 애플리케이션 간의 통신에서 세션 관리
- RPC (remote procedure call)
- ex) SSL(TLS)transport transport - 애플리케이션 간의 통신 담당
- 목적지 애플리케이션으로 데이터 전송
- TCP : 안정적이고 신뢰할 수 있는 데이터 전송 보장
- UDP : 필수 기능만 제공- Port 번호
· 프로세스 식별자- Segment (TCP) internet network - 호스트 간의 통신 담당(IP)
- 목적지 호스트로 데이터 전송
- 네트워크 간의 최적의 경로 결정- IP 주소
· IPv4 : 32bit
· host를 식별- Packet link layer data link - 직접 연결된 노드 간의 통신 담당
- MAC 주소 기반 통신 (ARP)- MAC 주소
· 48bit
· NIC 식별- Frame (Ethernet) physical - bits 단위로 데이터 전송 2. 클라이언트-서버 모델
클라이언트-서버 1. 클라이언트가 서비스를 필요할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션을 개시한다.
· 예를 들어 웹브라우저가 파일을 필요할 때, 웹 서버로 요청을 보낸다.
2. 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다.
· 예를 들어 웹 서버가 브라우저로부터 요청을 받을 때, 디스크 파일을 읽는다.
3. 서버는 응답(response)을 클라이언트로 보내고, 그 후에 다음 요청을 기다린다.
· 예를 들어 웹 서버는 이 파일을 다시 클라이언트로 돌려보낸다.
4. 클라이언트는 응답을 받고 이것을 처리한다.
· 예를 들어 웹 브라우저가 서버로 부터 페이지를 한 개 받은 후, 이것을 스크린에 디스플레이한다.3. 소켓(socket, bind, listen, accept, connect, close)
소켓 프로그래밍 - 네트워크 통신을 가능하게 하는 중요한 부분
- 소켓은 네트워크 상에서 서로 다른 시스템 간에 데이터를 교환할 수 있게 해주는 엔드포인트
- 주로 TCP/IP 프로토콜을 사용하여 통신한다.Socket 생성 - socket() : 네트워크 통신을 위한 소켓을 생성한다. 소켓을 식별하는 소켓 디스크립터를 반환
· ex) sock = socket(AF_INET, SOCK_STREAM)주소 할당
(서버 측)- bind() : 소켓에 특정 주소(IP 주소와 포트 번호)를 할당한다. 서버측에서 사용한다.
· ex) bind(sock, (host, port))연결 수신 대기
(서버 측)- listen() : 서버가 클라이언트의 연결 요청을 기다리도록 설정한다. 이 함수는 연결 대기 큐의 크기를 지정한다.
· ex) listen(sock, backlog)연결 수락
(서버 측)- accept() : 클라이언트의 연결 요청을 수락한다.이 함수는 새로운 소켓을 반환하는데, 이 새로운 소켓은 클라이언트와의 통신에 사용된다.
· ex) clinet_sock, addr = accept(sock)
* accept의 사용된 sock은 요청을 듣기 위한 소켓
* client_sock는 클라이언트와 연결된 새로운 소켓
* 듣기 소켓와 연결 소켓을 분리하는 이유는 한번에 여러가지 소켓을 다루기 위해서이다.연결 요청
(클라이언트)- connect() : 클라이언트가 서버에 연결을 요청한다. 서버의 주소 정보가 필요하다.
· ex) connect(sock, (host, port))소켓 닫기 - close() : 사용이 끝난 소켓을 닫는다. 이는 리소스를 해제하고 더 이상 데이터 전송을 중단한다.
· ex) close(sock)추가 정보 - TCP와 UDP : 소켓 프로그래밍은 주로 TCP(신뢰성 있는 연결 지향적 통신) 또는 UDP(비연결형, 신뢰성 없는 통신)를 사용한다.
- IP주소와 포트 번호 : IP 주소는 네트워크 상의 장치를 식별하는 데 사용되며, 포트 번호는 해당 장치 내에서 특정 프로세스를 식별하는 데 사용된다.4. 파일 디스크립터 (file descriptor)
file descriptor
(파일 디스크립터)- 열린 파일이나 다른 입출력 자원을 관리하는 데 사용되는 중요한 개념
- 파일 디스크립터를 통해 운영 체제는 프로그램이 파일이나 입출력 장치를 효율적으로 사용하고 관리하도록 돕는다.역할 1. 리소스 식별
- 파일 디스크립터는 특정 파일이안 리소스를 구분하기 위해 사용된다.
- 예를 들어, 하나의 파일을 열 때마다 고유한 파일 디스크립터(정수 값)가 할당된다.
2. 입출력 관리
- 파일 디스크립터를 통해 프로그램은 읽기(read), 쓰기(write), 닫기(close)와 같은 다양한 입출력 작업을 수행할 수 있다.사용 1. 표준 파일 디스크립터
- 대부분의 운영 체제는 표준 입력, 표준 출력, 표준 오류라는 세 가지 기본 파일 디스크립터를 제공한다.
· 표준 입력(STDIN) : 일반적으로 파일 디스크립터 0번에 해당하며, 사용자 입력을 받는 데 사용한다.
· 표준 출력(STDOUT) : 파일 디스크립터 1번으로, 프로그램의 출력을 표시하는 데 사용된다.
· 표준 오류(STDERR) : 파일 디스크립터 2번으로, 오류 메시지를 출력하는 데 사용된다.
2. 파일작업
- 파일 열기 : open() 함수를 사용하여 파일을 열 때, 운영 체제는 파일 디스크립터를 할당하고 반환한다.
- 파일 읽기/쓰기 : read()와 write() 함수는 파일 디스크립터를 사용하여 특정 파일에 대한 읽기 및 쓰기 작업을 수행
- 파일 닫기 : close() 함수는 파일 디스크립터를 사용하여 열린 파일을 닫고, 해당 리소스를 운영체제에 반환중요성 1. 자원 관리
- 파일 디스크립터를 통해 운영 체제는 열린 파일과 입출력 자원을 효율적으로 관리할 수 있다.
- 프로세스마다 독립적인 파일 디스크립터 테이블을 가지고, 이를 통해 자원 사용을 추적한다.
2. 보안과 격리
- 파일 디스크립터는 프로세스마다 별개로 관리된다.
- 이는 프로세스 간 격리를 제공하고, 시스템의 보안을 강화한다.
3. 표준화된 인터페이스
- 파일 디스크립터를 사용하면, 다양한 종류의 입출력 자원(파일, 소켓, 파이프 등)에 대해 일관된 방식으로 작업을 수행할 수 있다.
- 이는 프로그래밍의 단순화와 이식성 향상에 기여한다.정리 - 파일 디스크립터는 저수준 파일 입출력에 필수적인 개념으로, 시스템 프로그래밍 뿐만 아니라 네트워크 프로그래밍에서도 중요한 역할을 한다.
- 예를 들어, 소켓 프로그래밍에서 생성된 소켓 역시 파일 디스크립터를 통해 관리된다.5. Datagram Socket vs Stream Sokcet
Datagram Socket
(UDP Socket)Stream Socket
(TCP Socket)프로토콜 - UDP(User Datagram Protocol)을 사용 - TCP(Transmission Control Protocol)을 사용 특징 - 비연결 지향적
· 연결을 맺지 않고 데이터 전송
· 즉, 데이터를 보내기 전에 수신자와의 연결 설정 필요 X
- 신뢰성 없음
· 데이터의 도착과 순서를 보장하지 않는다.
- 속도 빠름
· 연결 과정이 없기에 빠르다.- 연결 지향적
· 데이터 전송 전에 통신할 상대방과 연결을 맺는다.
· 이 연결은 데이터 전송이 끝날 때까지 유지
- 신뢰성 있음
· 데이터는 순서대로, 오류없이 전송
· 손실된 데이터는 재전송
- 속도보다 신뢰성을 중시
· 데이터의 정확한 전송을 보장하기 위해 UDP보다 느림예시 - 실시간 애플리케이션( 스트리밍, 온라인 게임 )에 적합 - 이메일, 웹 페이지 전송 등 데이터의 정확성이 중요한 애플리케이션에 적합 정리 - 연결 유무 : Stream Socket은 연결 기반, Datagram Socket은 비연결 기반
- 데이터 전송의 신뢰성 : Stream Socket은 신뢰성 있는 데이터 전송을 제공하는 반면, Datagram Socket은 이를 보장하지 않는다.
- 속도와 효율성 : Datagram Socket은 더 빠르고 효율적이지만, 오류에 더 취약하다.6. CGI / WebServer / MIME Type
CGI - Common Gateway Interface
- CGI는 웹 서버와 외부 프로그램 간의 표준 방법을 제공한다.
- 주로 웹 서버에서 동적인 콘텐츠를 생성하기 위해 사용된다.
- 용도
· 폼 데이터 처리, 데이터베이스 조회, 동적 페이지 생성 등에 사용된다.CGI 작동 방식 - 웹 서버는 특정 요청이 CGI 스트립트에 의해 처리되어야 함을 인식한다.
- 서버는 CGI 스크립트를 실행하고, HTTP 요청 정보를 스크립트에 전달한다.
- CGI 스크립트는 요청을 처리하고, 결과를 웹 서버에 반환한다.
- 웹 서버는 이 결과를 클라이언트(웹 브라우저)에 전송한다.웹 서버 - 웹 서버는 인터넷을 통해 클라이언트(보통 웹 브라우저)에게 HTML 문서나 기타 웹 페이지 자원을 제공하는 소프트웨어이다.
- 예시) Apache, Nginx, IIS 등웹 서버 기능 - HTTP 요청을 수신하고 응답한다.
- 정적 콘텐츠(HTML 파일, 이미지, CSS, JavaScript 파일 등)를 제공한다.
- 필요에 따라 CGI 스크립트나 백엔드 애플리케이션을 호출하여 동적 컨텐츠를 생성한다.MIME Type - 정의 : MIME 타입은 문서, 파일, 바이트 스트림의 성격과 포맷을 나타내는 표준화된 방법이다.
- 목적 : 클라이언트에게 전송되는 데이터 유형을 알려주어, 적절한 방식으로 처리
- 구조
· 일반적으로 타입/서브타입 형식으로 구성된다.
· 예를 들어 text/html, image/png, application/json 등이 있다.
- 사용 : 웹 서버는 HTTP 응답 헤더에 MIME 타입을 포함시켜 클라이언트에게 전송된 데이터의 종류를 알려준다.7. HTTP (요청/응답, 헤더, 메소드, 상태코드, HEAD 메소드)
HTTP - HTTP는 HTML 문서를 전송받기 위해 만들어진 응용 프로그램 계층 통신 프로토콜이다.
- 기본적으로 클라이언트-서버 모델이다.헤더 - 일반헤더
· 요청과 응답 양쪽 모두에서 사용되는 헤더
· 메시지의 일반 정보를 전달
· ex) Cache-Control, Connection, Data 등
- 요청헤더
· 클라이언트가 서버로 요청을 보낼 때 사용되는 헤더
· 클라이언트가 서버에게 추가 정보를 제공하거나 요청의 내용을 설명한다.
· ex) Host, User-Agent, Accept 등
- 응답헤더
· 서버가 클라이언트에게 응답을 보낼 때 사용되는 헤더
· 서버가 클라이언트에게 추가 정보를 제공하거나 응답의 내용을 설명한다.
· ex) Server, Content-Type, Content-Length 등
- 엔티티헤더
· 엔티티는 요청이나 응답의 본문(body)를 나타낸다.
· 엔티티 헤더는 엔티티 바디의 메타데이터 정보를 전달
· ex ) Content-Type, Content-Encoding, Content-Length 등HTTP 메서드 - GET : 리소스 요청
- POST : 리소스 생성 및 업데이트
- HEAD : 서버의 응답 헤더 정보 요청
- TRACE : 요청이 서버에 도달하는 경로 확인
- PUT : 리소스 저장 및 업데이트
- DELETE : 리소스 삭제
- OPTIONS : 서버에서 지원되는 메서드 확인
- CONNECT : 프록시 서버와의 터널 설정HTTP 상태코드
(요약)- 1xx(정보) : 요청을 받았으며 프로세스가 계속된다. (ex. 100 Continue)
- 2xx(성공) : 요청이 성공적으로 수행되었다. (ex. 200 OK, 201 Create)
- 3xx(리다이렉션) : 추가 조치가 필요하다. (ex. 301 Moved Permanenty, 302 Found)
- 4xx(클라이언트 오류) : 클라이언트의 잘못된 요청 (ex. 404 Not Found, 403 Forbidden)
- 5xx(서버 오류) : 서버가 요청을 처리하지 못할 때 (ex. 500 Internal Server Error, 503 Service Unavailable)HTTP 상태코드
(상세히)- 200(OK) : 요청이 정상적으로 처리됨
- 201(Create) : 요청에 대한 새로운 자원을 생성하는데 성공함
- 301(Moved permanently)
- 302(Found)
- 400(Bad request) : HTTP 규약에 맞지 않는 요청
- 403(Forbidden) : 권한이 없거나 잘못된 파일 실행 접근시도
- 404(Not found)
- 500(Internal server error) : 내부 오류 때문에 요청을 처리할 수 없음HEAD 메서드 - 서버에게 리소스의 헤더 정보를 요청하는 메서드
- HEAD 메서드는 주로 웹 서버의 성능을 향상시키고 네트워크 대역폭을 절약하기 위해 사용된다.
· 웹 페이지에서 이미지나 스크립트 파일의 존재 여부를 확인할 때 HEAD 메서드를 사용하여
해당 리소스의 헤더 정보를 먼저 확인한 후, 필요한 경우 GET 메서드를 사용하여 실제 데이터를 요청한다.8. Proxy
Proxy - 사전적 의미 : 대리인
- 서버와 클라이언트 사이에서 대리로 통신을 수행해주는 것을 프록시라고 하고 그 기능을 하는 서버를 프록시 서버라 부른다.목적 1. 캐시 데이터 사용
- 프록시 서버는 요청된 내용을 캐시를 사용해 저장해둔다.
- 캐시에 저장되어있는 내용에 대한 재요청은 서버에 따로 접속할 필요가 없어 저장된 내용을 그대로 되돌려 줌으로서 전송시간을 절약하고 외부 트래픽을 줄임으로써 네트워크 병목 현상도 방지할 수 있다.
2. 보안
- 프록시 서버가 중간에 경유되게 되면 IP를 숨기는 것이 가능하다.
- 또한 프록시 서버를 방화벽으로 사용하기도 한다.(프록시 방화벽)
3. 접속 우회
- 프록시 서버를 사용하면 접속을 다른나라로 우회할 수 잇다.
ETC..
1. HTTP GET 요청과 POST 요청의 가장 큰 차이점은 무엇이며, 이것이 요청 헤더나 데이터 전송에 어떤 영향을 미칩니까? - GET 요청은 데이터를 URL의 일부(query string)로 전송하지만, POST 요청은 데이터를 요청 본문(body)에 포함한다.
- GET 요청은 URL길이에는 브라우저나 서버에 따라 제한이 있다. 이로 인해 전송할 수 있는 데이터의 양이 제한된다.
- POST 요청은 'Content-Length'와 'Content-Type' 같은 추가적인 헤더 정보를 필요로 합니다.2. HTTP 응답 코드 404의 의미는 무엇인가? 그리고 서버가 요청을 처리할 수 없을 때 반환하는 HTTP 상태 코드는 무엇인가? - HTTP 응답 코드 404는 "Not Found"를 의미한다.
· 이 코드는 서버가 요청된 리소스를 찾을 수 없을 때 반환된다.
- 서버가 요청을 처리할 수 없을 때 반환하는 HTTP 상태 코드는 500이다.
· 이 코드는 "Internal Server Error"를 나타낸다.3. 파일 디스크립터(File Descriptor)란 무엇인지 간단히 설명하고 UNIX/Linux 시스템에서 표준 입출력/에러의 파일 디스크립터 번호는? - 파일 디스크립터는 운영 체제에서 파일이나 다른 입출력 리소스에 대한 접근을 추상화하는 데 사용되는 정수이다.
- 파일 디스크립터를 통해 운영 체제는 파일, 파이프, 소켓 등 다양한 입출력 리소스를 일관된 방식으로 관리할 수 있다.
- 예를 들어, 파일을 열면 운영 체제는 해당 파일을 가리키는 파일 디스크립터를 프로그램에 제공한다.
- UNIX/Linux 시스템에서 표준 입력의 파일 디스크립터 번호는 0, 표준 출력은 1, 그리고 표준 에러는 2이다.4. TCP에서의 '3way handshake' 절차를 설명하시오 1. 클라이언트가 서버에 SYN(Synchronize) 패킷을 보내 연결 요청을 한다.
2. 서버는 SYN-ACK(Synchronize-Acknowledge) 패킷으로 응답하여 연결 요청을 받았음을 알리고, 자신도 연결 준비가 되었음을 나타낸다.
3. 클라이언트는 ACK(Acknowledge) 패킷을 서버에 보내 연결을 확정한다.5. TCP와 UDP에서 패킷 손실 시 대처 방법에는 어떤 차이가 있나? - TCP는 패킷 손실이 발생하면 자동으로 재전송을 시도한다.
· 수신자는 받은 패킷에 대해 확인 응답(ACK)을 보내고, 송신자는 ACK를 받지 못한 패킷을 재전송한다.
- UDP는 패킷 손실에 대해 자체적으로 대처하지 않는다.
· UDP는 확인 응답이나 재전송 기능이 없어, 패킷 손실이 발생하면 이를 어플리케이션 레벨에서 처리해야 한다.'정글 크래프톤 5기 회고 및 정리 > WIL' 카테고리의 다른 글
[WEEK08] 정글 5기 - 정글 끝까지(PintOS) - Threads (0) 2024.05.09 [WEEK07] 정글 5기 - 캐시(발표를 위한 정리) (0) 2024.05.09 [WEEK06] 정글5기 - 탐험준비 - Malloc Lab (0) 2024.04.25 [WEEK05] 정글5기 - 탐험 준비 - Red-Black Tree (0) 2024.04.18 [WEEK04] 정글 5기 - 탐험준비 - C언어, 자료구조, 알고리즘 (0) 2024.04.12