네트워크

컴퓨터 네트워킹 하향식 접근 - 1. 컴퓨터 네트워크와 인터넷

고은수 2025. 1. 14. 23:05
컴퓨터 네트워킹 하향식 접근 (7판) 책으로 네트워크를 다시 정리해 보자. 중요하지 않은 부분이나 알던 부분들은 넘기거나 간단하게만 정리하고 면접 질문에서 많이 보던 것들이 나 난해한 부분들은 자세하게 공부할 예정이다. 빠르게 복습하려는 분들에게 도움이 되었으면 좋겠다.

 

    1.3 네트워크 코어

    링크와 스위치의 네트워크를 통해 데이터를 이동시키는 방식에는 패킷 교환 회선 교환이 있음

     

    패킷 교환

    • 종단 시스템들은 메시지를 교환하는데, 그 긴 메시지를 작게 나눠 놓은게 패킷임.
    • 패킷은 저장 후 전달하기 때문에 링크개수 N만큼 지연 발생
    • 링크가 다른 패킷을 전송하고 있다면 패킷이 출력 버퍼에서 기다려야 하는 큐잉 지연도 발생
    • 버퍼가 꽉 차있으면 패킷 손실 발생
    • 라우터에서 다음 목적지 어디로 보낼지? → 전달 테이블
    • 이 전달 테이블을 어떻게 설정할지? → 라우팅 프로토콜

    회선 교환

    • 회선 교환은 자원을 통신 세션 동안에 확보 또는 예약 (패킷 교환에서는 예약 x)
    • ex) 전통적인 전화망
    • 여기서 연결을 회선이라고 함

    패킷 교환 vs 회선 교환

    👍 : 패킷 교환이 회선 교환보다 전송 용량의 공유에서 더 효율적이고 간단하게 구현 가능하다.

    👎 : 패킷 교환은 가변적이고 예측할 수 없는 종단 간의 지연 때문에 실시간 서비스에서는 적당하지 않다.

    → 그래서 요새 회선 교환을 패킷 교환으로 전환하고 있다고 한다.

     

    왜 패킷 교환이 효율적인가?

    사용자가 1 Mbps 링크를 공유하고 전체 시간에서 10%만 활동하고 활동 시간에 100 kbps의 속도로 데이터를 생성한다고 가정하자. 회선 교환의 경우 100 kbps가 항상 각각의 사용자에게 예약되어야 하고 회선 교환 링크는 동시에 10명만 지원한다. 패킷 교환의 경우 한 특정 사용자가 활동하고 있을 확률은 0.1(10%)이고 만약 35명의 사용자가 있다면 11명 이상의 사용자가 동시에 활동할 확률은 약 0.0004(0.04%)이다. 즉 10명 이하의 동시 사용자가 있을 때 패킷은 지연 없이 링크를 통과하고, 10명 이상의 동시 사용자가 있을 확률은 매우 작으므로 패킷 교환은 회선 교환과 거의 대등한 성능 지연을 가지면서도 거의 3배의 사용자를 허용한다.

    1.4 패킷 교환 네트워크에서의 지연, 손실과 처리율

    처리 지연

    • 패킷 헤더를 조사하고 그 패킷을 어디로 보낼지를 결정하는 시간

    큐잉 지연

    • 큐에서 링크로 전송되기를 기다리는 시간

    전송 지연

    • 패킷의 모든 비트를 링크로 밀어내는 데 걸리는 시간

    전파 지연

    • 링크의 처음부터 라우터 B까지의 전파에 필요한 시간

    처리율

    • 호스트 A에서 호스트 B로 커다란 파일을 전송할 때 호스트 B가 파일을 수신하는 비율(비트/초)
    • 서버 → 라우터로 가는 전송률이 2 Mbps, 라우터 → 클라이언트로 가는 전송률이 1 Mbps 일 때 서버→라우터의 전송률이 더 빠르므로 병목이 생기고, 이 병목 링크의 전송률이 처리율이 된다.

    1.5 프로토콜 계층과 서비스 모델

    애플리케이션 계층

    • 사용자가 직접 네트워크와 상호작용하는 계층
    • HTTP, SMTP(메일), FTP(파일) 등의 프로토콜 포함
    • 애플리케이션 계층에서 DNS가 도메인을 32비트 네트워크 주소로 변환
    • 정보 패킷을 메시지 라고 부름

    트랜스포트 계층

    • 클라이언트와 서버 간에 애플리케이션 계층 메시지를 전송
    • TCP/UDP
    • 흐름/혼잡 제어
    • 데이터를 작은 단위로 나눔
    • 정보 패킷을 세그먼트 라고 부름

    네트워크 계층

    • 한 호스트에서 다른 호스트로 데이터그램 라우팅
    • 최적의 경로 설정, 정확한 IP 주소 지정
    • 트래픽 제어

    링크 계층

    • 신뢰성 있는 정보 전달 → 올바른 목적지로, 오류 검출 및 수정, 흐름 제어
    • 이더넷, 와이파이 등
    • 정보 패킷을 프레임 이라고 부름

    물리 계층

    • 프레임 내부의 각 비트를 한 노드에서 다음 노드로 이동
    • 실제 전송 매체(광케이블, 무선 등)에 의존

    OSI 7 레이어는?

    • 6번째 프레젠테이션 계층 : 서로 다른 시스템 간 데이터를 주고받을 때 양쪽 모두가 이해할 수 있는 공통의 형식으로 변환
    • 5번째 세션 계층 : 데이터 교환의 경계와 동기화 제공 → 먼소리임?
      • 게임할 때 중요한 순간들 (레벨 시작, 체크포인트, 레벨 종료) 등이 데이터 교환의 경계점임
      • 세션 계층은 이런 지점들을 표시하고 여러 플레이어의 게임 진행을 맞춰줌
      • 정기적으로 동기화 지점을 만들고, 양쪽 모두 이 지점에 도착할 때까지 기다렸다가 준비되면 다음 단계로 진행

    → 필수적이지 않고 애플리케이션 개발자한테 달려있어서 요즘엔 5 계층으로 나누나 보다

     

    캡슐화

    • 계층 내려갈 때마다 캡슐화
    • 라우터나 링크 계층 스위치는 프로토콜 스택의 모든 계층을 구현하진 않음

    1.6 공격받는 네트워크

    맬웨어

    • 우리의 장치에 들어가서 파일을 삭제, 사적인 정보를 모아서 보냄
    • 한 호스트에 있는 게 아니라 다른 호스트를 찾아서 영향을 미침
    • 바이러스 : 사용자의 장치에 영향을 주기 위해 사용자의 상호작용이 필요한 맬웨어. ex) email 열면 걸리는 거
    •  : 직접적인 상호작용 없이 장치에 침투하는 맬웨어.

    DoS (denial-of-service)

    • 정상적인 사용자들이 사용할 수 없게 하는 것
    • 취약성 공격 : 공격받기 쉬운 애플리케이션 혹은 운영체제에 교묘한 메시지를 보내서 서비스를 중단시키거나 호스트가 동작을 멈추도록 함
    • 대역폭 플러딩 : 목표 호스트로 수많은 패킷을 보내 접속 링크가 동작하지 못하게 함
    • 연결 플러딩 : 반열림, 전열림된 TCP 연결을 설정해서 호스트가 가짜 연결을 처리하느라 바빠서 정상적인 연결을 받아들이는 것을 중단함

    패킷 스니퍼

    • 지나가는 모든 패킷의 사본을 기록하여 민감한 정보의 사본을 얻음

    IP 스푸핑

    • 거짓의 출발지 주소를 가진 패킷을 인터넷으로 보냄
    • 한 사용자가 다른 사용자인 것처럼 행동

    궁금한/난해한 점들

    왜 계층별로 나눠놨을까?

    • 각 계층별로 자신의 역할에만 집중할 수 있음
    • 독립적으로 동작하므로 어느 계층에서 문제가 생기거나 수정/업데이트할 때 다른 계층에 영향을 미치지 않음

    TCP도, 링크 계층에서도 신뢰성 있는 통신이라는데 `신뢰성 있다`는 게 뭘까?

    각 계층에서 말하는 신뢰성의 의미와 처리 범위가 다르다.

    TCP의 신뢰성

    • end-to-end. 즉 출발지 호스트에서 목적지 호스트까지의 전체 경로에 대한 신뢰성을 책임짐.
    • 순서 보장 : 데이터가 보낸 순서대로 도착하도록 보장
    • 데이터 무결성 : 체크섬을 통해 데이터가 손상되지 않았는지 확인한다
    • 손실 복구 : ACK, 타이머를 사용해 데이터가 손실되면 재전송
    • 흐름제어 : 수신 측의 처리 속도를 고려하여 전송 속도 조절
    • 자세한 건 자세한건 전송 계층 파트를 공부하자

    링크 계층에서의 신뢰성

    • hop-by-hop. 즉 직접 연결된 두 노드 사이의 신뢰성만 책임짐.
    • 물리적 오류 감지 : 비트 오류를 감지하고 수정
    • 프레임 단위의 전송 관리 : 프레임 시작과 끝을 구분하고, 프레임 단위로 오류 체크
    • 매체접근제어(MAC) : 여러 노드가 동시에 전송하려 할 때 충돌 방지

    TCP의 신뢰성은 서울↔부산의 전체 배송 과정을 추적하고 분실되면 다시 보내고, 순서가 바뀌면 바로잡는 것

    링크 계층의 신뢰성은 각 배송구간 (서울→대전, 대전→대구, 대구→부산)에서 택배 차량이 안전하게 물건을 운반하는 것

     

    전송 계층에서는 왜/어떻게 쪼갤까?

    • 네트워크 장비들은 한 번에 처리할 수 있는 데이터 크기에 제한이 있음
    • 작은 패킷들로 나누면 다른 데이터들도 그 사이사이에 전송될 수 있어서 네트워크 대역폭을 더 효율적으로 사용할 수 있음
    • 오류 발생 시 작은 패킷 하나만 재전송하면 되므로 효율적임
    • 자세한 건 전송 계층 파트를 공부하자

    네트워크 계층에서는 어떻게 최적의 경로를 찾을까?

    • RIP : 가장 단순한 방식으로 목적지까지 거쳐야 하는 라우터의 개수만을 고려함
    • OSPF : 더 정교한 방식으로 각 링크의 대역폭, 지연시간, 혼잡도 등을 고려함
    • BGP : 인터넷의 서로 다른 네트워크 간의 라우팅을 당담함
    • 자세한 건 네트워크 계층 파트의 라우팅 프로토콜을 공부하자

    계층 간에는 어떻게 이동할까?

    응용 계층에서 물리 계층까지 이동하고, 물리 계층에서 유무선으로 보내는 건 알겠는데 그럼 중간에 계층 간에서는 어떻게 이동할까?

    응용 계층 부분만 개발자가 직접 구현하고, 전송 계층 아래로는 운영체제가 제공한다. 운영체제의 네트워크 스택은 사용자 영역과 커널 영역으로 나뉜다.

    사용자 영역

    • 응용 프로그램, 라이브러리 등 웹 브라우저나 이메일 클라이언트 같은 프로그램이 여기서 동작함
    • 이 프로그램들은 소켓 API를 통해 커널의 네트워크 기능을 사용함

    커널 영역

    • 소켓 인터페이스 계층
      • 사용자 프로그램과 커널 사이의 다리 역할을 함. 프로그램이 `connect()`, `send()` 같은 소켓 함수를 호출하면 이 계층이 그 요청을 받아서 처리함
    • 프로토콜 계층
      • TCP/UDP 계층
      • IP 계층
      • 네트워크 장치 인터페이스 : 실제 네트워크 카드와 통신하는 드라이버 관리, 네트워크 카드의 큐 관리