[CS 스터디] 네트워크 정리2

오리구이·2025년 3월 20일

전송 계층 - TCP와 UDP

컴퓨터 네트워크에서 전송 계층(Transport Layer) 은 데이터가 송수신될 때 최종 목적지인 프로세스(프로그램) 에 정확히 전달되도록 관리하는 계층이다.

🔹 TCP와 UDP의 목적과 특징

패킷이 네트워크를 통해 전송될 때, IP 주소와 MAC 주소 를 이용하여 호스트(컴퓨터 또는 네트워크 장치) 를 식별할 수 있다. 하지만 호스트 내에서 실행 중인 특정 프로세스(응용 프로그램) 에 도달하려면 포트 번호(Port Number) 가 필요하다.

프로토콜특징
TCP신뢰성 높은 데이터 전송
UDP빠른 데이터 전송 (비신뢰성)

🏛 TCP (Transmission Control Protocol)

TCP는 신뢰할 수 있는 데이터 전송 을 보장하는 연결형 프로토콜 이다. 즉, 데이터가 손실되지 않고, 순서대로 도착하도록 하는 것이 특징이다.

✅ TCP의 주요 특징

  1. 신뢰성 있는 데이터 전송
    • 패킷 손실이 발생하면 재전송 을 수행하며, 데이터가 정확히 전달되도록 보장한다.
    • 흐름 제어, 오류 제어, 혼잡 제어 기능을 포함한다.
  2. 연결형 통신(Connection-Oriented Communication)
    • 데이터 전송 전에 반드시 3-way Handshake 를 통해 연결을 설정하고, 데이터 전송이 끝나면 4-way Handshake 로 연결을 종료한다.
  3. 순서 보장
    • 각 패킷에는 순서 번호(Sequence Number) 가 포함되어 있어, 받은 패킷을 순서대로 정렬하여 처리할 수 있다.
  4. 흐름 제어(Flow Control)
    • 송신자가 수신자의 처리 속도를 고려하여 데이터를 전송하는 방식이다.
  5. 혼잡 제어(Congestion Control)
    • 네트워크 트래픽이 과부하 상태가 되는 것을 방지하기 위해 패킷 전송량을 조절한다.

📜 TCP 헤더 구조

🔹TCP의 제어 비트(Flags)

  • ACK: 응답 확인(Acknowledgment)
  • SYN: 연결 요청(Synchronize)
  • FIN: 연결 종료(Finish)
  • RST: 연결 초기화(Reset)
  • PSH: 수신 측에서 즉시 전달(Push)
  • URG: 긴급 데이터(Urgent)

🚀 UDP (User Datagram Protocol)

UDP는 빠른 데이터 전송을 위해 신뢰성을 보장하지 않는 비연결형 프로토콜 이다. TCP와 달리 데이터 손실, 순서 보장, 흐름 제어가 없다.

✅ UDP의 주요 특징

  1. 비연결형 통신(Connectionless Communication)
    • 데이터를 보내기 전에 연결을 설정하지 않으며, 수신 확인도 하지 않는다.
  2. 빠른 데이터 전송
    • 별도의 오류 제어나 흐름 제어 없이 단순히 데이터를 보내므로 속도가 빠르다.
  3. 데이터 손실 가능
    • 데이터가 손실될 가능성이 있으며, 손실된 데이터의 재전송을 보장하지 않는다.
  4. 헤더가 단순함
    • TCP보다 간단한 헤더 구조를 가지고 있어 오버헤드가 적다.

📜 UDP 헤더 구조

🔥 TCP와 UDP 비교

특성TCPUDP
연결 방식연결형(Connection-Oriented)비연결형(Connectionless)
신뢰성신뢰성 보장 (데이터 손실 없음)신뢰성 없음 (데이터 손실 가능)
데이터 전송 속도느림 (오버헤드 존재)빠름 (오버헤드 없음)
데이터 순서 보장OX
흐름 제어, 혼잡 제어OX
사용 예시HTTP, HTTPS, FTP, SMTPDNS, VoIP, 온라인 게임, 스트리밍

🎯 포트 번호 정리

🔹 포트 종류

포트 종류범위
잘 알려진 포트 (Well-Known Port)0 ~ 1023
등록된 포트 (Registered Port)1024 ~ 49151
동적 포트 (Dynamic Port)49152 ~ 65535

🔹 자주 사용하는 포트 번호

포트 번호설명
20, 21FTP
22SSH
23TELNET
53DNS
67, 68DHCP
80HTTP
443HTTPS
1194OpenVPN
1433MS SQL Server
3306MySQL
6379Redis
8080HTTP 대체 포트

🔗 TCP의 연결 수립 과정 (3-Way Handshake)

TCP 통신을 시작하기 위해 3-Way Handshake 방식이 사용된다. 클라이언트와 서버가 세그먼트를 주고받으며 연결을 설정한다.

