본문 바로가기
학교

데이터통신 1주차 공부내용

by 발빠진 쥐 2026. 4. 23.

1메시지(패킷,프레임), 계층

1. 스마트폰 전화 통신

발신자 : 마이크 입력 -> 디지털 변환
기지국 : 무선 전송
이동통신사 코어 네트워크 : 수신자 위치확인, 연결, 음성 전송
인터넷 백본 : 메시지 전송
수신자 기지국 : 수신자 스마트폰 연결
수신자 : 디지털 메시지 -> 아날로그 소리 변환


2. OSI 7계층과 TCP/IP 프로토콜 모음

프로토콜 : 통신을 위한 약속.
물리적으로는 전송매체 단자 신호 회선규격 (UTP 케이블 구격)
논리적으로는 메시지구성 필드 구성(의미), 전송절차 (HTTP 메시지 형식)

인터넷 프로토콜 : HTTPS HTTP TCP IP SMTP SSH SSL
프로토콜 스위트 : HTTP TCP IP ARP

-osi 7모델

L7 : Application
L6 : Presentation
L5 : Session
L4 : Transport
L3 : Network
L2 : Data Link
L1 : Physical

-TCP IP Protocol suite

L5 : Application : HTTP / DNS / SMTP / TELENT FTP / -> url , 이메일 주소
L4 : Transport : TCP / UDP -> 포트번호 (몇 번 탭인가 구분)
L3 : Network : IP (ip 주소, 라우터는 3계층에 가깝다. IP 주소 보고 전달해서)
L2 : Data Link : 이터넷 (이더넷 주소(물리적 주소))
L1 : Physical : UTP, wifi (선), bits

-계층 별 도구

ipconfig /all -> 물리적 주소, ip, 서브넷 마스크, 공유기 주소 등 ... 이더넷과 네트워크 계층 주소 확인 가능 (L2/L3) (Mac 에서는 ifconfig)

netstat -rn (== route print) -> 라우터 정보 확인 (L3)

  • 0.0.0.0 은 디폴트 경로이다. 게이트 웨이의 192.168.1.1 은 공유기 주소
  • DHCP 는 기기가 네트워크에 연결될 때 공유기가 IP 를 자동부여해주는 프로토콜
  • OS 안에 TCP/IP스택이 sw 로 구현되어 있다.

ping: 특정 IP 주소로 테스트 패킷을 보내 목적지까지의 통신 연결 상태와 왕복 지연 시간(RTT)을 측정합니다. (L3)

traceroute: 출발지에서 목적지 서버까지 거쳐 가는 중간 라우터(hop)들의 IP 경로와 각 구간의 지연 시간을 확인합니다 (L3)

==netstat -tn ==| mort -> 나와 상대방의 IP 포트번호와 상태가 나옴 (L4)

WireShark : 계층별 메시지 확인 도구 (전계층)
물리 신호 : wifi - analyzer (L1)
PCM분석 : (L1)

curl : HTTP 요청을 보내고 응답 결과를 터미널에 직접 출력하는 웹 접속 도구 (L7)
wget : url부터 파일을 다운로드 하는 도구 (HTTP 등을 이용, L7)
nslookup, dig : DNS 서버에 질의하여 특정 도메인 이름의 IP 주소 등을 확인함.
(DNS : L7에 속하는데 도메인이름을 실제 IP 주소로 바꿔주는거)


3. 계층별 메시지 + 헤더 = 캡슐화

데이터 보낼 때 각 계층이 자기 계층의 헤더를 붙이는거
400
계층 낮아지면서 점점 하나씩 더 붙이다가 역캡슐화 할 때 계층 높아지면서 한칸씩 풀기

Pasted image 20260419175243.png

5계층이 다 보이는 이미지

Frame (맨 위) : 실제 링크를 타고 간 전체 크기

501 bytes on wire (4008 bits)

Ethernet II (데이터링크 계층) : MAC 주소로 같은 네트워크 안에서 식별

Src: f4:d1:08:4a:cd:ba  (보내는 쪽 MAC)
Dst: 70:8b:cd:2f:84:b8  (받는 쪽 MAC)
Type: IPv4 (0x0800)

IPv4 (네트워크 계층)

Src: 192.168.1.85    (내 컴퓨터, 사설 IP)
Dst: 125.209.222.141 (네이버 서버)
TTL: 128
Protocol: TCP (6)
Header: 20 bytes

TCP (전송 계층)

Src Port: 54402  (내 포트, 임시 배정)
Dst Port: 80     (HTTP 포트)
Seq: 1
Ack: 1
Flags: PSH, ACK
Window size: 13132
  • Port 80 = HTTP 통신
  • PSH = 데이터 즉시 전달하라
  • ACK = 이전 패킷 잘 받았다 확인
  • Window size = 한 번에 받을 수 있는 버퍼 크기 (BDP 관련)

HTTP (응용 계층)

하단 hex 덤프에서 보면

GET T / HTTP
Host: nave
r.com Connection: keep-alive

네이버에 HTTP GET 요청을 보내는 패킷입니다.

