본문 바로가기

CS

컴퓨터 네트워킹 하향식 접근[Chapter 4]

[4.1] 네트워크 계층 개요

  • 네트워크 계층은 트랜스포트 계층으로부터 세그먼트를 얻어 각 세그먼트를 데이터그램으로 캡슐화 하고 인접한 라우터에게 데이터그램을 보낸다
  • 수신 호스트의 네트워크 계층은 세그먼트를 추출하여 트랜스포트 계층까지 전달한다
  • 각 라우터의 데이터 평면 역할은 입력 링크에서 출력 링크로 데이터그램을 전달하는 것
  • 네트워크 제어 평면의 근본적인 역할은 데이터그램이 출발지 호스트에서 목적지 호스트까지 잘 전달되게끔 로컬 포워딩, 라우터별 포워딩을 대응시키는 것

4.1.1 - 포워딩과 라우팅 : 데이터 평면과 제어 평면

  • 패킷을 전달하기 위한 네트워크 계층의 중요한 두 가지
    • 포워딩(전달) : 라우터의 입력 링크에 도달했을 때 라우터는 패킷을 적절한 출력 링크로 이동
      • 매우 짧은 시간단위(보통 몇 나노초)를 갖기에, 대표적으로 하드웨어에서 실행
      • 운전으로 비유하면 표지판을 보고 교차로를 선택하는 행위
    • 라우팅 : 송신자가 수신자에게 패킷을 전송할 때 네트워크 계층은 경로를 계산한다
      • 라우팅 알고리즘이라고 함
      • 네트워크 전반에 걸쳐 출발지에서 목적지까지 데이터그램의 종단 간 경로를 결정하는 것
      • 운전으로 비유하면 출발 전 지도를 보고 계획을 하는 행위
  • 포워딩 테이블(forwarding table)
    • 라우터는 패킷 헤더의 필드값을 조사하여 패킷을 전달한다
    • 포워딩 테이블 엔트리에 저장되어 있는 헤더의 값은 해당 페킷이 전달되어야 할 라우터의 외부 링크 인터페이스를 나타낸다

제어 평명 : 전통적인 접근 방법

  • 어떻게 첫 포워딩 테이블이 구성되는가?
    • 라우팅 알고리즘은 라우터의 포워딩 테이블의 내용을 결정한다
    • 라우팅 알고리즘은 모든 라우터에서 실행되며 라우터는 포워딩과 라우팅 기능을 모두 갖고 있어야 한다
    • 라우팅 프로토콜에 따라 라우팅 메시지를 교환하며 한 라우터의 라우팅 알고리즘과 다른 라우터의 라우팅 알고리즘이 소통하고 값을 계산 한다

제어 평명 : SDN 접근 방법

  • 여러 라우터들을 관리하는 원격 컨트롤러가 라우팅 기능을 대신하고 라우터는 포워딩 기능만 함

4.1.2 - 네트워크 서비스 모델

  • 네트워크 계층에서 제공되는 서비스 종류(모든 네트워크가 아래의 모든 서비스를 제공한다는 것이 아님)
    • 보장된 전달 : 패킷이 출발지 호스트에서부터 목적지 호스트까지 도착한다는 것을 보장
    • 지연 제한 이내의 보장된 전달 : 패킷의 전달을 보장할 뿐 아니라 특전 시간 이내에 전달한다
    • 순서화 패킷 전달 : 패킷의 순서를 보장하며 도착한다
    • 최소 대역폭 보장 : 송신가 수신 호스트 사이에 특정한 비트율을 지정하고 이 이상의 속도로 들어오면 초과분에 대해서는 보장 x
    • 보안 서비스 : 모든 데이터 드램을 출발지 호스트에서는 암호화, 목적지 호스트에서는 해독을 할 수 있게 해 기밀성 유지
  • 인터넷 네트워크 계층은 최선형 서비스라고 알려진 서비스를 제공
    • 패킷을 보내는 순서대로 수신됨을 보장 할 수 없을 뿐 아니라 목저지 까지의 전송 자체도 보장하지 않으며 종단시스템간 지연, 보장되 최소대역폭도 없음
    • 이후로 ATM네트워크 구조, Instserv구조 등 점점더 발전해옴

