[네트워크] 15. HTTP, DNS, FTP, TFTP, 네트워크보안

2025. 12. 12. 16:28·컴퓨터공학/네트워크

1. 웹 (WWW)

[웹 서비스의 기본]

  • 포트: 웹 서버는 기본적으로 TCP 80번 포트(HTTP)를 사용하고, 보안 연결인 HTTPS는 443번 포트를 사용함
  • 동작 방식: 클라이언트(웹 브라우저)가 서버에 요청(Request)을 보내면, 서버는 HTML 문서를 응답(Response)으로 회신함.
  • Stateless(비상태) 특성: 요청이 처리되고 응답이 전송되면 연결을 바로 끊어버리는 비상태(Stateless) 프로토콜임. 
    (즉, 이전 연결의 상태를 기억하지 못한다.)
  • 상태 유지 방법: 로그인 정보 등을 유지하기 위해 쿠키(Cookie, 클라이언트 저장)나 세션(Session, 서버 저장) 기술을 보완적으로 사용한다.
  • URL(Uniform Resource Locator): 프로토콜://서버 호스트이름/서버내부의 파일경로 형식으로 자원의 위치를 지정합니다.
    (e.g. http://www.korea.co.kr/welcome.html)
  • 동작 과정:
    1. 사용자가 URL 입력 → 2. DNS 서버를 통해 도메인(www.korea.co.kr)을 IP 주소(211.223.201.17)로 변환 → 3. 웹 서버(80번 포트)와 TCP 연결 설정 → 4. GET 명령 전송 및 웹 문서 수신 → 5. TCP 연결 해제 → 6. 클라이언트 웹브라우저는 서버로부터 회신받은 내용을 화면에 표시

 

[APM]

: Apache, PHP, MySQL의 줄임말, 이 3가지를 연동하여 웹 서비스를 제공하는 것을 APM이라고 한다.

  • Apache: 웹 서버 프로그램 (HTTP 요청 처리) 즉, 엔트리 포인트(진입점)이고, 요즘은 nginx도 많이 쓴다. 
  • PHP: 웹 프로그래밍 언어 (동적 웹 페이지 생성)
  • MySQL: 데이터베이스 (데이터 저장 및 관리)

 

동작 과정: 클라이언트가 PHP 문서를 요청하면, 서버(Apache+PHP)가 내부적으로 PHP 코드를 실행하고 DB(MySQL)를 조회한 뒤, 최종 결과만 순수 HTML 코드로 변환하여 클라이언트에게 전송한다. 따라서 클라이언트는 원본 PHP 소스 코드를 볼 수 없게된다.


2. HTTP 프로토콜

HTTP (HyperText Transfer Protocol)는 웹에서 hypertext 데이터를 주고받는 서버-클라이언트 모델의 프로토콜이다. 하이퍼텍스트는 하이퍼링크를 통해 문서를 비선형적으로 연결할 수 있는 텍스트를 말한다. HTTP는 요청(Request)와 응답(Response)로 구성되어있고 기본적으로 80포트를 사용한다.

 

사용자가 웹사이트를 방문하면 브라우저가 웹서버로 리소스를 요청한다. 요청을 받은 웹서버는 HTML, CSS와 같은 리소스를 응답으로 돌려준다. 클라이언트의 요청과 서버의 응답 사이에는 여러 프록시 서버가 있다. 프록시 서버는 캐시를 보관하거나 보안을 위해 서버의 IP 주소를 숨기는 등 다양한 역할을 수행한다. HTTP의 모든 통신은 안전성이 중요하기 때문에 TCP 프로토콜을 사용한다.

 

HTTP 요청과 응답

1. HTTP Request

POST /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept-Language: ko-KR

{"name": "uicheol"}

사용자와 서버가 request, response를 하는 구조를 자세히 살펴보자. 사용자는 브라우저를 통해 위와 같은 HTTP request를 서버로 보낸다. HTTP 메시지는 Start Line, Header, Empty Line, Body로 구성된다.

첫번째 줄은 Start Line이다. Start Line에는 HTTP Method, URL 경로, HTTP 프로토콜 버전이 나온다.

두번째 줄부터는 헤더 정보이다. `key:value` 쌍으로 구성되며 웹사이트 도메인의 호스트, 언어, 브라우저 정보가 나타난다.

이후 Empty Line을 통해 헤더와 바디를 구분한다.

이후 Body에는 실제 주고 받을 데이터 내용을 담는다. `{"name": "uicheol"}` 처럼 json, xml 등으로 body를 보낼 수 있다.

 

2. HTTP Response

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2023 14:28:02 GMT
Server: Apache
Content-Type: text/html

<html>
...
</html>

요청에 문제가 없다면 서버는 위와 같은 응답을 돌려준다. 마찬가지로 HTTP 응답도  HTTP 메시지는 Start Line, Header, Empty Line, Body로 구성된다.

첫번째 줄에는 HTTP 프로토콜 버전 정보와 HTTP 상태코드가 나온다.

두번째 줄부터 보이는 `key:value` 쌍은 모두 헤더이다.

이후 Empty Line이 있고

실제 주고 받은 Body에 브라우저가 요청한 데이터를 전달한다.

 

(추가)  HTTP Response 상태코드

주요 상태 코드: 200번대 - 성공 / 400번대 - 클라이언트 잘못 / 500번대 - 서버 잘못

  • 200 OK: 성공
  • 400 Bad Request: 요청 문법 오류
  • 403 Forbidden: 접근 거부
  • 404 Not Found: 파일을 찾을 수 없음
  • 500 Internal Server Error: 서버 내부 오류

 

HTTP Method

HTTP Method는 클라이언트가 서버에 request를 보낼 때 수행하도자 하는 동작의 목적을 알리기위한 수단이다. RESTful API에서 API 이름에는 명사를 사용하고 동사를 사용하지 않는다. 동사로 나타나는 api 요청 목적을 이 HTTP Method로 알리는 것이다. 같은 URI 주소로 api를 요청해도 HTTP Method에 따라 서버에서는 다르게 받아드리고 각각을 다르게 처리한다.

Method 의미 주요 목적 Body 포함 여부
`GET` 조회 리소스를 가져올 때 X (경우에 따라 가능)
`POST` 생성, 등록 새 리소스를 생성하거나 데이터를 서버로 보내서 처리할 때 O
`PUT` 수정 (교체) 리소스를 전체적으로 업데이트 할 때 O
`PATCH` 수정 (부분) 리소스를 일부분만 변경할 때 O
`DELETE` 삭제 리소스를 삭제할 때 X (경우에 따라 가능)

 

PUT과 PATCH는 전체를 교체하냐, 부분만 수정하냐의 차이이다. 예를 들어 사용자 정보 `{ "id": 1, "name": "신의철", "age": 26 }`가 있을 때 PUT 요청으로 `{ "name": "김당근" }`으로 보낸다면 기존 정보를 통째로 갈아끼우기 때문에 age 정보는 null이 되거나 오류가 발생한다. PATCH 요청으로 `{ "name": "김당근" }`으로 보낸다면 name만 "김당근"으로 바뀌고 age는 26이 그대로 있다. 상황에 맞게 사용하면 되나 백엔드 관점에서 PUT은 그냥 밀어 넣으면 끝나기 때문에 PATCH보다는 PUT을 주로 사용한다. 


3. DNS

[DNS 개요 및 구조]

  • 역할: 문자형 도메인 이름(예: www.google.com) ↔ 숫자형 IP 주소 변환
  • 구조: 역트리(Inverted Tree) 형태의 분산 데이터베이스 (계층적 구조 + Load Balancing)
  • 구성: 도메인 네임 스페이스(DB), 네임 서버(관리 프로그램), 해석기(Resolver, 클라이언트) (서버 - 클라이언트 구조)
  • 계층: 루트(Root) → 최상위 도메인(TLD: com, edu, kr 등) → 2단계 도메인... 순으로 이어짐

 

[동작 과정]

  • 해석기(Resolver): 클라이언트 요청을 받아 네임 서버에 질의함.
  • 처리 방식:
    • 재귀적(Recursive) 처리: 서버가 끝까지 책임을 지고 답을 찾아줌 (주로 클라이언트 ↔ 로컬 네임 서버)
    • 반복적(Iterative) 처리: "나는 모르니 저쪽 서버에 물어봐"라고 다른 서버 주소를 알려줌 (주로 네임 서버 간)
  • 캐싱: 한 번 조회한 정보는 TTL(Time To Live) 시간 동안 저장하여 재사용

 

[DNS 메시지 포맷]

  • 전송: 주로 UDP 53번 포트를 사용하며, 메시지가 512바이트를 넘으면 TCP를 사용한다.
  • 헤더: 트랜잭션 ID, 플래그(QR:질의/응답 구분, RD:재귀요청 등), 각 섹션의 개수(질의, 응답 등) 정보를 포함한다.

4. 파일 전송 - FTP (File Transfer Protocol)

[FTP 개요]

  • 포트: 21번(제어 채널)과 20번(데이터 채널) 두 개를 사용함
  • 로그인: 사용자 계정/암호가 필요하며, 공개된 서버는 anonymous 계정을 사용함.
  • 주요 명령: get(다운로드), put(업로드), ls(목록 보기), cd(디렉터리 이동), bin(바이너리 모드 설정).

 

[동작 원리]

  • 제어 채널 (Port 21): 클라이언트가 서버에 접속하여 명령어를 주고받는 통로 (연결 지속)
  • 데이터 채널 (Port 20): 실제 파일 내용이나 목록을 전송하는 통로 (전송 때만 생성되고 바로 끊김)
  • 연결 설정 (Active 모드 기준 설명):
    1. 클라이언트가 제어 채널(21)로 접속
    2. 파일 전송 시, 클라이언트가 자신의 포트(x)를 서버에 알림 (PORT 명령)
    3. 서버가 20번 포트에서 클라이언트의 x포트로 연결을 시도하여 데이터 채널 생성
  • 응답 코드: 2xx(성공), 4xx(일시 실패), 5xx(영구 실패)

5. 파일 전송 - TFTP (Trival FTP)

TFTP: FTP보다 단순하고 가벼운 파일 전송 프로토콜 (운영체제 이미지 등 다운로드에 사용)

 

[특징]

  • Trivial FTP: 주로 디스크 없는 시스템의 네트워크 부팅에 사용됨
  • UDP 사용: 69번 포트를 사용하며, FTP와 달리 TCP 연결을 맺지 않는다.
  • 메시지: RRQ(읽기 요청), WRQ(쓰기 요청), DATA(데이터), ACK(응답), ERROR(오류)

 

[데이터 전송 방식]

  • 블록 전송: 데이터를 512바이트 크기의 블록으로 나누어 전송한다.
  • Stop-and-Wait: 데이터 블록 하나를 보내고 ACK를 받아야 다음 블록을 보낸다.
  • 종료 조건: 전송된 데이터 블록의 크기가 512바이트보다 작으면 마지막 데이터로 인식하고 종료함.
  • 오류 제어: UDP는 신뢰성이 없으므로, TFTP가 자체적으로 타임아웃(timeout)을 두어 데이터나 ACK가 분실되면 재전송하는 방식으로 신뢰성을 보완한다.

6. 전자메일 - Email

[전자메일 기초]

  • 기본 기능: 메일 작성, 읽기, 관리, 통지 및 전달(TCP 사용)
  • 주소 형식: <로그인 이름>@<메일 서버 이름> (예: ucshin@korea.co.kr).
  • MIME (Multipurpose Internet Mail Extensions):
    • 기본 이메일은 ASCII 텍스트만 전송 가능하다.
    • 한국어, 사진, 파일 등 비-ASCII 데이터를 전송하기 위해 이진 파일을 ASCII로 인코딩(변환)하여 전송하고, 수신 측에서 디코딩(역변환)하는 표준 포맷을 사용한.

 

[전자메일 시스템 구조]

  • 사용자 에이전트 (UA, User Agent): 사용자가 메일을 작성하고 읽는 프로그램 (예: 아웃룩). 메일 헤더(제목, 수신자 등)와 바디(내용)를 작성한다.
  • 메일 전송 에이전트 (MTA, Mail Transfer Agent): 메일을 실제로 전송하고 중개하는 서버 소프트웨어
  • 프로토콜 구분:
    • SMTP (Simple Mail Transfer Protocol): 메일을 보낼 때 사용 (클라이언트→서버, 서버→서버) .
    • POP3 (Post Office Protocol ver.3): 메일 서버에 도착한 메일을 사용자 PC로 가져올 때(수신) 사용 .

7. 네트워크 보안

[암호화 기초]

  • 용어: 원문서(Plaintext) ↔ 암호문(Ciphertext), 암호화(Encryption) ↔ 복호화(Decryption)
  • 키(Key) 방식:
    • 대칭키(단일키) 방식: 암호화 키와 해독 키가 동일함. 키 분배 및 보안 유지가 중요 (예: DES)
    • 비대칭키(공개키) 방식: 암호화 키(공개)와 해독 키(비공개)가 다름. 키 하나는 공개해도 안전함 (예: RSA)

 

 

[DES (Data Encryption Standard) ]

  • DES: 64비트 블록을 56비트 대칭키로 암호화. 16번의 라운드를 거치는 복잡한 과정을 수행
  • 3DES: DES의 보안성을 높이기 위해 DES를 3번 반복 적용한 것

 

[RSA 알고리즘]

  • 대표적인 공개키(비대칭키) 알고리즘.
  • 암호화: 수신자의 공개키(Public Key)로 잠금 → 기밀성 보장 (수신자만 자신의 비밀키로 열 수 있음).

 

[전자서명 (Digital Signature)]

  • 목적: 문서의 내용 보호가 아니라, 작성자 인증(신원 확인) 및 부인 방지
  • 원리 (RSA의 반대): 송신자가 자신의 비공개키(Private Key)로 암호화하여 보냄.
  • 검증: 누구나 송신자의 공개키로 풀어볼 수 있음. 풀린다면 송신자가 보낸 것이 확실함.
  • 이중 암호화: (1)전자서명(비밀키 암호화) + (2)RSA 암호화(수신자 공개키 암호화)를 결합하여 인증과 기밀성을 동시에 달성할 수 있다.

 

'컴퓨터공학 > 네트워크' 카테고리의 다른 글

[네트워크] 14. 세션 계층, 표현 계층, 응용 계층 (L5, L6, L7)  (0) 2025.12.12
[네트워크] 13. 소켓 프로그래밍 2 (비동기 통신 / 반복 서버 / 동시 동작 서버)  (0) 2025.12.11
[네트워크] 12. 소켓 프로그래밍 1 (소켓 주소 / 핵심 함수 / TCP, UDP 서버 클라이언트 흐름)  (0) 2025.12.11
[네트워크] 11. 전송 계층 (L4: 3-way handshake, TCP, UDP, RTP)  (0) 2025.12.10
[네트워크] 10. 네트워크 계층 2 (L3: 라우터, LPM, 버퍼링, IPv6, SDN)  (0) 2025.12.10
'컴퓨터공학/네트워크' 카테고리의 다른 글
  • [네트워크] 14. 세션 계층, 표현 계층, 응용 계층 (L5, L6, L7)
  • [네트워크] 13. 소켓 프로그래밍 2 (비동기 통신 / 반복 서버 / 동시 동작 서버)
  • [네트워크] 12. 소켓 프로그래밍 1 (소켓 주소 / 핵심 함수 / TCP, UDP 서버 클라이언트 흐름)
  • [네트워크] 11. 전송 계층 (L4: 3-way handshake, TCP, UDP, RTP)
sophon
sophon
sophon 님의 블로그 입니다.
  • sophon
    sophon 님의 블로그
    sophon
    • 카테고리 (172) N
      • 컴퓨터공학 (36)
        • 데이터베이스 (19)
        • 네트워크 (15)
        • 기타 이슈 (2)
      • 프로젝트 (16) N
        • Java (8)
        • Spring (4) N
        • Docker (4)
      • 코딩테스트 (95) N
        • BOJ (74)
        • 프로그래머스 (7)
        • 프로그래머스 SQL (12) N
        • PS Snippets (2)
      • 🌱 잡담 (22)
        • 자격증 (7)
        • 좋은 시 모음 (12)
        • 책과 영화 (3)
        • 기록 (0)
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sophon
[네트워크] 15. HTTP, DNS, FTP, TFTP, 네트워크보안
상단으로

티스토리툴바