Computer Systems

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

NOHCODING 2022. 11. 4. 00:20
반응형

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웹 기본지식_김영한

반응형