쿠키(Cookie)

  • 쿠키클라이언트(브라우저)에 저장하는 데이터입니다.
  • 쿠키의 특징
    1. 클라이언트에 저장(서버에 부담 적음)
    2. 유효 기간 설정 가능
    3. 브라우저에 저장되므로 보안에 상대적으로 취약함
    4. 크기 제한 있음(대략 4KB)
  • 쿠키의 동작 흐름
    1. 서버가 클라이언트에 쿠키 저장
    2. 브라우저는 쿠키 저장
    3. 클라이언트가 서버 요청 시 쿠키 자동 전송
    4. 서버는 쿠키를 읽고 처리

 

세션 (Session)

  • 세션서버에 저장하는 사용자 정보입니다.
  • 세션의 특징
    1. 서버에 저장(더 안전)
    2. 서버가 메모리에 저장하므로 서버에 부하 발생할 수 있음
    3. 일정 시간 동안 활동 없으면 세션 만료
    4. 서버에 있기 때문에 민감한 정보 저장 가능함
  • 세션의 동작 흐름
    1. 사용자가 로그인 → 서버가 세션 생성
    2. 서버가 세션 ID를 클라이언트에 전달 (보통 쿠키 사용)
    3. 사용자는 요청할 때마다 세션 ID 전달
    4. 서버는 세션 ID로 사용자 식별

 

쿠키와 세션의 발전 과정

  1. 초창기 웹은 상태가 없는 HTTP 프로토콜
      - HTTP는 무상태(Stateless) 프로토콜
      - 사용자가 서버에 요청할 때마다 "누가 보냈는지" 알 수 없음
      - 서버는 요청을 받을 때마다 매번 새 사용자인지 기존 사용자인지 모름
  2. 쿠키의 등장 (1994년, Netscape)
    -  HTTP의 한계를 보완하기 위해 쿠키 등장
    -  서버가 클라이언트에게 데이터를 저장하게 하고, 이후 요청마다 서버로 자동 전송
    -  사용자가 서버에 여러 번 접근할 때 같은 사용자라는 걸 알 수 있게 됨
    -  장점 : 로그인 유지, 사용자 식별, 맞춤형 서비스 제공
    -  단점 : 민감한 정보는 클라이언트에 저장되므로 보안에 취약
  3. 세션의 등장
    -  쿠키만으로는 민감한 정보를 다루기 어려움
    -  서버에 사용자 정보를 저장하고, 사용자에게는 세션 ID만 전달
    -  세션 ID는 보통 쿠키에 저장하거나 URL 파라미터로 전달
    -  서버가 관리하므로 보안이 강화됨
    -  장점 : 서버에서 관리하므로 보안성 높음
    -  단점 : 서버 메모리를 사용하므로 사용자가 많아지면 부하 발생
  4. 보안 강화를 위한 발전
    쿠키와 세션이 널리 쓰이면서 여러 보안 이슈 등장
      - 세션 하이재킹 (Session Hijacking)
      -  쿠키 탈취 (Cross-Site Scripting - XSS)
      -  CSRF (Cross-Site Request Forgery)
    보안 옵션 등장
      -   HttpOnly: JavaScript 접근 제한
      -   Secure: HTTPS에서만 전송
      -   SameSite: CSRF 방지
      -   세션 관리 기법 발전: 세션 타임아웃, 토큰 갱신, 서버 클러스터링 등
  5. 토큰 기반 인증 (JWT 등)
    - 서버 부하를 줄이고, 분산 시스템에서 인증을 원활히 처리하기 위해 JWT (JSON Web Token) 같은 토큰 기반 인증 방식 등장
    - 서버가 상태를 유지하지 않는 방식 (Stateless)으로 인증 가능
    - 특히 모바일 앱, 마이크로서비스 아키텍처에서 활발히 사용
    - 장점: 서버 메모리 사용 없음, 분산 시스템에 유리
    - 단점: 토큰 탈취 시 위험 (만료 시간 및 보안 처리 필수)

 