1️⃣ 클라이언트 → 서버 (SYN 전송)

클라이언트는 연결을 요청하는 SYN 세그먼트를 서버에게 보낸다.

2️⃣ 서버 → 클라이언트 (SYN + ACK 전송)

서버는 연결 요청을 수락하며 SYN + ACK 세그먼트를 클라이언트에게 보낸다.

3️⃣ 클라이언트 → 서버 (ACK 전송)

클라이언트는 서버에게 연결을 확인하는 ACK 세그먼트를 보내면서 연결이 확립된다.

📌 이 과정이 완료되면 클라이언트와 서버 간에 데이터 전송이 가능해진다.


⚙️ TCP의 오류·흐름·혼잡 제어

🛠️ TCP 오류 제어 (Error Control)

TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 오류 제어 기능을 수행한다. 오류 제어 방식에는 재전송중복 확인 응답(ACK)이 있다.

☑️ 1. 재전송을 통한 오류 제어

  • 송신 측에서 데이터를 보낸 후 일정 시간 내에 ACK(확인 응답)을 받지 못하면 해당 데이터를 재전송한다.
  • 데이터 손실이 발생하면 송신 측은 타임아웃이 발생할 때까지 ACK을 기다린 후 다시 데이터를 전송한다.

📌 타임아웃이란? 송신 측이 일정 시간 내에 ACK을 받지 못하면 데이터가 손실된 것으로 판단하고 재전송하는 메커니즘이다.


🚀 파이프라이닝 (Pipelining) 기법

TCP는 데이터 전송 속도를 높이기 위해 파이프라이닝(Pipelining) 방식을 사용한다.

🔄 파이프라이닝이란?

  • 송신 측이 ACK을 기다리지 않고 여러 개의 세그먼트를 연속으로 전송하는 방식이다.
  • 확인 응답(ACK)은 누적적으로 응답하여 여러 개의 패킷을 한 번에 확인할 수 있다.
    💡 장점: 네트워크의 활용도를 높이고 전송 속도를 향상시킨다.
    ⚠️ 단점: 손실이 발생하면 해당 구간의 데이터 전체를 다시 전송해야 한다.

☑️ 2. 흐름 제어 (Flow Control)

  • 수신 호스트가 한 번에 처리할 수 있는 데이터의 양을 초과하지 않도록 조절하는 메커니즘이다.
  • 수신 윈도우(Receive Window) 크기를 설정하여 조절한다.

💡 예제:
→ 수신 호스트가 3개의 패킷만 수용 가능한 경우, 송신 호스트는 이를 초과하지 않도록 송신 속도를 조절한다.


☑️ 3. 혼잡 제어 (Congestion Control)

네트워크에 과부하가 발생하지 않도록 데이터 전송 속도를 조절하는 기법이다.

🏗️ 혼잡 제어 방식

AIMD(Additive Increase Multiplicative Decrease)

  • 패킷이 정상적으로 도착하면 혼잡 윈도우를 증가
  • 패킷 손실이 감지되면 혼잡 윈도우 크기를 줄이는 방식

📌 혼잡 윈도우 (Congestion Window)란?
송신 호스트가 네트워크의 상태를 고려하여 스스로 전송 가능한 데이터 크기를 결정한다. 즉, '혼잡 없이 전송할 수 있을 정도의 양'

📌 혼잡 상태를 판단하는 기준

  • 중복된 ACK이 여러 번 수신될 경우
  • 타임아웃 발생 시

🔚 TCP 연결 종료 과정 (4-Way Handshake)

TCP 연결을 종료하는 과정은 4-Way Handshake를 통해 이루어진다.

1️⃣ 클라이언트 → 서버 (FIN 전송)

  • 클라이언트가 서버에게 FIN 세그먼트를 보내 연결 종료를 요청한다.

2️⃣ 서버 → 클라이언트 (ACK 전송)

  • 서버는 이를 확인하고 ACK 세그먼트를 클라이언트에게 보낸다.

3️⃣ 서버 → 클라이언트 (FIN 전송)

  • 서버는 모든 처리가 끝난 후 클라이언트에게 FIN 세그먼트를 보내 연결 종료를 요청한다.

4️⃣ 클라이언트 → 서버 (ACK 전송)

  • 클라이언트가 이를 확인하고 ACK 세그먼트를 서버에게 보내며 연결이 완전히 종료된다.

📌 연결 종료 시 송신 측은 ‘액티브 클로즈’, 수신 측은 ‘패시브 클로즈’ 상태가 된다.