[4.2] 라우터 내부에는 무엇이 있을까

  • 라우터의 네 가지 요소
    • 입력 포트 : 입력 포트의 맨 왼쪽 박스와 출력 포트의 맨 오른쪽 박스는 라우터로 들어오는 입력 링크로, 물리 계층 기능을 수행
      • 입력 포트에서 검색 기능을 수행
      • 포워딩 테이블을 참조하여 도착된 패킷이 스위치 구조를 통해 라우터 출력 포트(출력 인터페이스)를 결정
      • 라우터가 지원하는 포트의 수는 비교적 적은 수의 기업 라우터부터 수백개의 포트를 갖는 ISP의 라우터까지 다양(집에 있는 무선 공유기도 라우터의 일종)
    • 스위치 구조 : 스위치 구조는 라우터의 입력 포트와 출력 포트를 연결한다
    • 출력 포트 : 스위치 구조에서 수신한 패킷을 저장하고 필오ㅛ한 링크 계층 및 물리 계층 기능을 수행하여 출력 링크로 패킷을 전속
    • 라우팅 프로세서
      • 기존의 라우터에서는 라우팅 프로토콜을 실행하고 라우팅 테이블과 연결된 링크 상태 정보를 유지 관리하며 라우터의 포워딩 테이블을 계산
      • SDN라우터에서 라우팅 프로세서는 원격 컨트롤러와 통신하여 계산된 포워딩 테이블 엔트리를 수신하고 라우터의 입력 포트에 이러한 엔트리를 설치
      • 네트워크 관리 기능을 수행
  • 라우터의 포워딩 절차
    • 목적지 기반 포워딩 : 최종 목적지를 검색하고 최종목적지로 연결되는 출구를 결정한 후 전달
    • 일반화된 포워딩 : 단순하게 짧은 거리가 아닌 많은 요인을 토대로 출구를 결정한다

4.2.1 - 입력 포트 처리 및 목적지 기반 전송

  • 라우터로 들어온 IP주소를 라우터의 인터페이스와 매칭해서 해당하는 출력 포트로 보냄
    • 전달된 IP는 32비트 모두가 주소정보가 아닌데 주소정보를 담은 곳을 프리픽스(=서브넷)라고 함
    • 이 프리픽스를 인터패스와 패칭해 출력 포트를 정하고 같은 것중 가장 길게 매치되는 최장 프리픽스 매치 규칙을 사용
  • 검색은 나노초 단위로 수행되어야 함
    • 하드웨어에서 검색해야 할 뿐만 아니라 대형 테이블을 통한 단순 선형 검색 이외의 기술이 피료
  • 검색을 통해 패킷의 출력 포트가 결정되면 패킷을 스위치 구조로 보낼 수 있다
  • 입력 포트에서 검색 이외의 기능
    • 물리 및 링크 계층 처리
    • 패킷의 버전 번호, 체크섬, TTL, 필드를 확인하고 이후 두 필드를 다시 사용
    • 네트워크 관리에 사용되는 카운터를 갱신해야 한다