JWT (JSON Web Token)

  • JWT는 서버나 클라이언트가 정보를 JSON 형식으로 저장하고 전달하는 토큰 기반 인증 방식입니다.
    - JWT는 사용자가 누구인지 증명하는 데 사용되는 토큰입니다.
    - 토큰 안에 사용자의 정보가 암호화되어 들어 있고, 별도의 세션 저장소 없이 인증할 수 있게 해줍니다.
  • JWT 구조 : JWT는 총 3부분으로 구성됨 (xxxxx.yyyyy.zzzzz)
    1. Header(헤더)
        - 토큰 타입과 해시 알고리즘 정보
    {
      "alg": "HS256",
      "typ": "JWT"
    }

    2. Payload(페이로드)
        - 사용자 정보 (claims) 가 담긴 부분
        -  예: 유저 ID, 권한, 토큰 유효 기간 등
    {
      "sub": "1234567890",
      "name": "Alice",
      "iat": 1712311820
    }

    3. Signature(서명)
        -  위의 내용이 변조되지 않았음을 증명
        -  비밀 키로 생성 (예: HMAC SHA256)

    => 세 부분(1, 2, 3)이 base64로 인코딩되어 하나의 문자열로 만들어짐
  • JWT의 장점
    - Stateless: 서버가 세션을 저장할 필요 없음
    -
    확장성: 서버가 여러 대여도 세션 공유할 필요 없음
    -
    빠름: 토큰만 있으면 빠르게 사용자 검증
    -
    유연성: 모바일/웹/API 어디서나 사용 가능
  • JWT의 단점
    - 토큰 탈취 시 위험: 토큰이 유출되면 악용될 수 있음
    -
    토큰 폐기 어려움: JWT는 자체적으로 만료 전까지 유효. 서버가 토큰을 즉시 무효화하려면 별도 블랙리스트 관리가 필요
    -
    Payload가 암호화된 것은 아님 (Base64로 인코딩된 것이라 누구나 읽을 수 있음, 민감정보 저장 금지)

 


브라우저 저장소

 

저장소 데이터 크기 만료 기간 접근 범위 용도
쿠키 (Cookie) 매우 작음 (~4KB) 설정 가능 서버 & 클라이언트 인증 정보, 세션 식별자 등
Local Storage 크고 (~5MB) 없음 (영구 저장) 클라이언트 전용 사용자 설정, 캐시 데이터 등
Session Storage Local Storage와 유사
(~5MB)
브라우저 탭이 닫히면 삭제 클라이언트 전용 일회성 데이터, 탭 단위 저장
IndexedDB 매우 큼 (수백 MB 이상) 없음 클라이언트 전용 복잡한 구조화된 데이터 저장 (오프라인 앱 등)

 

  1. 쿠키 (Cookie)
    - 서버와 함께 사용하는 유일한 저장소
    - 매 요청마다 자동으로 서버에 전송됨
    - 세션 ID 저장 등 인증 목적으로 많이 사용
    - 용량이 적고, 서버로 전송되므로 주의 필요
    - 보안 옵션: HttpOnly, Secure, SameSite
    document.cookie = "token=abc123; path=/; max-age=3600";
     
  2. Local Storage
    - 브라우저에 데이터 영구 저장
    - 서버로 자동 전송되지 않음 (수동으로 꺼내서 사용해야 함)
    - 브라우저를 꺼도 남아있음
    - 용량이 쿠키보다 훨씬 큼 (~5MB)
    localStorage.setItem("theme", "dark");
    const theme = localStorage.getItem("theme");
     
  3. Session Storage
    - Local Storage와 비슷하지만 세션 단위 저장소
    - 브라우저 탭이나 창이 닫히면 데이터 삭제
    - 다른 탭이나 창과 공유되지 않음 (탭 고유 저장소)
    sessionStorage.setItem("tempData", "12345");
    const tempData = sessionStorage.getItem("tempData");
     
  4. IndexedDB
    - 구조화된 대용량 데이터를 저장하는 비관계형 데이터베이스
    - 오프라인 웹 애플리케이션에서 많이 사용
    - 비동기적으로 작동하고, 키-값 쌍으로 데이터 저장
    - 크기가 수백 MB까지 가능!
    - IndexedDB는 코드가 복잡해서 라이브러리를 주로 사용

 

 

 

HTTP(HyperText Transfer Protocol) 란?

  • HTTP하이퍼텍스트(HTML 문서 등)를 웹 브라우저와 서버 간에 주고받기 위한 프로토콜입니다.
  • HTTP웹 처리 전반에 걸친 토대가 되기 때문에 웹 서버를 HTTP 서버라고 부르기도 합니다.
  • HTTP의 동작 방식
    1. 클라이언트(브라우저)가 요청(Request)
      - URL 입력 → HTTP 요청 전송 (예: GET /index.html HTTP/1.1)
    2. 서버가 응답(Response)
      -  요청받은 웹 페이지나 파일을 HTTP 응답으로 반환
  • HTTP의 특징
    1. 텍스트 기반 : 사람이 읽을 수 있는 텍스트 형식
    2. Stateless(무상태) : 요청과 응답이 독립적
    3. 확장성 : 다양한 데이터 형식 전송 가능 (HTML, 이미지, 동영상 등)
    4. 포트 번호 : 기본 포트 80

 

 

