맨땅에 코딩

공통 - 네트워크 기초 본문

화이트햇 스쿨 2기/이론교육

공통 - 네트워크 기초

나는 푸딩 2024. 9. 18. 01:27

*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다.

1. 네트워크와 인터넷 기초

 

1.1 Introduction

- Network는 현대 사회에서 커뮤니케이션과 정보 전송의 핵심

- 네트워크 시스템이 위혐 받는 경우, 개인정보 침해, 금융적 손실 같은 심각한 결과를 초래

- 해킹 분야를 제대로 이해하고 공부하기 위해서는 네트워크 지식을 필수적으로 알아야 함

- 네트워크와 관련된 다양한 해킹 공격 시나리오들

  → MITM Attack

  → ARP Spoofing

  → DDoS

 

1.2 Network

- 네트워크란 여러 객체, 사람, 기기, 시스템 등이 서로 연결되어 정보나 자원을 교환하거나 상호 작용하는 구조나 시스템을 의미

- 컴퓨터 네트워크는 여러 컴퓨터 기기들이 서로 연결되어, 정보를 공유할 수 있도록 구성된 시스템

- 다양한 유형의 네트워크

  → LAN(Local Area Network): 논리적 또는 물리적으로 제한된 영역 내에서 연결하는 네트워크

  → WAN(Wide Area Network): 넓은 지리적 영역에 걸쳐있는 컴퓨터 및 자원을 연결하는 네트워크 / 도시, 국가, 대륙 간의 연결을 포함 (ISP에 의해 관리)

 

1.3 Internet

- 인터넷은 전 세계적으로 수 많은 컴퓨팅 장치(host, end system)를 연결하는 컴퓨터 네트워크

- 패킷

  → 송신 end system에서 수신 end system으로 보내지는 데이터

  → 보내고자 하는 데이터를 segment 단위로 쪼개고, 각 segment에 header를 부착하여 전송

  → 경로(route, path): 패킷이 수신 end system에 도달하는 동안 거쳐온 일련의 통신 링크 및 패킷 스위치

- ISP(Internet Service Provider)

  → end system에게 다양한 네트워크 접속을 제공

  → 하위 계층 ISP는 국가, 국제 상위 계층 ISP를 통해 서로 연결됨

 

1.4 Protocol

- 프로토콜은 컴퓨터나 기타 디지털 장치들이 서로 통신할 때 지켜야 할 규약

  → 서로 다른 기기나 시스템 간의 원활한 정보 교환을 가능하게 함

  → TCP, IP, HTTP 같은 약속들이 존재

- 프로토콜은 주고 받는 메시지의 형식, 순서, 메시지 전송, 수신 시 수행되는 작업을 정의

 

- TCP(Transmission Control Protocol)와 IP(Internet Protocol)

  → 인터넷에서 가장 중요한 프로토콜

  → TCP: 데이터의 전송 제어와 관리를 담당

  → IP: 라우터와 end system 사이에서 송수신되는 패킷 포맷을 기술 (라우팅 역할)

 

2. 프로토콜 계층 구조

 

2.1 계층 구조

- 계층 구조는 크고 복잡한 시스템의 잘 정의된 특정 부분을 논의할 수 있게 해줌

- Service Model

  → 한계층은 상위 계층에게 제공하는 서비스에 관심을 가짐

  → 각 계층은 그 계층에서 어떤 동작을 취하고, 아래 계층 Service를 사용함

 

- Physical Layer

  → 단위: Bit

  → 프레임 내부의 각 비트를 한 노드에서 다음 노드로 이동

  → 실제 전송 매체 (케이블)에 의존

 

- Data Link Layer 

  → 단위: Frame 

  → 전체 프레임을 한 네트워크 요소에서 이웃 네트워크 요소로 이동

  → 각 서비스는 해당 링크 계층에서 사용하는 프로토콜에 의해 결정

  → 상위 계층인 네트워크 계층은 데이터그램을 링크 계층으로 보냄

 