4.2.2 - 스위칭

  • 스위치 구조는 패킷이 입력 포트에서 출력 포트로 실제로 스위칭(즉, 포워딩)되는 구조를 통과하므로 라우터의 핵심이다.
  • 메모리를 통한 교환
    • 가장 단순한 초기의 라우터는 CPU를 직접 제어해서 입력 포트와 출력 포트 사이에서 패킷을 스위칭하는 전통적인 컴퓨터
    • 패킷이 도착하면 입력 포트는 라우팅 프로세서에게 인터럽트를 보내 패킷을 프로세서 메모리에 복사한 다음 헤더에서 목적지 주소를 추출하고 포워딩 테이블에서 적절한 출력 포트를 찾은 다음 패킷을 출력 포트의 버퍼에 복사한다
  • 버스를 통한 교환
    • 이 접근 방식에서 입력 포트는 라우팅 프로세서의 개입 없이 공유 버스를 통해 직접 출력 포트로 패킷을 전송한다
  • 상호연결 네트워크를 통한 교환
    • 이전의 멀티프로세서 컴퓨터 구조에서 프로세서를 상호연결하는 데 사용된 것과 같은 좀 더 복잡한 상호연결 네트워크를 사용하는 것(크로스바 스위치)
    • 이전의 두 가지 스위칭 방식과는 달리 크로스바 스위치는 여러 패킷을 병렬로 전달 할 수 있지만 2개의 패킷이 동일한 출력 포트로 보내지는 경우에는 한 번에 하나밖에 처리 못함

4.2.3 - 출력 포트 처리

  • 출력 포트의 메모리에 저장된 패킷을 가져와서 출력 링크를 통해 전송한다.
    • 패킷 선택(즉, 스케줄링), 큐 제거, 필요한 링크 계층 및 물리 계층 전송 기능을 수행

4.2.4 - 어디에서 큐잉이 일어날까?

  • 패킷 큐는 입력 포트와 출력 포트 모두에서 형성될 수 있으며 패킷을 저장할 수 있는 메모리가 없을 때 패킷 손실이 발생
  • 입력 큐잉
    • 도착하는 모든 패킷을 전송하기에 스위치 구조가 충분히 빠르지 않으면 출력 포트로 전송되기 위해 차례를 기다려야 함 -> 이러다가 패킷 손실 발생
  • 출력 큐잉
    • 출력되는 속도보다 스위치에서 넘어오는 속도가 빠를 때 패킷 손실 발생

얼마나 많은 버퍼가 요구되는가?

  • 버퍼링이 클수록 라우터가 패킷 도착 속도의 큰 변동을 흡수하여 라우터의 패킷 손실률을 감소시킬 수 있기 때문에 버퍼링이 더 좋아진다고 생각하는 것 보다 버퍼가 클 수록 네트워크 전체적으로 큐잉 지연이 길어진다고 생각하는 편이 낫다

4.2.5 - 패킷 스케줄링

  • FIFO : 선입 선출
  • 우선순위 큐잉 : 우선순위에 따라 전송하며 우선순위가 같으면 FIFO, 우선순위가 낮은게 이미 전송되고 있다면 그거 뒤로 우선순위 높은것의 순서 할당
  • 라운드 로빈과 WFQ: 우선순위 큐잉처럼 클래스 별로 분류는 하지만 각 클래스 마다 번갈아가면서 전송

[4.3] 인터넷 프로토콜(IP) : IPv4, 주소체계, IPv6 등

4.3.1 - IPv4 데이터그램 포멧

  • 대체로 20바이트

주요 필드

  • 버전 번호 : 4비트로 데이터 그램의 프로토콜 버전을 명시 하며 이 버전을 토대로 나머지 정보를 어떻게 해석할지 결정됨
  • 헤더 길이 : 헤더에 가변 길이의 옵션을 포함하므로 이 네 비트로 실제 페이로드가 시작하는 곳을 결정
  • 서비스 타입 : 실시간 데이터 그램과 비실시간 트래픽등을 구분하는데 사용
  • 데이터그램 길이 : 바이트로 계산한 IP데이터그램의 전체 길이이며 이 필드의 크기는 16비트(이론상 65,535바이트지만 실제 데이터그램은 1500바이트보다 큰 경우는 거의 없다)
  • 식별자 플래그 단편화 오프셋 : 큰 IP데이터 그램이 여러개의 작은 IP데이터 그램으로 분할된 다음 목적지로 독립적으로 전달되며, 여기서 페이로드 데이터가 최종호스트의 트랜스포트 계층으로 전달되기 전에 다시 모이게 된다
    • 식별자는 어떤 데이터의 분할인지
    • 플래그는 분할된게 뒤에 더 남았는지
    • 오프셋은 분할된 것 중에 몇 번째인지
  • TTL(time-to-live) : 네트워크에서 데이터그램이 무한히 순환하지 않도록 라우터가 데이터그램을 처리할 때마다 감소하는 필드, 이 필드가 0이되면 라우터가 데이터그램을 폐기한다
  • 프로토콜 : 데이터그램의 데이터 부분이 전달될 목적지의 트랜스포트 계층의 특정 프로토콜을 명시한다(예를 들어 TCP인지 UDP인지 다른거인지)
  • 헤더 체크섬 : 비트 오류를 탐지하는데 도움을 줌
  • 출발지와 목적지 IP주소
  • 데이터