HTTPS(HyperText Transfer Protocol Secure) 란?

  • HTTPS는 웹에서 데이터를 안전하게 주고받기 위한 프로토콜 HTTP에 SSL/TLS 암호화가 추가된 형태입니다.
    보안성, 신뢰성, 사용자 보호 강화를 위해 대부분의 웹사이트가 HTTPS 사용 중입니다.
  • HTTPS의 동작 방식
    1. 브라우저에서 HTTPS 주소 입력 (예: https://example.com)
    2. 서버가 인증서(SSL/TLS)를 제공
    3. 브라우저가 인증서 유효성 검증
    4. 데이터 암호화 후 통신 시작
  • HTTPS의 주요 특징
    1. 암호화 (Encryption) : SSL/TLS 기술로 통신 데이터를 암호화해서 중간에 탈취되어도 내용을 알 수 없음
    2. 인증 (Authentication) : 신뢰할 수 있는 기관(CA)으로부터 서버 인증서를 발급받아, 서버의 신원을 검증
    3. 무결성 (Integrity) : 데이터가 전송 중 변조되지 않았음을 보장
    4. 포트 번호 : 기본 포트 443

 

 

HTTP 와 HTTPS

구분 HTTP HTTPS
전체 이름 HyperText Transfer Protocol HyperText Transfer Protocol Secure
보안성 🔓 암호화 없음 🔒 SSL/TLS 암호화 적용
사용 포트 80 443
데이터 보호 전송 중 데이터 노출 가능 전송 중 데이터 암호화
신뢰성 상대적으로 낮음 인증서로 신원 검증 가능
사용 예 단순 정보 조회 로그인, 결제 등 민감한 데이터 처리 시 필수

 

 

HTTP 헤더, 바디의 구조

  • HTTP 메시지요청(Request), 응답(Response) 및 헤더(Header) 와 바디(Body) 로 나눌 수 있습니다.
    1. HTTP 요청(Request)
         - 시작줄 (Start Line)
               예 : GET /index.html HTTP/1.1
               의미 : index.html 파일을 가져와주세요
         - 헤더 (Headers)
              추가적인 정보 전달 (key: value 형식)
              예: Host: http://www.example.com
                    User-Agent: Mozilla/5.0
                     Accept: text/html
         - 바디 (Body)
              선택 사항
              데이터 전송 시 사용 (예: POST 요청에서 폼 데이터)
              예: username=chatgpt&password=secure
    2. HTTP 응답(Response)
         - 상태줄 (Status Line)
               예 : HTTP/1.1 200 OK
               의미 : 요청 성공적으로 처리했어요
         - 헤더 (Headers)
              응답 정보 제공
              예: Content-Type: text/html
                    Content-Length: 3057
         - 바디 (Body)
              실제 컨텐츠 (HTML, JSON 등)
              예: <html>
                      <body>
                          <h1>Welcome!</h1>
                      </body>
                    </html>

 


 

HTTP Method

1. GET 방식

- 데이터가 주소 입력란에 표시되므로 최소한의 보안도 유지되지 않는 취약한 방식

- 가장 일반적인 HTTP Request 형태로, 요청 데이터의 인수를 웹 브라우저의 URL로 전송
- 예시 : 웹 페이지 보기, 이미지 로딩

2.POST 방식

- 인숫값을 URL로 전송하지 않으므로 다른 사용자가 링크로 해당 페이지를 볼 수 없음

- 게시판의 경우: 목록이나 글 보기 화면은 접근 자유도를 위해 GET 방식을 사용 게시글을 저장·수정·삭제하거나 대용량
  데이터를 전송할 때는 POST 방식을 사용

- URL에 요청 데이터를 기록하지 않고 HTTP 헤더에 데이터를 전송
- 예시 :  회원가입, 로그인

3. 기타 방식

- OPTIONS 방식: 자원에 대한 요구/응답 관계와 관련된 선택 사항 정보를 요청할 때 사용
  예시 :  서버 기능 점검

- DELETE 방식: URI에 지정된 자원을 서버에서 지울 수 있게 함
  예시 :  게시글 삭제

- PUT 방식: 메시지에 포함된 데이터를 지정된 URI 장소에 그 이름으로 저장
  예시 :  게시글 전체 수정

- HEAD 방식: 서버 측 데이터를 검색하고 요청하는 데 사용
  예시 :  리소스 존재 여부 확인
- PATCH 방식 : 서버의 데이터를 부분 수정하는 데 사용
  예시 :  댓글 일부 수정
- TRACE 방식: 요구 메시지의 최종 수신처까지 루프백을 검사하는 데 사용

 

 

HTTP 상태코드

  • HTTP Response
    - 클라이언트의 HTTP Request에 대한 응답 패킷
    - 서버에서 쓰이는 프로토콜 버전, Request에 대한 실행 결과 코드, 간략한 실행 결과 설명문 내용이 담겨 있음
    - 추가 정보로 전달할 데이터 형식, 길이 등이 MIME 형식으로 표현되어 있음
    - 헤더 정보 뒤에는 실제 데이터(HTML 또는 이미지 파일)가 전달됨
    - 데이터 전달이 끝나면 서버 연결을 끊음

실행 결과 코드 내용 설명
100번대 정보 전송 HTTP 1.0까지는 계열에 대한 정의가 이루어지지 않았기 때문에 실험 용도 외에는 100번대 서버 측의 응답이 없다.
200번대 성공 클라이언트의 요구가 성공적으로 수신 및 처리되었음을 의미한다.
300번대 리다이렉션 해당 요구 사항을 처리하기 위해 사용자 에이전트가 수행해야 할 추가 동작이 있음을 의미한다.
400번대 클라이언트 측 에러 클라이언트에 오류가 발생했을 때 사용한다. 예를 들면 클라이언트가 서버에 보내는 요구 메시지를 완전히 처리하지 못한 경우 등이다.
500번대 서버 측 에러 서버 자체에서 발생한 오류 상황이나 요구 사항을 제대로 처리할 수 없을 때 사용한다.

 

 


 

SSL (Secure Sockets Layer)  인증서

  • SSL 인증서웹사이트와 사용자의 브라우저 간에 오가는 데이터를 암호화해서 정보를 안전하게 보호하는 기술입니다.
  • 현재는 SSL의 후속 버전인 TLS (Transport Layer Security) 가 더 많이 사용됩니다.
  • SSL 인증서가 왜 필요할까?
    1. 데이터 암호화 : 비밀번호, 신용카드 정보 등 민감한 데이터 보호
    2. 중간자 공격 방지 : 데이터가 가로채이더라도 해독 불가능
    3. 신뢰성 확보  :  주소창의 자물쇠 아이콘, HTTPS 사용으로 사용자의 신뢰 확보
    4. SEO 효과  :  구글 등 검색 엔진이 보안이 강화된 사이트를 우선 노출
  • SSL 인증서 작동 방식
    1. 클라이언트가 서버에 접속 → 안전한 통신을 위한 요청
    2. 서버가 SSL 인증서 전달
    3. 클라이언트가 유효성 검증
    4. 공개키 기반으로 암호화된 세션 키 전달
    5. 이후 세션 키로 양방향 암호화 통신!
  • SSL 인증서 종류

    종류 설명
    DV (Domain Validation) 도메인 소유 여부만 확인
    OV (Organization Validation) 기업 정보까지 검증
    EV (Extended Validation) 가장 강력! 기업 법적 존재 여부까지 검증, 주소창에 회사명 표시

 


실습

curl을 이용하여 HTTP요청 직접 보내보기

  • curl 이란?
    - curl command-line tool (명령줄 도구)로, URL을 통해 데이터를 전송하거나 받아올 수 있게 도와주는 프로그램이고, "Client URL" 의 줄임말입니다
  • curl 사용법

옵션 설명
-X HTTP 메서드 지정 (GET, POST, PUT, DELETE 등)
-d 요청 데이터 (POST, PUT 등)
-H 요청 헤더 추가
-F 파일 전송 (multipart/form-data)
-o 출력 파일 이름 지정
-O 원래 이름으로 파일 저장
-I 응답 헤더 출력
-L 리다이렉션 따라가기
-u 기본 인증 (user:password)
-c / -b 쿠키 저장 / 사용

 

 

1. Google 메인 페이지 GET 요청

curl -L https://google.com

 

2. 응답 헤더만 보기

curl -I https://google.com

 

3. 파일로 저장해보기

curl -L -o google.html https://google.com
# 저장된 파일 확인
cat google.html

 

4. User-Agent 변경해서 요청

curl -L -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64)" https://google.com


