본문 바로가기
Computer Systems

🖥[CSAPP] 11장. 네트워크 프로그래밍(웹 서버 ver.0)

by NOHCODING 2022. 11. 4.
반응형

00. IP (인터넷 프로토콜)

인터넷은 복잡한 망으로 연결되어있다. 그럼 여기서 'Hello World'를 보내려면 어떻게 해야할까? 인터넷망은 규칙을 통해 서로 통신을 진행한다. 

복잡한 인터넷 망

 (1) IP(인터넷 프로토콜의 역할)

  - 지정한 IP 주소(IP Address)에 데이터 전달

  - 패킷(Packet) [덩어리 + 수하물의 합성어] 이라는 통신 단위로 데이터 전달

  - 패킷에는 (출발지IP, 목적지IP, 기타 전송 데이터)가 들어간다.

패킷 정보
클라이언트 패킷 전달

 (2) IP(인터넷 프로토콜의 한계)

  - 비연결성

        👉 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

  - 프로그램 구분
        👉 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
  - 비신뢰성

        👉 중간에 패킷이 사라지면?(패킷 소실) 혹은 패킷이 순서대로 안오면?(Hello / World!)

패킷 전달 순서 문제 발생

 

01. TCP, UDP

 (1) 인터넷 프로토콜 스택의 4계층

애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

 

프로토콜 계층

 

(2) TCP 전송 제어 프로토콜 (Transmission Control Protocol)

TCP/IP 패킷

  -  연결지향 (TCP 3 way handshake(가상연결)) : 쟤랑 나랑 연결 했어?

  - 데이터 전달 보증 : 1. 데이터 전송 2. 데이터 잘 받았음

  - 순서 보장 : 1. 패킷 1,2,3 순서로 전송 2. 패킷1, 패킷3, 패킷2 순서로 도착 3. 패킷2부터 다시보내

  - 신뢰할 수 있는 프로토콜

  - 현재는 대부분 TCP 사용 

 

 (3) TCP 3 way handshake

  - 물리적이 아닌 가상연결임에 유의하자.

 

 (4) UDP 사용자 데이터그램 프로토콜(User Datagram Protocol)

  -  하얀 도화지에 비유(기능이 거의 없음)

  - 연결지향 -

  - 데이터 전달 보증 X

  - 순서 보장  X
  - 데이터 전달 및 순서가 보당되지 않지만, 단순하고 빠름

  - IP와 거의 같고, +PORT+ 체크섬 정도만 추가

  - 애플리케이션에서 추가작업 필요

더보기

TCP는 연결, 데이터 넣고 양도 크고 전송속도도 빠르게 만들기 어려움

그래서 최적화 하고 싶으면 UDP를 건들이자

UDP는 내 컴퓨터에 여러개가 구동 중일때 각 상황에 맞는 애플리케이션을 찾아주는 프로토콜 IP

 

 

02. PORT

PORT를 이해해보자

  -  Ip: 목적지 서버를 찾는것 (아파트)

  -  port : 서버안에서 돌아가는 애플리케이션을 찾는 것(몇동 몇호)

  -  PORT 란 같은IP 내에서 프로세스를 구분하는 것이다.  

  -  0 ~ 65535 : 할당가능
  -  0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음 

        👉 FTP - 20, 21

        👉 TELNET - 23

        👉 HTTP - 80

        👉 HTTPS - 443

 

03. DNS 도메인 네임 시스템(Domain Name System)

  -  IP는 변경될 수 있다.

  -  IP는 기억하기 어렵다.
  - 그래서 DNS를 사용한다.  도메인 명을 IP 주소로 변환(ex.전화번호부)

 

 

04. URL(Uniform Resource Identifier)

  -  URI는 로케이터(Locator), 이름(name) 또는 둘다 추가로 분류 될 수 있다.

  - URI는 리소스를 식별한다 : 주민번호를 식별한다.

  - URL(Uniform Resource Locator) : 리소스가 있는 위치를 지정

  - URN(Uniform Resource Name) : 리소스에 이름을 부여 

  - 위치는 변할 수 있지만 이름은 변하지 않는다.

  - URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않았음

 

 

 

 (1) URI 단어 뜻

  -  Uniform : 리소스 식별하는 통일된 방식

  - Resource : 자원, URI로 식별할 수 있는 모든 것(제한 없음)

  - Identifier : 다른 항목과 구분하는데 필요한 정보 

 

 (2) URL 전체 문법

  -  scheme://[userinfo@]host[:port][/path][?query][#fragment]

  - https://www.google.com:443/search?q=hello&hI=ko 

더보기

  - 프로토콜(https)
  - 호스트명(www.google.com)

  - 포트 번호(443)

  - 패스(/search)

  - 쿼리 파라미터(q=hello&hI=ko)

 

hello - Google 검색

HELLO! brings you the latest celebrity & royal news from the UK & around the world, magazine exclusives, fashion, beauty, lifestyle news, celeb babies, ...

www.google.com:443

 

(3)  scheme - scheme://[userinfo@]host[:port][/path][?query][#fragment]

  - 주로 프로토콜을 사용한다. 

        👉 프로토콜이란? 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙 (ex. http, https, ftp 등등)
  - http는 80 포트 https는 443 포트를 주로 사용, 포트는 생략 가능

  - https는 http에 보안 추가(HTTP Secure)

 

(4) userinfo -   scheme://[userinfo@]host[:port][/path][?query][#fragment]

  - URL에 사용자정보를 포함해서 인증

  - 거의 사용하지 않음

 

(5) port -  scheme://[userinfo@]host[:port][/path][?query][#fragment]

  - 포트(PORT)

  - 접속포트

  - 일반적으로 생략, 생략시 http는 80 https는 443

 

(6) path - scheme://[userinfo@]host[:port][/path][?query][#fragment]

  -리소스 경로(path),  계층적 구조 

  - ex) /home/file1.jpg (파일의 계층적 구조)

  - /members

  - /members/100, /items/iphone12

 

(7).Query  -  scheme://[userinfo@]host[:port][/path][?query][#fragment]

   - key= value 형태 

   - ?로 시작, &로 추가 가능 ?keyA=valueA&B=valueB

   - query parameter, query string등으로 불림, 웹 서버에 제공하는 파라미터, 문자형태

 

(7).fragment  -  scheme://[userinfo@]host[:port][/path][?query][#fragment]

   - fragment

   - html 내부 북마크 등에 사용 

   - 서버에 전송하는 정보 아님

 

 

05. 웹 브라우저 요청 흐름

 (1) HTTP 요청 메세지 

GET /search?q=hello&hI=ko HTTP/1.1
HOST: www.google.com

 

(2) HTTP 메세지 전송

 

 

(3) HTTP 응답 메시지

HTTP/1.1 200 OK
Content-Type: text/html; charset= UTF-8
Content-Length:3423

<html>
    <body></body>
</html>

 

 

 

출처 : 모든 개발자를 위한 HTTP웹 기본지식_김영한

반응형

댓글