- Network Layer (네트워크 계층 = IP 계층)

  → 단위: Datagram 

  → 한 호스트에서 다른 호스트로 데이터의 최적의 경로 선택하고 데이터그램을 전송 (라우팅)

  → 네트워크 계층을 가진 모든 인터넷 요소는 IP 프로토콜을 수행

  → 상위 계층인 트랜스포트 계층의 segment를 운반

 

- Transport Layer 

  → 단위: Segment

  → 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송하는 서비스를 제공

  → TCP

       - 애플리케이션에게 연결 지향형 서비스를 제공

       - 목적지로의 메시지 전달 보장과 흐름 제어(송수신자 속도 일치)를 포함

       - 긴 메시지를 짧은 메시지로 나누고, 혼잡 제어 기능(출발지의 전송률을 줄임)을 제공

  → UDP 

       - 애플리케이션에게 비연결형 서비스를 제공

       - 신뢰성, 흐름 제어, 혼잡 제어를 제공하지 않음

 

- Application Layer

  → 단위: Message

  → 네트워크 애플리케이션과 어플리케이션 계층 프로토콜이 있는 곳

  → 대표적인 프로토콜: HTTP, SMTP, FTP ...

  → 여러 end system에 있는 애플리케이션 간에 정보 패킷을 교환하는데 이 프로토콜을 사용함

 

2.2 캡슐화

- 기존의 메시지에서 송수신에 필요한 Header를 붙여서 캡슐화

 

3. 데이터 링크 계층

 

3.1 링크 계층 소개

- 노드

  → 링크 계층 프로토콜을 실행하는 장치

  → 호스트, 라우터, 스위치, AP 등

- 링크

  → 통신 경로상의 인접한 노드들을 연결하는 통신 채널

  → 한 네트워크 요소에서 이웃 네트워크 요소로 이동

- 한 링크에서 전송 노드는 datagram을 링크 계층 프레임으로 캡슐화

 

3.2 링크 계층이 제공하는 서비스

- Framing

  → Datagram을 링크 상으로 전송하기 전에 frame에 캡슐화

- Link access 

  → MAC 프로토콜은 링크상으로 frame을 전송하는 규칙을 명시

- 신뢰적 전달

  → 응답과 재전송을 통해 서비스 제공

  → TCP는 종단간 재전송 하는 것과 달리, 링크 계층은 오류가 발생한 링크에서 정정

- 오류 검출과 정정

  → 오류가 있는 데이터그램은 전달할 필요가 없어 오류 검출 진행

- 링크 계층은 하드웨어(네트워크 어댑터)와 소프트웨어(주소 정보 조립 등)의 조합

 

3.3 링크 계층 주소 체계와 ARP

- 스위치는 링크 계층에서 동작

  → 링크 계층의 frame을 교환

  → 네트워크 계층의 주소 체계를 사용하지 않음

       - 네트워크 구조에서 계층이 독립적인 구성요소가 되도록 하려면 각 계층은 자신만의 주소 기법을 가져야 함

- MAC 주소

  → 호스트나 라우터의 네트워크 인터페이스가 가짐

       - 호스트가 다수의 네트워크 인터페이스를 갖고 있으면 여러 개를 가짐

  → 6byte로 구성되며, Frame을 수신한 어댑터는 Frame 안 목적 MAC을 검사 후 전달

  → Broadcast address

       - 모든 어댑터에게 전송

       - FF-FF-FF-FF-FF-FF

- ARP (Address Resolution Protocol)

  → 네트워크 계층 주소와 링크 계층 주소 사이를 변환해주는 프로토콜

  → TTL(time-to-live): 각 매핑이 언제 삭제되는지를 나타냄

  → plug-and-play: 관리자가 구성하지 않아도 자동으로 구축

- 서브넷에 없는 노드로의 데이터 그램 전송

 

3.4 Ethernet

- 오늘날 이더넷은 가장 중요한 LAN 기술

  → 인터넷이 글로벌 네트워킹에 대한 것이라면, 이더넷은 근거리 네트워킹에 대한 것

- 이더넷 프레임 구조

  → Data: IP 데이터그램을 운반

  → 목적지/출발지 MAC (6byte 씩)

  → 타입 필드 (2byte): IP 등의 네트워크 계층 프로토콜 종류