🖥️ TCP의 상태 관리 (TCP State Management)

  • TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 제공하는 스테이트풀(상태 기반) 프로토콜이다.
  • 즉, TCP는 통신 과정에서 특정한 연결 상태를 유지하며, 각 상태에 따라 적절한 처리를 수행한다.
  • TCP 상태 관리
    - 연결 수립(Connection Establishment),
    - 데이터 전송(Data Transmission),
    - 연결 종료(Connection Termination)


🔹 TCP 연결이 수립되지 않은 상태

TCP 연결이 아직 생성되지 않았거나, 종료된 상태이다.

1️⃣ CLOSED (닫힘 상태)

  • 설명: TCP 연결이 존재하지 않는 상태.
  • 특징: 모든 통신이 종료된 상태로, 새로운 연결 요청이 없으면 그대로 유지됨.

2️⃣ LISTEN (대기 상태)

  • 설명: 서버(수신 측)가 연결 요청(SYN 세그먼트)을 기다리는 상태.
  • 특징: passive open 상태에서만 발생하며, 클라이언트로부터 SYN 패킷을 수신하면 SYN-RECEIVED 상태로 이동.

🔹 TCP 연결 수립 과정 (Three-Way Handshake)

TCP는 3단계 핸드셰이크(Three-Way Handshake)를 통해 신뢰성 있는 연결을 수립한다.

3️⃣ SYN-SENT (연결 요청 송신)

  • 설명: 클라이언트(액티브 오픈)가 서버에게 SYN 세그먼트를 전송한 상태.
  • 특징: 서버의 응답(SYN + ACK)을 기다리며, 응답을 받으면 ESTABLISHED 상태로 이동.

4️⃣ SYN-RECEIVED (연결 요청 수신)

  • 설명: 서버가 클라이언트의 SYN 요청을 받고, 이에 대한 응답으로 SYN + ACK를 보낸 상태.
  • 특징: 클라이언트가 ACK를 다시 보내면 ESTABLISHED 상태로 이동.

5️⃣ ESTABLISHED (연결 수립)

  • 설명: 3단계 핸드셰이크가 완료된 후, 양측이 데이터를 자유롭게 송수신할 수 있는 상태.
  • 특징: 정상적인 통신이 이루어지는 상태이며, 이 단계에서 데이터 전송이 가능함.

🔹 TCP 연결 종료 과정 (Four-Way Handshake)

TCP 연결을 종료하기 위해서는 4단계 핸드셰이크(Four-Way Handshake)를 수행한다.

6️⃣ FIN-WAIT-1 (연결 종료 요청 전송)

  • 설명: 액티브 클로즈 측(연결을 종료하려는 측)이 FIN 세그먼트를 전송한 상태.
  • 특징: 상대방의 ACK를 기다리며, ACK를 수신하면 FIN-WAIT-2 상태로 이동.

7️⃣ CLOSE-WAIT (연결 종료 요청 승인)

  • 설명: 패시브 클로즈 측(연결 종료 요청을 받은 측)이 FIN을 받고, ACK를 보낸 상태.
  • 특징: 애플리케이션에서 연결 종료 준비를 마친 후 FIN을 보내면 LAST-ACK 상태로 이동.

8️⃣ FIN-WAIT-2 (ACK 수신 후 대기)

  • 설명: FIN-WAIT-1 상태에서 상대방의 ACK를 받은 상태.
  • 특징: 상대방이 FIN을 보낼 때까지 기다리며, FIN을 받으면 TIME-WAIT 상태로 이동.

9️⃣ LAST-ACK (마지막 FIN 전송)

  • 설명: 패시브 클로즈 측이 FIN을 전송한 후, 마지막 ACK를 기다리는 상태.
  • 특징: 마지막 ACK를 받으면 CLOSED 상태로 이동하여 연결 종료.

🔟 TIME-WAIT (일정 시간 대기)

  • 설명: 액티브 클로즈 측이 FIN에 대한 마지막 ACK를 전송한 후, 일정 시간 동안 대기하는 상태.
  • 특징: 중복된 FIN 패킷이 도착할 경우를 대비해 일정 시간 동안 유지되며, 이후 CLOSED 상태로 이동.

🌐 응용 계층 - HTTP의 기초

🔹 DNS와 URI/URL

📌 DNS(Domain Name System)란?

인터넷에서 도메인 네임을 이용해 웹사이트에 접속할 수 있도록 돕는 시스템이다.

  • 도메인 네임(Domain Name): 사람이 읽기 쉬운 주소 (예: google.com)
  • IP 주소(IP Address): 컴퓨터가 이해할 수 있는 숫자로 된 주소 (예: 142.250.190.78)
  • 네임 서버(Name Server): 도메인 네임을 IP 주소로 변환하는 서버

📌 DNS 동작 과정

1️⃣ 사용자가 www.example.com 입력
2️⃣ 브라우저가 로컬 DNS 캐시 확인
3️⃣ 캐시에 없으면 ISP(인터넷 서비스 제공자)의 DNS 서버 조회
4️⃣ ISP의 DNS가 루트 네임 서버를 통해 IP 주소 반환
5️⃣ 최종적으로 해당 IP 주소로 접속