4.3.2 - IPv4 주소체계

  • IP는 단순히 머신의 주소가 아니라 인터페이스이다
  • 인터페이스 : 호스트와 물리적 링크 사이의 경계
  • 라우터는 여러개의 인터페이스를 갖는다
  • IP주소는 32비트 길이, 2의 32승(대략 40억 개가 사용 가능)
  • 호스트들의 인터페이스들과 하나의 라우터 인터페이스로 연결된 네트워크는 서브넷을 구성한다고 말함
    • 라우터는 여러개의 서브넷을 구성함
  • 111.111.111.44/24 -> 여기서 24는 앞의 24비트(프리픽스)가 IP주소지임을 뜻하는데 이를 서브넷 마스크라고 부름
  • CIDR(Classless InterDomain Routing)
    • 서브넷 주소 체계를 일반화 함
    • 앞에서 예시를 든 24비트의 프리픽스는 해당 기관의 주소를 나타내고 남은 11비트는 해당 기관 내에서의 호스트들을 식별
    • CIDR채택 전에는 기관에 따라 네트워크 부분을 8, 16, 24비트로 제한을 했었는데 이렇게 되면 작은 기관은 너무 많은 IP가 제공이 됐고 그에 따라 사용하지 못하는 IP가 많아졌음
    • 각 기관에 맞게 프리픽스를 조정하도록 함

주소 블록 획득

  • 기관의 네트워크 관리자는 ISP와 접촉해 IP주소 블록을 얻어야 함
    • 예를 들어 ISP가 주소 블록 200.23.16.0/20을 할당 받았으면 이 주소 블록을 작은 주소 블록으로 나누고 다른 조직을 지원해줘야 함
  • ICANN(Internet Corporation for Assigned Names and Numbers) : IP주소 공간을 관리하고 주소 블록을 할당하는 최상위 국제기관, 비영리 단체

호스트 주소 획득 : 동적 호스트 구성 프로토콜(DHCP - Dynamic Host Configuration Protocol)

  • 순서
    • DHCP 서버 발견 : 출발지 주소는 0.0.0.0과 포트번호 68로, 목적지 주소는 브로트 캐스트 IP주소 255.255.255.255와 포트번호 67번으로 네트워크 세상에 "나 인터넷 연결이 필요해!" 하고 소리 친다
      • 이 메시지는 67포트를 열어둔 모든 서버가 받을 수 있음
    • 발견 메시지를 본 DHCP 서버는 DHCP제공 메시지를 클라이언트로 응답함
      • 얘도 출발지 255.255.255.255를 사용해서 응답함
      • 꼭 하나의 DHCP서버만 응답하는게 아니라 여러 서버가 응답하는데 클라이언트가 선택하는거임
    • 클라이언트는 하나의 DHCP서버를 선택해 응답메시지를 또 255.255.255.255로 보냄
      • 왜 해당 DHCP의 IP가 아니라 또 브로드캐스트 주소로 하는지? -> 다른 DHCP서버한테 이 서버 선택했다고 알려줘 그 서버들이 그 연결에 대한 작업을 폐기하게 하기 위해
    • 서버는 한 번더 확인 하는 ACK메시지를 보냄
  • 위 과정에서 사용 가능한 시간이 정해지는데 이 시간을 갱신할 수 있는 메커니즘도 제공함