- 이더넷의 비연결형, 비신뢰적 서비스

  → 수신측은 CRC 검사를 통해 frame을 검사하지만, 이에 대한 응답 혹은 부정 확인 응답을 보내지 않음

  → 실패하면 폐기

- 애플리케이션이 UDP와 TCP를 사용하는지에 따라 다름 → TCP는 확인 후 재전송하게 될 것

- 즉, 이더넷은 전송하고 있는 Datagram이 재전송인지 새로운 데이터그램인지 구분할 수 없음

 

3.5 링크 계층 스위치

- 스위치의 역할은 들어오는 Link-layer-frame을 수신해서 출력 링크로 전달

- Frame이 스위치 출력 인터페이스들 중 하나에 도착하는 속도가 그 인터페이스의 링크 용량을 일시적으로 초과할 수 있음

  → 따라서 버퍼(Buffer)를 가지고 있음

- 필터링과 포워딩

  → 필터링: Frame을 인터페이스로 전달할지 폐기할지 결정

  → 포워딩: 프레임이 전송될 인터페이스를 결정, 프레임을 해당 인터페이스로 내보냄

- 스위치 vs 라우터

  → 라우터는 네트워크 계층 주소를 사용해서 패킷을 전달하는 저장 후 전달 패킷 스위치

  → 라우터: 3계층 패킷 교환기

  → 스위치는 저장 후 전달 패킷 스위치이지만 MAC 주소를 사용

  → 스위치: 2계층 패킷 교환기

 

4. 네트워크 계층

 

4.1 네트워크 계층 개요

- Network Layer (네트워크 계층 = IP 계층)

  → 단위: Datagram 

  → 한 호스트에서 다른 호스트로 데이터의 최적의 경로 선택하고 데이터그램을 전송 (라우팅)

  → 네트워크 계층을 가진 모든 인터넷 요소는 IP 프로토콜을 수행

  → 상위 계층인 트랜스포트 계층의 segment를 운반

- 두 호스트 H1, H2가 있을 때, 네트워크 계층은 H1의 트랜스포트 계층 segment를 추출하여 H2의 트랜스포트 계층까지 전달

- 라우터의 데이터 평면과 제어 평면

  → 데이터 평면: 입력 링크에서 출력 링크로 데이터그램을 전달

  → 제어 평면: 데이터그램이 출발지 호스트에서 목적지 호스트로 전달되게끔 로컬 포워딩, 라우터별 포워딩 대응

 

4.2 네트워크 계층에서 제공할 수 있는 서비스

- 보장된 전달

  → 출발지 패킷에서 목적지 도착 보장

- 지연 제한 이내의 보장된 전달

  → 지연 제한 안에 도착 보장

- 순서화 패킷 전달

  → 송신된 순서로 도착하는 것을 보장

- 최소 대역폭 보장

  → 특정한 비트 속도 이하로 전송하는 한 모두 전달됨을 보장

- 보안 서비스

  → 트랜스포트 계층 세그먼트들에 대해 기밀성 제공

 

4.2.1 인터넷 네트워크 계층이 제공하는 서비스

- 최신형 서비스 (best-effort service)를 제공

  → 패킷을 보내는 순서대로 수신됨을 보장하지 않음

  → 목적지까지 패킷이 전송됨을 보장하지 않음

  → 종단 시스템 간 지연이 보장되지 않음

  → 보장된 최소 대역폭이 없음

- 서비스를 제공하지 못하는 인터넷 네트워크 계층의 대안으로 좋은 서비스 모델들이 정의되고 구현되어 있음

  → 하지만 인터넷 네트워크 계층은 놀라운 범위에서 충분히 좋다고 입증 되어있음

       - 실시간 어플리케이션 등

 

4.3 인터넷 프로토콜(IP)

- IPv4 데이터그램 포맷

  → 대부분 20byte의 헤더를 가짐 (Option x 가정)

 

4.4 IPv4 주소체계

- 모든 호스트와 라우터는 IP 데이터그램을 송신할 수 있으므로, IP 주소를 갖도록 요구