5. HTTPS 인증서 정보 확인

curl -v https://google.com
# 또는 더 자세히
curl -vI https://google.com


6. HTTP/2 로 요청

   - 윈도우 CMD 환경에서 실행 시

      curl: option --http2: the installed libcurl version does not support this
      curl: try 'curl --help' for more information
오류가 뜨며 리눅스에서 실행하였습니다.

   - 원인은 현재 윈도우에 깔려 있는 curl이 HTTP/2 프로토콜을 지원하지 않는다고 합니다.

curl -L --http2 https://google.com

 

7. 헤더 추가(Google 은 대부분 기본 헤더로 충분하지만, 실습용)

curl -L -H "Accept-Language: en-US" https://google.com

 

8. 쿠키 저장하고 재사용

curl -L -c cookies.txt https://google.com
curl -L -b cookies.txt https://google.com


9. 요청 시간 측정

   - 명령어를 실행하기 위해 curl-format.txt를 만들어야 한다.

#vi 편집기로 curl- format.txt 만들기
vi curl-format.txt

# 아래 명령어 입력 후 저장하기
melookup:  %{time_namelookup}\n
time_connect:  %{time_connect}\n
time_appconnect:  %{time_appconnect}\n
time_pretransfer:  %{time_pretransfer}\n
time_redirect:  %{time_redirect}\n
time_starttransfer:  %{time_starttransfer}\n
----------\n
time_total:  %{time_total}\n

   - curl-format.txt를 만든 후 아래 명령어를 실행하면 실행 결과를 확인할 수 있다.

