📝 컴퓨터 네트워크 — 1~8주차 정리

Notes / 3학년1학기 / 컴퓨터 네트워크 중간고사 대비

📝 개요

컴퓨터 네트워크 3학년 1학기 — 1~8주차 전체 정리
OSI 7계층 · 교환방식 · IPv4 서브네팅 · DNS · ARP · 소켓(C) 프로그래밍 전반

📅 1~3주차 — 네트워크 기초 이론

OSI 7계층, 교환방식, MAC 접근제어, IPv4 주소체계, DNS, ARP, 토폴로지 등 개념 정립 주차

🏛️ OSI 7계층 vs TCP/IP ⭐

OSI 계층TCP/IP 계층PDU주소대표 장비/프로토콜
7. 응용응용HTTP, FTP, DNS
6. 표현(응용 포함)TLS/SSL
5. 세션(응용 포함)세션 관리
4. 전송전송Segment(TCP) / Datagram(UDP)PortTCP, UDP
3. 네트워크인터넷PacketIP 주소IP, ICMP, 라우터
2. 데이터링크네트워크 접근FrameMAC 주소스위치(L2), ARP
1. 물리물리bit허브, 케이블
  • OSI는 참조 모델(Reference Model)이지 프로토콜이 아님. 실제 인터넷은 TCP/IP 중심.
L7
응용 · HTTP, FTP, DNS
L4
전송 · TCP/UDP · Segment · Port
L3
네트워크 · IP · Packet · 라우터
L2
데이터링크 · Frame · MAC · 스위치
L1
물리 · bit · 허브/케이블

🔀 교환 방식 3가지 ⭐

  • 회선 교환(Circuit Switching): 전용 통로를 먼저 설정. 통신이 없어도 회선 점유 → 비효율. 예: 전통 전화망
  • 메시지 교환(Message Switching): 메시지 전체를 저장(Store) → 전달(Forward). 대용량 시 지연 큼
  • 패킷 교환(Packet Switching): 데이터를 패킷 단위로 분할 전송. 현대 인터넷의 근간
    • 데이터그램: 각 패킷이 독립적으로 라우팅 (IP)
    • 가상회선: 논리적 경로 설정 후 전송 (X.25, ATM)

📡 MAC 접근 제어 방식 ⭐

  • ALOHA: 전송하고 싶을 때 바로 전송 → 충돌 빈번
  • CSMA: 전송 전에 채널 사용 여부 감지(Carrier Sense)만 함
  • CSMA/CD: 전송 도중에도 채널 감시 → 충돌 감지 시 전송 중단 후 랜덤 대기 재전송. 이더넷의 기본 개념

📤 전송 유형

  • 유니캐스트: 1:1 (특정 수신자 1명)
  • 멀티캐스트: 1:N (가입 그룹에만)
  • 브로드캐스트: 1:ALL (같은 L2 도메인 전체)
  • 애니캐스트: 1:1 (동일 주소 중 가장 가까운 노드 1곳)

🕸️ 토폴로지 ⭐

형태특징장점단점
버스(Bus)공통 케이블에 모두 연결설치 단순, 케이블 절약케이블 장애 시 전체 영향
스타(Star)중앙 장비에 1:1 연결관리/확장 쉬움중앙 장비 고장 시 전체 마비
메시(Mesh)여러 경로로 촘촘히 연결장애에 강함, 신뢰성 높음비용/구성 복잡
링(Ring)원형 연결, 순차 전달충돌 적음한 구간 장애 시 전체 영향

🔢 IPv4 주소 클래스 ⭐

클래스첫 옥텟 범위구조기본 서브넷 마스크
A1~126N.H.H.H255.0.0.0
B128~191N.N.H.H255.255.0.0
C192~223N.N.N.H255.255.255.0
D224~239멀티캐스트용
E240~254실험용
127.x.x.x = 루프백/진단용 예약

🌐 DNS & 도메인 ⭐