- 서브넷과 IP 주소

  → IPv4는 32bit의 길이를 가짐

  → 일반적으로 십진수로 표현하고, 점으로 바이트를 구분함

  → 서브넷은 IP 네트워크를 더 작은, 더 관리하기 쉬운 부분으로 나눈 것

- 클래스 주소 체계

  → 필요한 호스트 IP 개수에 따라 네트워크 크기를 다르게 할당

  → 네트워크 영역과 호스트 영역을 분리

- 브로드캐스트 주소

  → 255.255.255.255

  → 목적 주소가 위와 같으면, 같은 서브넷에 있는 모든 호스트에게 전달

- NAT (Network Address Translation)

  → 하나의 공용 IP 주소를 사용하여 프라이빗 네트워크 내의 여러 개의 프라이빗 IP 주소와 통신

  → 가상 아이피 체제

- DHCP (Dynamic Host Configuration Protocol)

  → 동적 호스트 구성 프로토콜

  → 네트워크에 연결된 장치들에게 자동으로 IP 주소와 관련 설정을 할당

 

4.5 IPv6

- IPv4 주소 공간이 빠르게 고갈되어가면서 IPv6 주소 체계가 개발

- 중요한 변화

  → 확장된 주소 기능 (128bit)

  → 간소화된 헤더 (40byte 고정 헤더를 사용)

  → 흐름 레이블링

       - 패킷의 시퀀스 내에서 동일한 패킷의 플로우를 나타내는데 사용

       - 같은 흐름 레이블 → 동일한 방식 처리

- 수용은 되고 있지만 아직 널리 사용되지 않음

 

5. 트랜스포트 계층

 

5.1 트랜스포트 계층 개요

- Transport Layer 

  → 단위: Segment

  → 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송하는 서비스를 제공

  → TCP

       - 애플리케이션에게 연결 지향형 서비스를 제공

       - 목적지로의 메시지 전달 보장과 흐름 제어(송수신자 속도 일치)를 포함

       - 긴 메시지를 짧은 메시지로 나누고, 혼잡 제어 기능(출발지의 전송률을 줄임)을 제공

  → UDP 

       - 애플리케이션에게 비연결형 서비스를 제공

       - 신뢰성, 흐름 제어, 혼잡 제어를 제공하지 않음

- 프로세스 간의 논리적 통신을 제공

  → 애플리케이션 관점에서, 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보임

  → 네트워크 계층의 프로토콜은 호스트 간의 논리적 통신을 제공

- 대표적인 전송계층의 프로토콜은 TCP, UDP, QUIC이 있음

  → QUIC: 구글 크롬에서 사용하는 범용 목적의 트랜스포트 계층 프로토콜

       - UDP를 경유

 

5.2 다중화(Multiplexing)와 역다중화(Demultiplexing)

- 1. 목적지의 트랜스포트 계층은 아래 네트워크 계층으로부터 segment를 수신

- 2. 트랜스포트 계층은 세그먼트를 애플리케이션의 중간 매개자인 소켓에 전달

  → 각각의 소켓은 하나의 유일한 식별자, 포트 번호를 가짐

- 다중화(Multiplexing)

  → 호스트의 데이터를 모으고 각 세그먼트에 헤더정보를 추가, 캡슐화하여 네트워크 계층으로 전달하는 것

- 역다중화(Demultiplexing)

  → 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업

 

→ 트랜스포트 계층의 프로세스 대 프로세스 전달 서비스로 확장하는 과정

 

5.3 UDP

- UDP(User Datagram Protocol)

  → 비신뢰적, 비연결적 프로토콜

       - 어플리케이션 자체에서 신뢰성을 제공한다면 신뢰적인 데이터 전송이 가능 ex. QUIC

  → 기능

       - 다중화/역다중화

       - 비트 오류 검출

          → Checksum

  → ex. 스트리밍 사이트 등의 실시간 어플리케이션

- 장점

  1. 애플리케이션 계층에서의 정교한 제어

      → 실시간 애플리케이션에서는 UDP를 사용하고, 필요한 어떤 추가 기능을 구현할 수 있음

      → 또한, 어플리케이션 자체에서 신뢰성을 제공한다면 UDP를 사용하면서도 신뢰적인 데이터 전송이 가능함

  2. 연결 설정의 부재

      → handshake가 없음

      → 연결 상태를 유지하지 않음

      → 패킷 헤더의 오버헤드가 8byte로 TCP(20byte)보다 작음

