맨땅에 코딩
공통 - 네트워크 기초 본문
*화이트햇 스쿨 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 |