sequenceDiagram actor U as 사용자 PC participant LR as Local Resolver
(ISP DNS) participant ROOT as Root (.) participant TLD as TLD (.com) participant AUTH as Authoritative
example.com U->>LR: www.example.com? LR->>ROOT: .com 서버는? ROOT-->>LR: .com TLD 서버 주소 LR->>TLD: example.com 서버는? TLD-->>LR: Authoritative 주소 LR->>AUTH: www.example.com A? AUTH-->>LR: 93.184.216.34 LR-->>U: 93.184.216.34 (TTL 캐시)
  1. PC(Stub resolver) → 재귀 리졸버: 요청 (재귀 질의)
  2. 재귀 리졸버 → Root → TLD → 권한 DNS: 순차 질의 (반복 질의)
  3. 결과를 PC에 전달 + TTL만큼 캐시
레코드역할
A도메인 → IPv4
AAAA도메인 → IPv6
CNAME도메인 → 다른 도메인(별칭)
NS권한 네임서버 정보
MX메일 서버 정보
TXT텍스트 정보 (SPF 등)

🔍 ARP ⭐

  • IP → MAC 변환 프로토콜 (L2 전송을 위해 필수)
  • ARP Request = 브로드캐스트 (“이 IP의 MAC이 뭐야?”)
  • ARP Reply = 유니캐스트 (해당 장치가 MAC을 알려줌)
  • 같은 서브넷: 목적지 IP의 MAC을 ARP로 찾아 직접 전달
  • 다른 서브넷: 게이트웨이(라우터) IP의 MAC을 ARP로 찾아 라우터에 먼저 전달
sequenceDiagram participant A as Host A
10.0.0.2 participant BR as Broadcast
FF:FF:FF:FF:FF:FF participant B as Host B
10.0.0.3 A->>BR: ARP Request
"10.0.0.3 의 MAC?" BR->>B: 브로드캐스트 수신 B-->>A: ARP Reply (유니캐스트)
"10.0.0.3 = AA:BB:CC:DD:EE:FF" Note over A: ARP 테이블 캐시
(기본 TTL ~20분)

📅 4주차 — LAB 10.7.5 Class B 서브네팅

네트워크 ID 150.193.0.0 (Class B) 서브네팅 실습 — ANDing 연산으로 같은/다른 서브넷 판별

🧮 ANDing 연산 ⭐

  • 호스트 IP와 서브넷 마스크를 비트 AND 연산 → 서브넷(네트워크) 주소 도출
  • 1 AND 1 = 1 / 1 AND 0 = 0 / 0 AND 0 = 0
  • 같은 서브넷 = ANDing 결과 동일 / 다른 서브넷 = ANDing 결과 다름
  • 다른 서브넷으로 패킷 전송 시 → 기본 게이트웨이(라우터)로 먼저 전달

📐 서브네팅 계산법

  • 빌린 비트 수 n개 → 서브넷 수: 2ⁿ, 호스트 수: 2^(나머지 비트) − 2
  • 첫 번째(네트워크)·마지막(브로드캐스트) 서브넷 사용 불가
  • Class B 기본 마스크 255.255.0.0에서 3번째 옥텟을 빌려 서브넷 분할

🔍 실습 예제 — Host X vs Host Z

항목2진수 (3·4옥텟)
Host X IP150.193.4.1000000100 . 00001010
Host Z IP150.193.12.1000001100 . 00001010
마스크255.255.240.011110000 . 00000000
X ANDing150.193.0.000000000 . 00000000
Z ANDing150.193.0.000000000 . 00000000
마스크 255.255.240.0 기준: X와 Z의 ANDing 결과가 동일 → 같은 서브넷 (라우터 거치지 않고 직접 통신 가능)
만약 마스크가 255.255.248.0라면 X=150.193.0.0 / Z=150.193.8.0 → 다른 서브넷이 됨

📅 5~7주차 — Ch.2 소켓 프로그래밍 (C)

Linux BSD Socket API, 주소구조체, 바이트오더, 에코 서버/클라이언트 구현

🔌 소켓 기본 개념

  • 소켓 = 네트워크 통신 엔드포인트
  • 리눅스에서 소켓은 파일처럼 취급socket() 반환값이 정수형 FD(파일 디스크립터)
  • close(fd)로 해제 (파일과 동일)

📞 서버 vs 클라이언트 흐름 ⭐