curl -L -w "@curl-format.txt" -o /dev/null -s https://google.com

 

10. 요청 결과를 더 깔끔하게 보기(progress bar 안 보기)

curl -L -s https://google.com

 


웹 브라우저 개발자 도구를 사용하여 웹 사이트의 HTTP 통신을 살펴보기

1. 개발자 도구 열기

   - 웹사이트 열기 (예: https://google.com)

   - 단축키 : F12 또는 Ctrl + Shift + I 또는 마우스 우클릭 → "검사"

개발자 도구 화면

2. Network (네트워크) 탭 선택

   - 상단 탭에서 Network 선택

   - 이 탭에서 브라우저가 웹 서버와 주고받는 모든 요청/응답을 볼 수 있어요.

Network 화면

3. 페이지 새로고침

   - 개발자 도구는 새로고침하면서 모든 네트워크 트래픽을 기록합니다.

   - Ctrl + R 또는 주소창 옆 새로고침 버튼 클릭

 

4. HTTP 요청 분석하기

   - 요청 목록이 쭉 뜨면 원하는 요청 클릭

         Headers 탭 : 요청 URL, 요청 메서드 (GET, POST 등), 요청 헤더 / 응답 헤더, Status code (200, 301, 404 등)

         Preview 탭 : HTML, JSON 등 응답 본문 미리보기

         Response 탭 : 실제 응답 원본

         Timing 탭 : 요청 시간 분석 (DNS, 연결, 응답 속도)

HTTP 요청 화면

 

 


참고

https://security-student.tistory.com/22

 

Protocol

  • 프로토콜컴퓨터나 네트워크 장비들 사이에서 데이터를 주고받을 때 지켜야 하는 약속(규칙)입니다.
  • 프로토콜의 3가지 요소
    1. 구문(Syntax): 데이터의 구조나 포맷을 의미
    2. 의미(Semantics): 전송되는 데이터의 각 부분이 무엇을 뜻하는지 를 알 수 있게 미리 정해 둔 규칙(데이터 자체 뿐만 아니라 오류 제어, 동기 제어, 흐름 제어를 포함)
    3. 순서(Timing): 어떤 데이터를 보낼 것인지와 얼마나 빠르게 데이 터를 보낼 것인지 정의
  • 프로토콜의 기능
    1. 주소 설정(Addressing): 서로 다른 시스템의 두 개체가 통신을 하는 경우 필요
    2. 순서 제어(Sequence Control): 프로토콜 데이터 단위를 전송할 때 보내는 순서를 명시하는 기능(연결 지향형(Connection-Oriented)에만 사용)
    3. 데이터 분할과 재조합(Fragmentation & Reassembly): 대용량 파일을 전송할 때 전송 효율이 높은 작은 단위로 나누어 전송한 뒤 전송 받은 시스템에서 이를 재조합해야 함
    4. 캡슐화(Encapsulation): 데이터에 제어 정보를 덧붙이는 것(헤더)
    5. 연결제어(Connection Control): 연결 설정, 데이터 전송, 연결 해제에 대한 통제 수행
    6. 흐름 제어(Flow Control): 송신 측에서 오는 데이터의 양이나 속도를 조절하는 기능, 송신자와 수신자의 속도 차이에 대한 대응
    7. 오류 제어(Error Control): 두 개체 사이에서 데이터를 교환할 때 데이터에 오류나 변경이 있을 경우를 발견하는 기능
    8. 동기화(Synchronization): 두 개체 데이터를 교환할 때 서로 동시에 똑같이 정의된 인자 값 을 공유하는 것 정보를 송수신 할 때에 호흡을 맞추는 기능
    9. 다중화(Multiplexing): 통신 선로 하나에서 여러 데이터나 시스템을 동시에 통신할 수 있는 기법
    10. 전송 서비스(Quality of Service, QoS): 우선 순위 결정, 서비스 등급과 보안 요구 등을 제어하는 서비스

 

 


 

OSI 7 계층

  • OSI 7 계층네트워크에서 데이터를 주고받을 때의 과정을 7단계로 나눈 모델입니다.
  • OSI 7 계층물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 나뉩니다.

사용자 기반 계층 응용 계층(Application Layer) 사용자 인터페이스 제공. 요구에 따른 정보처리
표현 계층(Presentation Layer) 전달되는 정보를 데이터로 표현, 암호화, 압축
세션 계층(Session Layer) 통신 시작, 유지/관리, 종료
트랜스포트 계층 전송 계층(Transport Layer) 종단간(응용 프로세스 간) 신뢰성 있는 메시지 전송(에러제어, 흐름제어, 혼잡제어)
네트워크 기반 계층 네트워크 계층(Network Layer) Datagram을 발신지(노드)에서 목적지(노드)까지 전달(라우팅)
데이터링크 계층(DataLink Layer) 노드간(물리적으로 연결된) 신뢰성 있는 전송 제공(에러제어, 흐름제어, 혼잡제어)
물리 계층(Physical Layer) 물리매체로 비트를 신호로 변경하여 전송(부호화, 기계적, 전기적 특성 제공)

 

 


 

TCP(Transmission Control Protocol)

  • TCP데이터를 안정적으로 전송하는 연결 지향형 프로토콜이고, IP와 함께 통신을 하는 데 반드시 필요한 가장 기본적인 프로토콜입니다.
  • TCP의 특징 높은 신뢰성
    1. 가상 회선 연결 방식
    2. 연결의 설정과 해제
    3. 데이터 체크섬(Checksum)
    4. 시간 초과와 재전송
    5. 데이터 흐름 제어

 

UDP(User Datagram Protocol)

  • UDP는 빠르게 데이터를 전송하는 비연결 지향형 프로토콜입니다.
  • 상대방이 보낸 응답을 확인하지 않아 네트워크에 부하를 주지 않습니다.
    데이터 자체의 신뢰성이 없어 수신한 데이터의 무결성을 보장받지 못합니다.
  • UDP의 특징
    1. 비연결 지향형
    2. 네트워크 부하 감소
    3. 비신뢰성
    4. 전송된 데이터의 일부가 손실

 


 

TCP와 IP의 연계

  • TCP/IP는 인터넷에서 데이터를 전송하는 표준 프로토콜 세트입니다.
  • 쉽게 설명하면, IP데이터 패킷이 목적지까지 가도록 안내하는 네비게이션 역할 TCP데이터가 정확히 도착했는지 확인하고, 순서를 맞춰주는 역할입니다.
    - IP (Internet Protocol)
       → 목적지까지 데이터 패킷을 전달하는 역할 (주소 지정 & 라우팅).
       → 데이터가 어디서 어디로 가야 하는지 알려주는 "배달 주소 역할
    - TCP (Transmission Control Protocol)
       → IP가 전달하는 데이터의 전송 품질을 보장하는 역할 (순서 보장, 오류 검사, 재전송).
       → 데이터를 안정적으로 주고받기 위한 안전한 배달 서비스 역할
  • TCP/IP의 데이터 전송 흐름
    1. TCP가 데이터를 분할
    2. IP가 패킷에 주소를 부여
    3. 수신 측에서 재조립

 


 

3-Way Handshake

  • TCP 프로토콜은 데이터 전송 전에 안전하고 신뢰성 있는 연결을 위해 3단계 과정(3-Way Handshake)을 사용합니다.
  • TCP 3-Way Handshake 연결 동작 과정
    1. 클라이언트 → 서버 : SYN
    - 클라이언트가 서버에게 연결 요청을 보냄
    - SYN 패킷(Synchronize) 전송
    2. 서버 → 클라이언트 : SYN + ACK
    - 서버가 요청을 받고, 연결 요청을 응답
    - SYN (동기화) + ACK (확인 응답) 패킷 전송
    3. 클라이언트 → 서버 : ACK
    - 클라이언트가 서버에게 다시 잘받았다는 것을 응답
    - 연결 완료

4-Way Handshake

  • 연결을 종료할 때도 안전하게 연결을 종료하기 위해 사용하는 4단계 과정(4-Way Handshak)을 사용합니다.
  • TCP 4-Way Handshake 연결 동작 과정
    1. 클라이언트 → 서버 : FIN
    - 클라이언트가 연결 종료를 요청
    - FIN (Finish) 패킷 전송
    2. 서버 → 클라이언트 : ACK
    - 서버가 확인 응답
    - ACK (Acknowledgment) 패킷 전송
    3. 서버 → 클라이언트 : FIN
    - 서버도 데이터를 전부 전송하고 종료 요청
    - FIN 패킷 전송
    4. 클라이언트 → 서버 : ACK
    - 클라이언트가 마지막 응답을 보냄
    - 연결 종료

 

IPv4, IPv6

  • IPv4, IPv6인터넷 통신을 위한 프로토콜(규칙)의 버전이며, 각각 32bit, 128bit의 주소 공각을 사용합니다.
  • IPv4인터넷의 초기 버전으로, 현재도 많이 사용되고 있지만 주소 부족의 문제IPv6개발되었습니다.
  • IPv4와 IPv6의 설명

      IPv4 IPv6
    주소 길이 32비트 128비트
    표기법 점(.)으로 구분된 10진수
    EX) 192.168.0.1
    콜론(:)으로 구분된 16진수
    EX) 2001:0db8:85a3:0000:0000:8a2e:0370:7334
    주소 개수  약 43억 개 약 340언데시틸리언 (거의 무제한)
    문제점 주소 부족: 약 43억 개 주소로 제한, 이미 거의 소진됨
    보안: IPSec 보안 기능은 선택 사항 (기본 제공 X)
    NAT 필요: 여러 기기가 하나의 IP를 공유해야 함
    확장성 부족: 기기 수 증가에 따른 한계
    전환 복잡성: 기존 IPv4에서 IPv6로의 전환 필요
    호환성 문제: 일부 오래된 장비나 소프트웨어는 IPv6 미지원
    장점 간편한 설정: IPv4는 오래 사용되어 익숙하고 관리가 쉬움
    광범위한 호환성: 대부분의 네트워크 장비 및 시스템이 IPv4 지원

    거대한 주소 공간: 사실상 무제한의 IP 주소
    자동 구성: Stateless Address Autoconfiguration (SLAAC)
    보안: IPSec 기본 제공
    빠른 라우팅 및 멀티캐스트 지원

 


 