- 단점

  1. 혼잡제어의 부제

      → 혼잡제어는 네트워크가 꼭 필요한 작업을 할 수 없게 되는 상태에 빠지는 것을 마기 위해 필요함

 

5.4 TCP

- TCP(Transmission Control Protocol)

  → 신뢰성있는 데이터 전송

       - 수신 여부 확인(ack num) 및 재전송, 패킷 순서 유지(seq num)

  → 연결지향형

       - handshake

  → 흐름제어/혼잡제어

       - 각 TCP 연결이 네트워크 링크의 대역폭을 공평하게 공유

       - 흐름제어 → 송수신 측 사이의 패킷 수를 제어

       - 혼잡제어 → 네트워크 내 패킷 수를 조절하여 네트워크의 오버플로우를 방지

- MSS(Max segment size)

  → 세그먼트로 모아서 담을 수 있는 최대 데이터의 양

  → 헤더를 포함하는 TCP 세그먼트의 최대 크기가 아닌 어플리케이션 데이터에 대한 최대 크기

- MSS를 결정하는 요소

  → MTU: 로컬 송신 호스트에 의해 전송될 수 있는 가장 큰 링크 계층 프레임의 길이

       - 네트워크 경로 중에 MTU가 다른 부분이 있을 경우 MTU의 최솟값을 기반으로 MSS를 조정하기도 함

  → MSS = MTU - TCP/IP 헤더

- Seq num, Ack num

  → 세그먼트에 대한 Seq num는 세그먼트에 있는 첫번째 바이트 스트림 번호

  → 만약 데이터스트림을 500,000byte, MSS를 1,000byte라 가정하면 세그먼트는 총 500개로 구성됨

  → Ack num은 상대방으로부터 기대하는 다음 바이트의 Seq num

- 신뢰성 있는 데이터 전송

  → 중복이 없다는 것과 순서가 유지된다는 것을 보장

  → TCP는 손실 세그먼트를 발견하기 위해 타임아웃/재전송 매커니즘을 사용

       - 이때 타임아웃은 연결의 왕복시간인 RTT보다 조금 더 커야함

  → RTT와 타임 아웃

       - 송신측에서 세그먼트를 전송한 시간부터 긍정 확인 응답(ACK)을 받을 때까지의 시간

       - 손실 세그먼트를 발견

- TCP 연결의 시작은 3way handshake로 이루어짐

  1. 클라이언트 → 서버: 연결 요청

  2. 서버 → 클라이언트: 서버의 응답 

  3. 클라이언트 → 서버: 연결 완료

- 3번째 메시지에는 페이로드가 포함될 수 있음

- syn 비트는 0으로 설정

- TCP 연결 종료는 4way handshake로 이루어짐

  1. 클라이언트 → 서버: 연결 종료 요청

  2. 서버 → 클라이언트: 요청 확인

  3. 서버 → 클라이언트: 연결 종료 요청

  4. 클라이언트 → 서버: 요청 확인

- 시작과 달리 종료는 두 프로세스 중 하나가 연결을 끊을 수 있음

  → 연결이 끝나면 호스트의 자원은 회수됨

 

5.5 TCP와 UDP의 차이

 

6. 애플리케이션 계층

 

6.1 네트워크 애플리케이션

- 각각 다른 위치의 end system에서 동작하고 Network를 통해 서로 통신하는 프로그램

  → Client-Server, Peer-2-Peer

- 클라이언트-서버(Client-Server) 구조

  → 항상 동작하는 Server 존재, Client라는 다른 호스트들로부터 서비스 요청을 받음

  → Client는 서로 직접적으로 통신 X

  → Server는 고정 IP 주소를 가짐

- P2P(Peer-2-Peer) 구조

  → 항상 켜져있는 인프라스트럭처 서버에 최소한으로 의존(혹은 의존X)

  → peer라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신

       - Peer는 클라이언트(랩탑, 데스크탑 등)

  → 자가 확장성을 가짐

  → 데이터 센터 등이 필요 없어 비용 효율적