서버: socket() → bind() → listen() → accept() → read/write → close()
클라이언트: socket() → connect() → write/read → close()
sequenceDiagram participant S as Server participant C as Client S->>S: socket() S->>S: bind(port) S->>S: listen() C->>C: socket() C->>S: connect() S->>S: accept() → new fd C->>S: write() / send() S->>C: read() / recv() S->>C: write() 응답 C->>S: close() S->>S: close(client_fd)

🔁 바이트 오더 변환 함수 ⭐

함수용도비트
htons()Host→Network 포트 변환16비트 (Short)
htonl()Host→Network IP 변환32비트 (Long)
inet_addr()문자열 IP → 이진수 변환
inet_ntoa()이진수 → 문자열 IP 변환
  • 포트(16비트)htons() / IP/주소(32비트)htonl()
  • INADDR_ANY + htonl(): 특정 IP가 아닌 모든 인터페이스에서 연결 수락

📦 주소 구조체

struct sockaddr_in {
    short sin_family;         // 주소 체계 (AF_INET)
    unsigned short sin_port;  // 16비트 포트 번호
    struct in_addr sin_addr;  // 32비트 IP 주소
    char sin_zero[8];         // 패딩
};

struct in_addr { unsigned long s_addr; };
struct servent { char *s_name; int s_port; ... };   // /etc/services
struct hostent { char *h_name; char **h_addr_list; ... }; // /etc/hosts

📄 open_socket.c — 기본 소켓 생성

#include <sys/socket.h>
#include <netinet/in.h>
int main() {
    int sockfd = socket(AF_INET, SOCK_STREAM, 0);  // TCP
    if (sockfd < 0) { perror("socket"); return 1; }
    close(sockfd);
    return 0;
}

📄 mvecho.c — 에코 클라이언트

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in serv;
serv.sin_family = AF_INET;
serv.sin_port   = htons(7);                  // echo 포트
serv.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr*)&serv, sizeof(serv));
write(sockfd, buf, strlen(buf));
read(sockfd, recv, sizeof(recv));

📄 mvecho_server.c — 에코 서버

int server_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr = { AF_INET, htons(PORT), { htonl(INADDR_ANY) } };
bind(server_fd, (struct sockaddr*)&addr, sizeof(addr));
listen(server_fd, 5);
while (1) {
    int client_fd = accept(server_fd, NULL, NULL);
    int n = read(client_fd, buf, sizeof(buf));
    write(client_fd, buf, n);   // echo
    close(client_fd);
}

🗣️ Talk 프로그램 — fork() 사용 이유 (6주차) ⭐

  • read()/write()Blocking → 한 프로세스로 송수신 동시 처리 불가
  • fork()로 프로세스 복제 → 부모: 송신(write) / 자식: 수신(read)+출력
  • 종료 문자열: exit\n

📝 8주차 — 중간고사 정리 & 예상 출제

1~7주차 전체 내용 요약 + 시험 핵심 포인트

🎯 핵심 암기 키워드

  • OSI 계층별 PDU: bit → Frame → Packet → Segment
  • CSMA/CD: 이더넷의 기본, 충돌 감지 후 랜덤 대기 재전송
  • ANDing: IP & Mask = 서브넷 주소 → 같으면 같은 서브넷
  • DNS: 클라이언트는 재귀 질의, 리졸버는 반복 질의
  • ARP Request = 브로드캐스트 / Reply = 유니캐스트
  • 소켓 호출 순서: 서버 6단계, 클라이언트 4단계
  • htons vs htonl: 포트=16비트=htons, 주소=32비트=htonl

📋 예상 출제 유형

  • OSI 7계층 각 계층의 역할·PDU·대표 프로토콜 서술
  • 회선 교환 vs 패킷 교환 차이 (“자원 점유 방식” 관점으로)
  • CSMA vs CSMA/CD 차이 (“충돌 처리” 관점으로)
  • ANDing 연산으로 서브넷 주소 도출 (이진수 계산 포함)
  • 서브넷 빌린 비트 수 계산 (서브넷 수·호스트 수 도출)
  • DNS 재귀 질의 vs 반복 질의 설명
  • ARP 동작 흐름 (같은 서브넷 vs 다른 서브넷)
  • 소켓 서버/클라이언트 호출 순서 직접 작성
  • htons() vs htonl() 언제 쓰는지
  • fork() 기반 Talk 프로그램에서 부모/자식 역할