DNS란? (Domain Name System)

  • DNS도메인 이름을 IP 주소로 변환해주는 시스템입니다.
    사람이 기억하기 쉬운 도메인 이름(예: www.example.com)을 컴퓨터가 이해할 수 있는 IP 주소(192.0.2.1)로 변환합니다.
  • DNS의 동작 원리
    1. 사용자가 웹 브라우저에 도메인 이름 입력
    2. DNS 서버가 도메인 이름을 IP 주소로 변환
    3. 변환된 IP 주소를 이용해 웹 서버 접속
    4. 원하는 웹 페이지 전달
  • DNS의 계층 구조
    - 가장 상위 개체는 ‘.’ (Root)
    - 두 번째 개체는 국가와 조직체의 특성
    - 보통 맨 앞은 자신의 DNS 서버에서 지정해 놓은 www, ftp와 같은 특정 서버의 이름이 옴
    - FQDN(Fully Qualified Domain Name) : 완성된 주소(예: www.example.com) 
    항목 내용 항목 내용
    com 영리 기관 mil 군사 기관
    net 네트워크 기관 edu 교육 기관
    org 비영리 기관 int 국제 기관
    gov 정부 기관 kr(Korea) 국가 이름
    DNS의 계층 구조
  • DNS 서버의 이름 해석 순서
    DNS 서버의 이름 해석 순서
    www.wishfree.com 에 접속하기 위한 순서
    1 | 캐시에 해당 사이트 정보를 확인
    2 | 캐시에 IP주소가 없을 경우에 hosts를 확인
    3 | 없으면 설정된 DNS 서버인 로컬 DNS 서버에 질의
    4 | 로컬 DNS에 없으면 루트 DNS에 질의
    5 | com DNS 서버에 질의
    6 | com DNS에도 없다면, wishfree.com DNS 서버에 질의
    7 | www.wishfree.com에 대한 IP 주소를 얻음
    8 | 로컬 DNS 서버는 이를 클라이언트에 전달 

 


 