- 프로세스 간 통신

  → 2개의  end system에서 프로세스는 컴퓨터 네트워크를 통한 메시지 교환으로 통신

  → 클라이언트와 서버 프로세스

- 소켓

  → 호스트의 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스

 

6.2 HTTP

- HTTP: 여러가지 리소스를 송수신하기 위한 어플리케이션 계층 프로토콜

- 무상태(stateless)성: 서버가 두 요청 간에 어떠한 상태나 정보를 유지하지 않음

  → 따라서, 상태를 유지하기 위해 Cookie, Session을 사용

- 비연결성(connectionless)성: 요청한 리소스에 대한 응답이 끝나면 연결이 끊어짐

- HTTP의 동작

  → 요청과 응답

       - 요청(request): client → server

       - 응답(response): server → client

- HTTP의 요청 메시지

  1. 시작줄

      → 메소드, Path, HTTP 버전으로 구성됨

  2. 헤더 - 요청에 대한 정보를 담음

  3. 본문 - 요청할 때 서버에 보낼 정보를 담음

- HTTP의 응답 메시지

  1. 상태줄

      → 프로토몰의 버전, 상태코드와 상태텍스트로 구성됨

  2. 헤더 - 응답에 대한 정보를 담음

  3. 본문 - 요청한 정보를 담음

- HTTPS(Hypertext Transfer Protocol Secure)

  → HTTP는 암호화되지 않은 메시지를 요청 및 응답 받음

       - 따라서, 중간에 sniffing이 가능

  → HTTPS는 암호화를 진행하는 HTTP의 확장으로 기밀성이 보장됨

 

6.3 DNS

- 호스트의 식별

  → 호스트의 식별자: 호스트의 이름, IP 주소

       - 그러나 호스트 이름은 정보 제공의 한계 및 길이가 가변적이므로 라우터가 처리하기 어려움

  → 따라서 호스트는 IP 주소로 식별

- DNS

  → 호스트 이름을 IP 주소로 변환해주는 서비스

- DNS 서버

  → 중앙집중형 데이터베이스라면?

       - 서버의 고장, 트래픽 과부하의 문제로 정상적으로 동작 불가

  → DNS는 많은 서버를 이용하고, 이들을 계층 형태로 구성하며 전세계에 분산시킴

 

7. 와이어샤크 실습: 패킷 분석

 

7.1 패킷 캡처 기초

- Wireshark: 네트워크 패킷 분석 도구

- 두 가지 측면에서 사용 가능

  → 공격: sniffing

  → 방어: 침해사고대응, 포렌식 등

 

7.2 실습 진행

 

8. 소켓 프로그래밍

 

8.1 소켓 프로그래밍의 이해

- 어떻게 소켓을 이용하여 client/server 애플리케이션을 만드는가?

- 소켓: 호스트의 애플리케이션과 트랜스포트 계층 간의 인터페이스

  → Two socket types

       - UDP

       - TCP

 

8.2 UDP 소켓 프로그래밍

- UDP socket programming

  → client와 server 사이 비연결적

       - No handshaking

       - sender는 각 패킷에 dest IP 및 port를 첨부

       - receiver는 수신된 패킷에서 sender IP 및 port를 추출

  → UDP - 전송된 데이터가 손실될 수 있음, 신뢰 X

 

8.3 TCP 소켓 프로그래밍

- TCP socket programming

  → client는 welcome 소켓을 통해 TCP 소켓을 생성

  → 소켓이 생성되면, TCP connection을 진행

  → server는 여러 client들과 통신할 수 있음

  → source port는 client들을 구별

- TCP는 client-server 간의 신뢰성 있는 연결을 제공함

 

'화이트햇 스쿨 2기 > 이론교육' 카테고리의 다른 글

공통 - 정보보안 윤리  (5) 2024.09.18
공통 - 암호학 기초  (5) 2024.09.18
공통 - 운영체제 기초  (15) 2024.09.17
공통 - 컴퓨터 구조 I  (1) 2024.08.04
공통 - 프로그래밍 기초(C)  (0) 2024.08.04