📌 URL(Uniform Resource Locator)과 URI(Uniform Resource Identifier)

URI와 URL은 웹에서 자원을 식별하는 방식이다.

URI: 웹 상의 자원을 식별하기 위한 주소 전체를 의미

URL: URI 중에서도 자원의 위치(Location)를 포함한 것

📌 URL의 구성 요소

https://www.example.com:8080/path/to/resource?query=value#fragment
  • Scheme (프로토콜): https:// (HTTP, HTTPS 등)
  • Authority (호스트 정보): www.example.com:8080 (도메인 + 포트 번호)
  • Path (경로): /path/to/resource (서버 내 자원의 위치)
  • Query (쿼리 문자열): ?query=value (추가 정보 전달)
  • Fragment (조각): #fragment (페이지 내 특정 위치 지정)

🔹 HTTP의 특징

1. 요청-응답 기반 프로토콜
클라이언트(브라우저)와 서버가 요청(Request)과 응답(Response)으로 데이터를 주고받는다.

2. 미디어 독립적
어떤 데이터 유형(HTML, JSON, XML, 이미지 등)도 전송 가능하다.

3. 스테이트리스(Stateless) 프로토콜
서버는 이전 요청의 상태를 기억하지 않는다.

→ 클라이언트가 매 요청마다 필요한 정보를 전달해야 한다.

4. 지속 연결(Persistent Connection)

  • HTTP/1.0 → 기본적으로 요청-응답 후 연결 종료 (비지속 연결)
  • HTTP/1.1 → 기본적으로 연결 유지 (지속 연결, Connection: keep-alive)
  • HTTP/2.0 → 다중 요청 처리 가능 (병렬 스트림)

📌 비지속 연결 vs 지속 연결

  • 비지속 연결: 요청마다 새 연결 생성, 성능 저하
  • 지속 연결: 여러 요청을 하나의 연결에서 처리, 성능 향상

🔹 HTTP 메시지 구조

HTTP 메시지는 크게 요청(Request) 메시지응답(Response) 메시지로 나뉜다.

📌 요청 메시지 구조

GET /hello HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

1️⃣ 요청라인(Request Line) → 시작 라인

  • 메서드(Method): GET (요청 방식)
  • 요청 대상(Request-Target): /hello (요청 경로)
  • HTTP 버전: HTTP/1.1

2️⃣ 헤더(Header) → 필드 라인

  • Host: 요청을 보낼 서버 주소
  • User-Agent: 클라이언트 정보
  • Accept: 받을 수 있는 데이터 타입

3️⃣ 본문(Body, 선택적) → POST 요청에서 데이터 포함

📌 응답 메시지 구조

HTTP/1.1 200 OK
Date: Tue, 19 Mar 2025 12:00:00 GMT
Server: Apache/2.4.41
Content-Type: text/html
Content-Length: 1234

1️⃣ 상태라인(Status Line) → 시작 라인

  • HTTP 버전: HTTP/1.1
  • 상태 코드: 200
  • 이유 구문: OK (성공)

2️⃣ 헤더(Header) → 필드 라인

  • Server: 서버 정보
  • Content-Type: 응답 데이터 유형
  • Content-Length: 데이터 크기

3️⃣ 본문(Body, 선택적) → HTML, JSON 등 데이터 포함


🔹 HTTP 메서드

메서드설명
GET리소스 요청 (읽기)
HEADGET과 동일하지만 본문 제외
POST새로운 데이터 전송 (생성)
PUT기존 데이터 대체
PATCH기존 데이터 일부 수정
DELETE리소스 삭제
CONNECT터널링 요청 (프록시)
OPTIONS지원하는 메서드 확인
TRACE루프백 테스트

🔹 HTTP 상태 코드

✅ 1xx (정보성 상태 코드)

코드의미
100Continue (계속)
101Switching Protocols (프로토콜 변경)

✅ 2xx (성공 상태 코드)

코드의미
200OK (성공)
201Created (새 리소스 생성)
204No Content (본문 없음)

✅ 3xx (리디렉션 상태 코드)

코드의미
301Moved Permanently (영구 이동)
302Found (일시적 이동)
304Not Modified (캐시된 리소스 사용)

✅ 4xx (클라이언트 오류 코드)

코드의미
400Bad Request (잘못된 요청)
401Unauthorized (인증 필요)
403Forbidden (접근 금지)
404Not Found (리소스 없음)

✅ 5xx (서버 오류 코드)

코드의미
500Internal Server Error (서버 오류)
502Bad Gateway (잘못된 게이트웨이)

Ref. 📗《이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접》, 강민철

0개의 댓글