포트

  • 포트네트워크에서 특정 서비스를 구분하는 논리적인 출입구입니다.
    IP 주소가 "어느 컴퓨터"인지를 알려준다면, 포트 번호는 "어떤 프로그램(서비스)"인지를 구분합니다.
  • 포트의 기능
    - 하나의 IP 주소에서 여러 서비스를 구분
    - 서버는 포트를 열어 두고 요청을 기다림
    - 클라이언트는 목적지 IP + 포트로 요청
  • 대표적인 포트 예시

    서비스 포트 설명
    HTTP 80 웹 사이트 접속 (보안 없음)
    HTTPS 443 암호화된 웹 접속 (보안 HTTPS)
    FTP 21 파일 전송 프로토콜
    SSH 22 원격 접속 (보안 쉘)
    DNS 53 도메인 이름 서비스
    SMTP 25 이메일 송신

 

 

포트포워딩

  • 포트포워딩외부에서 내부 네트워크의 특정 기기나 서비스에 접근할 수 있도록 라우터에서 포트를 지정하여 연결하는 기술입니다.
  • 포트포워딩이 왜 필요한가?
    1. 내부 네트워크(사설 IP)는 외부 인터넷에서 직접 접근 불가능
    2. 포트 포워딩을 통해 외부 요청을 내부 장비로 연결
  • 포트포워딩의 동작 원리
    1. 외부 요청: 외부에서 공인 IP + 포트로 요청
    2. 라우터 확인: 포트 포워딩 규칙에 따라 내부 IP + 포트로 전달
    3. 내부 장비 응답: 요청받은 내부 장비가 응답

 

 