4.3.3 - 네트워크 주소 변환(NAT)

  • 40억개로 세상의 모든 호스트를 나타내기 부족함 그래서 출시한게 IPv6인데...아래와 같은 이유로 전환이 어려움
    • 모든 라우터들이 바뀌어야 하기 때문에.(세상에 있는 모든 라우터가 몇 개인데;; 공짜로 바꿔주지 않는 한 누가 바꾸며 그걸 한 번에 어떻게 바꿈ㄷㄷ;;)
    • 근데? NAT라고 임시방편 써서 일단 개수 부족 문제는 해결 할 수 있네? 그럼 일단 이거로 버텨보자  하고 안바뀌는거임
  • NAT
    • 원래는 각 호스트가 유니크 해야하지만 이는 40억개로는 택도 없음
    • 그래서 어떤 특정 기관이 유니크한 IP를 부여받고 그 기관 내에서는 그 기관만 알아볼 수 있는 유니크한 방식으로 호스트 들을 구별함
    • 호스트가 네트워크 통신을 원할 때 그 기관의 라우터를 거치는데 그 라우터에서 호스트와 그 기관의 IP + 포트번호를 매칭한 변환 테이블에 적어두고 기관의 IP로 목적지와 통신함
      • 호스트의 주소가 기관의 주소로 변환 될 때 포트번호도 변경되는데 다른 호스트에서 중복된 포트 번호를 쓸 수도 있기 때문
    • 목적지로부터 돌아온 응답값의 목적지를 변환 테이블에서 확인해서 그 기관 내 유니크한 호스트 주소로 변환해서 다시 돌려줌
    • 문제점
      • NAT주소를 사용하는 호스트는 서버운영을 못함
        • why? 호스트의 유니크한 주소는 그 기관내에서만 알아볼 수 있는거지 글로벌 세상에서는 알아볼 수가 없음
        • 변환 테이블에 항상 내 주소 적어달라하고 기관에서 특정 IP 매칭해놓으면 되긴 하겠다만 기관이 안들어줄 확률 100%
        • 근데 대부분의 사용자들은 서버가 아니라 클라이언트 입장이기 때문에 일단 사용은 하고 있음...

4.3.4 - IPv6

  • 주소가 32비트가 아니라 128비트임 ㄷㄷ;;

IPv6 데이터그램 포멧

  • 특징
    • 확장된 주소 기능 : 128비트
    • 간소화된 40바이트 헤더 : IPv4의 많은 필드가 생략되거나 옵션으로 남겨짐 -> 라우터가 더 빨리 처리 가능
    • 흐름 레이블링 : 예를 들면, 오디오/비디오 전송은 흐름으로 처리되는 반면 파일 전송이나 전자메일 같은 예전의 애플리케이션은 흐름으로 처리되지 않음
  • 헤더 필드
    • 버전 : 4비트의 버전 표시 필드
    • 트래픽 클래스 : VoIP같은 특정 애플리케이션 데이터그램에 우선순위를 부여하는데 사용
    • 흐름 레이블 : 데이터그램의 흐름을 인식하는데 사용
    • 페이로드 길이
    • 다음 헤더 : 전달될 프로토콜의 구분에 이용(예를 들면 TCP인지 UDP인지 등등)
    • 홉 제한 : 라우터가 데이터 그램 전달할 때 마다 1씩 감소하고 0이되면 사라짐
    • 출발지와 목적지 주소
    • 데이터
  • 없어진 필드
    • 단편화/재결합 : 이거 라우터에서 하면 너무 오래걸려서 패킷 너무 크다고 오류 메시지 보내서 종단시스템이 하도록 하게 함
    • 헤더 체크섬
    • 옵션