Pasted image 20260419180627.png

  • Wireshark (와이어샤크): 가장 대표적인 패킷 분석 프로그램으로, 캡처된 패킷의 구조와 내용을 화면(GUI)을 통해 계층별로 자세히 보여주는 도구입니다. 윈도우와 리눅스 등 다양한 운영체제에서 사용할 수 있습니다.
  • tcpdump (티씨피덤프): 주로 리눅스 터미널(CLI) 환경에서 사용되는 패킷 캡처 도구입니다. 명령어 형태로 실행되며, 도커(Docker) 컨테이너 내부와 같이 화면 그래픽이 없는 환경에서 패킷을 잡아 파일(.pcap)로 저장할 때 유용하게 쓰입니다.
  • tshark (티샤크): Wireshark의 텍스트(터미널) 버전입니다. Wireshark의 분석 기능을 커맨드 라인 환경에서 사용할 때 활용합니다

4. 패킷

  • 패킷 : 헤더 + 데이터 === 디지털임! 0과 1 비트로 이루어지고 실제 전송은 L1 에서 일어남
    HTTP - TCP - IP - 이더넷 (5432)
  • 전송 -> 유선(구리선, 광케이블) / 무선(전파의 아날로그 신호)

5. Docker

Hosting : 진짜 컴퓨터를 직접 운용
Virtual machine : 하나의 com 에서 여러 OS 통째로 가상화

**Docker : 컨테이너 기반의 가상화 플랫폼

  • OS 전체 대신 필요한 환경만 경량 가상화
  • 개발과 배포 환경의 동일성이 인기의 비결
  • 내 컴퓨터에 설치하여 컨테이너를 실행하는 가상화 플랫폼.
  • 가상머신과 유사하지만 다르다 (게스트 os 없이 호스트 리눅스만 존재함)
    500

도커 이미지 : 컨테이너를 정의하는 읽기 전용 템플릿,
컨테이너 실행에 필요한 라이브러리 및 종속성 정의이자 1개 이상의 컨테이너 생성 가능

도커 컨테이너 : 인스턴스화(실행) 된 도커 이미지이자 실제로 동작하는 프로세스

도커 제한 조건 : 리눅스가 필요함

리눅스 컨테이너 : 리눅스의 독립된 공간에서 프로세스들이 실행되는 환경

  • chroot 로 디렉토리 격리
  • 가상머신이 아니고 컨테이너다 (cgrops(자원할당) + namespaces(각 컨테이너 격리))
  • cgroups
    • =Control groups = cpu, 메모리, 디스크, 네트워크 자원 할당
    • 프로세스 트리, 사용자 계정, 파일시스템, IPC 격리 -> namespace isolation

Docker명령어

  • docker ps -a
  • docker images
  • docker run -i -t --name hello ubuntu /bin/bash
    • 우분투 설치 명령어 + 컨테이너로 쉘 실행 후 진입
    • 우분투 리눅스 이미지 기반으로 hello 라는 이름의 컨테이너를 생성실행하고 동시에 bash 로 진입하는 명령어
    • 우분투는 가장 light linux라 추가 Network tools 필요
      • apt update
      • apt install net-tools (ipconfig, netstat 등)
      • apt install iputils-ping (연결상태, 지연 시간 측정)
      • apt install traceroute (중간 라우더 경로, 구간별 지연시간)
      • apt install tcpdump (오가는 패킷정보 분석)

Dockerfile
도커 환경에서 컨테이너 이미지를 만들기 위한 템플릿이자 레시피

  • FROM: 바탕이 되는 베이스 이미지를 지정합니다. (예: FROM python:3 → 파이썬 3 환경을 기본으로 사용)
  • ADD: 호스트 PC에 있는 파일을 도커 이미지 내부로 복사합니다. (예: ADD server.py server.py → 작성한 서버 코드를 복사)
  • EXPOSE: 컨테이너가 외부와 통신할 포트 번호를 지정해 줍니다. (예: EXPOSE 80)
  • ENTRYPOINT: 컨테이너가 시작될 때 기본적으로 실행할 프로그램이나 명령어를 지정합니다. (예: ENTRYPOINT ["python3", "server.py"] → 컨테이너 구동 시 파이썬으로 서버 파일 실행)

-> docker build 명령어를 통해 실제 도커 이미지로 빌드 됨.
-> docker exec 는 이미 만들어져서 실행 중인 도커 컨테이너 내부로 접속

Docker Networking 의 이해

  1. 내 컴퓨터 Ip <-> 도커 컨테이너 IP 주소 관계. 통신 흐름 이해호스트 PC 는 외부로 나가는 기본 게이트웨이 역할 수행. (컨테이너들과 호스트를 연결해 주는 가상 인터페이스가 바로 docker0 브릿지이다.)
  2. 호스트 PC 의 IP 에 별개로 격리된 가상의 내부 IP를 할당 받고
  3. 컨테이너에서 외부로의 통신 흐름 (NAT)
    도커 컨테이너 -> 도커 브릿지 -> 호스트 PC -> 실제 물리적 공유기 -> 목적지 서버
  4. 이 과정에서 도커 내부망과 호스트가 속한 외부망 간의 연결을 위해 iptables및 NAT (네트워크 주소 변환) 기술 사용됨
  5. 외부에서 컨테이너로의 통신 흐름 (포트 포워딩)
    -p 8080:80 옵션 등을 주면서 호스트 pc 의 8080포트로 들어온 요청을 도커 내부 컨테이너의 80 포트로 연결해주어 양방향 통신을 시키는 느낌
  6. 이후 컨테이너 내부 터미널로 진입 (docker exec)
    ifconfig, netstat -rn , ping g 등의 명령어를 쳐서 컨테이너에 할당 된 IP 와 기본 게이트 웨이 확인 가능