참고

https://security-student.tistory.com/22 

 

 

웹(Web)

  • 은" 월드 와이드 웹(WWW, World Wide Web)"의 줄임말로, 인터넷을 통해 정보를  주고받을 수 있게 만든 정보 공유 시스템이며, "인터넷"이라는 통신망을 이용한 하나의 서비스입니다.
  • 아래의 그림과 같이 사용자는 웹브라우저로 접속하고, 인터넷을 통하여 웹서버는 요청받은 웹페이지(HTML, 이미지 등)를 보내주게 됩니다. 

 

 

 

인터넷(Internet)

  • 인터넷이란 인터 네트워크(Inter-network)이며, 네트워크 간의를 의미하고 네트워크와 네트워크를 연결한다라는 의미로 쓰입니다.
  • 전 세계가 연결되어있는 거대한 통신망을 의미하며, 실체는 존재하지 않는 추상적인 개념이며, 중앙 집중적이지 않고, 매우 복잡하게 얽힌 통신망입니다.
  • 유추해볼 수 있듯이 인터넷은 바로 네트워크간의 연결, 네트워크의 네트워크라는 뜻을 지니고 있습니다.

 


 

웹 서버(Web Server)

  • 웹 서버는 웹사이트의 데이터를 저장하고, 사용자가 요청하면 웹페이지(HTML, 이미지 등)를 전달해 주는 컴퓨터나 프로그램입니다.
  • 웹 서버하드웨어와, 소프트웨어의 구성으로 나눌 수 있습니다.
    - 하드웨어 : 웹사이트 데이터를 저장하는 실제 컴퓨터
    - 소프트웨어 : 요청을 처리하고, 웹페이지를 전달하는 프로그램
  • 웹 서버의 작동 원리
    1. 요청(Request) : 사용자가 브라우저에 주소(www.example.com)를 입력하거나 클릭해서 요청을 보냄
    2. 처리(Process) : 웹 서버가 요청을 받고, 해당 페이지가 있는지 확인 
    3. 응답(Response) : HTML 문서, 이미지, CSS 파일 등을 찾아서 사용자에게 전송
    4. 브라우저 표시 : 사용자의 웹브라우저가 웹 서버에서 받은 정보를 화면에 표시

 

웹 브라우저(Web Browser)

  • 웹 브라우저웹 서버에서 받은 정보를 사용자에게 보기 쉽게 보여주는 프로그램이며, 브라우저 덕분에 우리는 인터넷을 사용할 때 모든 웹페이지를 볼 수 있습니다.
  • 웹 브라우저는 Google Chrome, Safari, Microsoft Edge, Mozilla Firefox 등이 있습니다.
  • 웹 브라우저의 작동 원리
    1. URL 입력 : 사용자가 브라우저 주소창에 https://www.example.com 을 입력
    2. 서버 요청(Request) : 브라우저가 입력한 주소에 해당하는 웹 서버에 요청을 보냄
    3. 서버 응답(Response) : 웹 서버가 HTML, CSS, JavaScript, 이미지 등 파일을 브라우저에게 전달
    4. 렌더링(Rendering) : 브라우저가 받은 파일들을 해석하여 우리가 보는 화면으로 예쁘게 구성
    5. 사용자 인터랙션 : 사용자는 웹페이지를 클릭하거나 스크롤하면서 서버와 계속 소통

 

서버(Server), 클라이언트(Client)

  • 서버(Server)다른 컴퓨터(클라이언트)에게 정보를 제공하거나 서비스를 제공하는 컴퓨터나 프로그램입니다.
    쉽게 말하면, 누군가가 요청하면 필요한 데이터를 찾아서 전달하는 역할을 수행합니다.
    서버의 예시로는 웹 서버(Apache, Nginx), 메일 서버, 파일 서버, 게임 서버 등이 있습니다.
  • 클라이언트(Client)서버에 요청을 보내고, 서버가 보내주는 정보를 사용하는 프로그램이나 장치입니다.
    클라이언트의 예시로는 웹 브라우저(크롬, 사파리, 엣지 등), 이메일 앱(Gmail, Outlook 등), 게임 클라이언트(롤, 배틀그라운드) 등이 있습니다.
12

+ Recent posts