Chapter 9 네트워크 계층: Data plane

MoonLight·2021년 12월 13일
1

컴퓨터 네트워크

목록 보기
8/10

0x01. 네트워크 계층 개요


  • segment를 송신호스트 ⇒ 수신호스트로 전송한다.

    • 송신측에서는 segment를 datagram으로 캡슐화하고,(datagram==IP계층의 패킷)
    • 수신측에서는 segment를 전송계층으로 옮긴다.
  • network layer은 모든 host, router에서 재설정된다.

    • transport layer까지는 sender, receiver에서만 재설정된다.
  • 라우터는 라우터를 통과하는 모든 IP datagram들의 header필드를 조사한다.

ethernet기반의 Data Link계층은 같은 네트워크 상의 컴퓨터에는 데이터전송이 가능(인접한 두 노드 간 전송)하나, 인터넷이나 다른 네트워크로는 데이터를 전송할 수 없다.

1.1 네트워크 계층의 2가지 핵심 기능

네트워크 계층 기능:

  • forwarding : 패킷을 라우터의 입력 port에서 출력port로 옮긴다.
    • hardware영역(data plane)
  • routing : 송신지에서 목적지까지 전송되도록 최단 경로를 결정한다.
    • software영역(control plane)

1.2 Data plane과 Control plane


(1) 개념

  • Data Plane : 패킷 송수신 기능 담당. (forwarding 기능)

    • Local, 라우터 내에서
    • 라우터 입력port로 도달한 datagram이 어떻게 출력port로 전송되는지 결정
  • Control Plane : 패킷 경로 설정, 관리 및 제어하는 기능 담당. (routing 기능)

    • network-wide logic
    • 어떻게 datagram이 송신지/목적지간 end-end 경로를 따라 라우터들 사이에서 라우팅 되는지를 결정
    • 2가지 Control plane에 대한 접근:
      • 전통적 라우팅 알고리즘 : 라우터 안에서 forwarding, routing 모두 다 함
        • 아래에서 설명할 per-router control plane
      • SDN(Software-defined network) : 오버헤드가 큰 routing을 따로 분리하여 remote-server에서 관리
        • 아래에서 설명할 (3) logically centralized control plane

(2) 옛날방식 : per-router Control plane

모든 라우터들 각각에서 개인의 라우팅 알고리즘 요소들이 control plane내에서 상호작용한다.

따라서 각 라우터별로 control plane을 돌리며, forwarding table을 각자 계산해서 갖고있다. 그럼 routing algorithm을 통해 서로 메시지를 주고받으면서 routing한다.

(3) 최근방식 : logically centralized control plane

remote controller와 local control agent(CA) 와 상호작용한다.

각 라우터 별로 CA가 있는데 이 CA에서는 forwarding table을 계산하고, 중앙 remote controller에서는 CA로부터 정보를 받아서 routing algorithm을 돌린다.

즉 CA와 Remote Controller가 상호작용하면서 각 라우터의 정보를 주고받는다.

1.2 네트워크 서비스 모델

송신지에서 목적지까지 datagram을 전송하는 채널에 대한 어떤 서비스 모델을 Network service model이라고 한다.

individual datagram에 대한 예:

  1. guaranteed delivery : 전달을 보장하는 것.

  2. guaranteed delivery with less than 40 msec delay : 40 msec 이내로 무조건 전달을 보장하는 것.

이런 형태가 바로 service model의 종류이다.

(datagram마다가 아니라) datagram의 연속적인 각 flow에 대한 예:

  1. in-order. 순서가 맞는 datagram을 전달해 주는 것

  2. 이 flow에 대해서 최소한의 bandwidth를 보장해 주는 것.

  3. 패킷들 간에 spacing에 대해 restriction을 주는 것.

network service model을 고려한 ATM이라고 하는 2000년대 초기의 network 스위치 장비가 있음. 그래서 Bandwidth, Loss, Order, Timing을 보장해줄 수 있다.

CBR (Constant Bit Rate) : 일정한 전송률을 갖는 서비스에 대해서 전부 게런티 보장해 줄 수 있다.

VBR (Variable Bit Rate) : 가변적인 전송률에서도 게런티 보장해 줄 수 있다

ABR., Bandwidth와 order정도만 service하는 모델.

UBR., order정도만 service해주는 모델.

0x02. 라우터 내부에는 뭐가 있을까?


2.1 라우터 개략적 구조

  • 일반적 라우터 설계의 high-level 모습

라우팅 소프트웨어(management control plane for routing)

1. routing processor

  • millisecond 시간이 걸림 (1ms = 1/1,000 s)

라우터 하드웨어(data plane for forwarding)

1. input port

2. high-speed switching fabric

3. output port

  • nanosecond 시간이 걸림(1ns = 1/1,000μs = 1/1,000,000ms = 1/1,000,000,000s)

여기서 bottleneck은 routing processor가 된다. 여기서 input과 output의 forwarding은 nanosecond로 빠르지만, 그 중간에서 processing하는 routing processor가 millisecond로 느리기 떄문에 input port에 queueing delay가 생기게 된다.

(1) Data plane: Input port

  • 순서: [ physical layer(line termination) ⇒ link layer ⇒ queue ⇒ switch fabric ] 로 datagram이 맨 밑 계층부터 올라옴.

memory를 읽고 forwarding을 할 때 방법이 2가지가 있다:

1. destination-based forwarding

첫번째 칸은 11001000 … 00000000 부터 11001000 … 11111111까지는 link interface 0번으로 보내라는 것. 두번째 세번째 네번째도 마찬가지이다.

routing 알고리즘으로 범위가 설정되고, 어떤 주소에 대해서 어떤 interface를 통해 나가야 빨리 나가는지 학습해 나간다. 즉, router protocol을 통해 학습하는 것이다.

이것은 전세계 수많은 IP들을 전부 다 해준다. 학습해가면서 업데이트한다. IP주소의 범위는 대략적으로 국가적으로 나누어져 있다. 하지만 routing 알고리즘은 오버헤드가 상당히 크다.

Longest prefix matching

Longest prefix matching : 주어진 목적지 주소를 통해 forwarding table을 찾을 때, 목적지 주소와 매칭되는 가장 긴 주소 prefix를 사용한다.

범위를 어떤식으로 나누게 되냐면, 첫번째 IP를 보자. 앞에서부터 8bit, 8bit, 5bit, 나머지 으로 되어있다. 은 무엇이 오든 상관없다. 앞의 8,8,5bit만 보고 일치하면 0번 link로 보내는 것이다. 아래들도 마찬가지.

이때 Longest prefix matching을 사용하는데, 앞에서부터 쭉 봐서 제일 길게 matching이 되는 entry를 찾아서 이 entry에 해당하는 link로 datagram을 보내라고 hardware switch한테 알려줌.

첫번째 주소는 어느 link로 가게 될까? 0번 link에 해당하는 entry이기 때문에 0번 link로 간다.

두번째 주소는? 1번 link로 가게 된다. 1번 link와 2번 link가 일치하지만, 1번 link entry가 더 길게 matching이 되기 때문에 1번 link로 보내진다.

이 수많은 entry는 메모리에 저장된다. 이 메모리는 ternary content addressable memories (TCAMs)라고 한다. 한번의 clock cycle에 하나의 주소를 가지고 있다.

Cisco Catalyst는 TCAM에다가 1M(백만개)의 routing table entry를 넣을 수 있다. (Cisco는 현재 전세계 라우터를 독점하고 있는 기업이다.)

2. generalized forwarding

header field에 어떤 set들을 가지고 forwarding하는 방식이다.

이 책에서 다루지 않는다.

(2) Data plane: Switching fabrics

  • 기능 : 패킷을 input buffer에서 output buffer로 전달하는 부분이다.

  • switching rate는 input에서 output으로 초당 몇 개의 패킷을 보내는지 전송률이다.

    • N개의 input이 있다면 line의 rate가 N배가 된다.

switching fabric은 크게 3가지가 있다.

  1. memory: 가장 오래된 방식

  2. bus: line을 공유하여 한번에 하나씩 보내는 방식

  3. crossbar: line을 많이 사용하여 동시에 여러개 보낼 수 있는 방식

1. Switching via Memory

1세대 라우터에서 사용, 가장 전통적인 방식.

  • CPU의 직접적 통제하에, input port의 data를(패킷을) copy해서 memory에 넣었다가 output port로 보내는 형태이다. bus를 두번 지난다. (input -> memory, memory -> output)

    • 컴퓨터의 방식이라고 생각하면 됨
  • 이 방식은 memory의 bandwidth에 의해서 속도가 제한된다. 메모리(software)의 연산은 느리다. 결국 메모리를 사용한 이 방식은 느리다는 뜻이다.

2. Switching via Bus

  • 데이터그램이 입력 포트 메모리에서 공유 버스를 통해 출력 포트 메모리로 이동

    • bus는 shared 방식이기 때문에 순서에 따라서 bus를 통해 packet을 통해 보내게 된다.
    • 이 경우 bus를 한 번만 사용하기 때문에 bus를 두 번 사용하는 memory 방식 보다는 속도가 빨라진다.
  • bus contention(버스충돌) 👉 버스의 대역폭에 따라 스위칭 속도 제한

    • 하나의 통로를 통해 패킷이 이동하기 때문에 충돌이 발생하며, 대역폭에 따라 스위칭 속도가 제한된다.
      (Input과 Output이 한번에 한번의 flow를 만든다)
  • 32 Gbps bus, Cisco 5600: 액세스 네트워크와 기업 네트워크 라우터로 충분한 속도

    • Cisco에서는 32Gbps의 bus를 붙여놓았다. 그래서 Switching rate가 32Gbps이다. 이 speed로 access network나 enterprise router에서 충분하다고 한다.

3. Switching via Interconnection (Crossbar)

  • bus의 bandwidth 한계를 극복하기 위해 등장했다.
  • 크로스바 스위치(crossbar switch) : n개의 입력 포트와 n개의 출력 포트로 연결된 2n개의 버스로 구성
    • bus는 line하나였지만 crossbar는 line 몇개를 교차시켜 놓는다.
    • 충돌이 안 나므로 동시에 패킷을 보내도 O.K.
  • 여기에 좀 더 속도를 빨리하기 위해서 datagram을 똑같은 size의 cell로 분할해서 보내는 등의 방법을 사용하기도 한다.
  • Cisco 12000 : 인터커넥션 네트워크를 사용하여 60Gbps 속도로 스위칭

(1)+(2) input port 큐잉에 대해,,

  • Input port에서 datagram이 들어오는 것이 fabric로 보내는 것보다 빠르다면, input port에서 큐잉이 발생
    • 큐잉 지연과 입력 버퍼 오버플로우에 기인한 패킷 loss 발생
  • Head-of-the-Line (HOL) blocking:
    • 큐의 맨앞에 저장된 datagram이 line head부분인데 이 head가 못나가면 뒤에 있는 다른 패킷도 못 나간다(blocked)

(3) Output port(Very important!)

output port에서 발생하는 이슈들을 다루기 위해 다음과 같이 2가지 방식이 있다:

  1. switching fabric을 통해서 오는 Datagram(패킷)의 전송속도(출력링크 속도)보다 더 빨리 output port에 도착할 때 output port buffer overflow로 인한 loss / delay가 날 수 있으므로 버퍼 관리 (buffering)가 필요

  2. 버퍼에 저장된 Datagram들을 선택하여 전송(출력)하는 스케쥴링 규칙(scheduling discipline) 필요

    • buffer에서 packet을 꺼내는 순서에 대한 방식

1. Output port queueing 👉 buffering

  • 버퍼관리는 Switching Fabric로부터 packet이 들어오는 속도가 line에서 처리할 수 있는 속도를 넘었을 때, 일단 queue에다가 넣어놓는 것이다.

그렇다면 buffer를 얼마나 주어야 할까?

buffer를 많이 쓰면 delay가 엄청 늘어날 수 있다. 그럼 차라리 드랍시키는 게 낫다. 이와 같은 문제로 buffer의 크기는 중요하다.

  • RFC 3439의 정의에 따르면 buffer의 size는 RTT(약 250ms)에다가 Link Capcity(C)를 곱한 값을 사용하는 것이 최선이라 한다.
    • e.g., C = 10 Gbps link: 2.5 Gbit buffer
  • 즉, buffer의 크기RTT * C(capacity) 로 정한다. 만약 N개의 flow가 있다면 (RTT*C)/sqrt(N)이 buffer의 크기가 된다.

2. Scheduling mechanisms

  • scheduling: output port에 queueing되어 있는 packet들 중 어떤 것부터 내보내는지

  • FIFO (First In First Out) scheduling : 큐에 먼저 도착한 놈이 먼저 보내짐

    • discard policy: queue가 꽉 찼을 때 packet이 도달하면, 어떤 것을 버릴지에 대한 정책
      • tail drop : 마지막으로 도착하는 패킷을 drop
      • priority : 우선순위 낮은 패킷을 drop
      • random : queue가 거의 찼을 때, 새로운 패킷이 온다면 원래 쌓여있던 패킷들 중에 랜덤하게 뽑아서 drop.

2.1 Scheduling policies: priority

  • priority scheduling: priority가 높은 packet을 먼저 보내려고 하는 방식

우선순위별로 class를 만든다 (high priority queue, low priority queue -> 2개 우선순위 class)

우선 두 줄로 세운다. 그리고 high priority, low priority가 있으면, high를 중심으로 보내준다.

  • packet이 도달하면 header를 보고 어느 priority에 속하는지 결정하고,
    • 이 header는 IP source/dest, port number같은 것들이다.
  • link로 보낼 때는 high priority queue에 packet이 있으면 무조건 이 packet부터 보낸다.

high queue에 packet이 없을 때는 low priority queue에서 packet을 보낸다.

multiple class도 가능하다. 이것 또한 높은 순위의 class부터 보내준다.

2.2 Scheduling policies: Round Robin scheduling

  • class들이 여러 개 존재하고, class queue들을 스캔해서 각각 class별로 한 개씩 끝내는 것
  • 즉 클래스 돌려가면서 순차적으로 처리한다.
  • 다만 class priority가 높은 경우 여러 번 돌리고, class priority가 낮은 경우 적게 돌린다.

2.3 Scheduling policies: Weighted Fair Queuing (WFQ):

Round Robin을 조금 일반화 시킨 방식이다.

각각의 class는 한 cycle 별로 가중치가 붙은 양만큼 service를 받는다.

한 번 scan 했을 때 보내는 양이 Weight로 정해져있고 Weight가 크면 클수록 더 많이 보낼 수 있다.

Round Robin의 경우 Weight 모두 1로 같은 방식이라고 볼 수 있다.


0x03 IP 주소


3.1 인터넷 네트워크 계층

네트워크 계층의 기능 :

  • IP protocol : 주소지정
  • routing protocols : 경로설정
  • ICMP protocol : 제어기능

ICMP : Internet Control Message Protocol

3.2 IP datagram format

① Version (4 bits) : 현재 버전을 의미. 2021년 기준 ver.4

② Header Length(HLEN) (4 bits) : 32비트(4바이트) 워드 단위로 헤더 길이를 표시

  • 거의 길이 5 ( 20byte )

  • 최소 5(20 byte)부터 15(60 byte, option이 포함된 경우)의 값을 가짐

③ Type of Service(ToS) (8 bits) : 요구되는 서비스 품질을 나타냄. 현재 대부분의 시스템에서 안쓰므로 무시하자.

④ Total Packet Length (16 bits) : IP 헤더 및 데이터를 포함한 IP 패킷 전체의 길이를 바이트 단위로 길이를 표시

  • 16bit이므로 최대값은 65,535

⑤ ⑥ ⑦ 은 모두 조각화(작은단위로 자르는것)에 관련되어있다. 16비트로 나타낼 수 있는 최대 크기 즉, 216byte=65,535byte2^{16} byte = 65,535 byte가 IP 데이터그램이 가질 수 있는 최대 크기인 반면, 네트워크가 전송가능한 최대 데이터 크기인 MTU보다 큰 size의 IP 데이터그램이 도착하면 잘라야된다.(라우터가 자름) 이렇게 데이터를 자를 때 처리하는 부분이 ⑤ ⑥ ⑦ 부분이다.

쉽게 말해 MTU(약 1500byte) < IP packet일 때 이 packet을 잘라야 한다.

MTU는 protocol별로 다르다

ProtocolMTU
Ethernet1,500 bytes
hyperchannel65,535 bytes
token ring(16Mbps)17,914 bytes
token-ring(4Mbps)4,464 bytes
FDD4,352bytes
X.25576bytes
PPP296bytes

자르고 나서는 나중에 다시 패킷을 붙이기 위해 잘랐다는 표시가 필요한데, 이 표시가 바로 ⑤이다. ⑤가 같으면 원래 같았던 패킷이라는 뜻이다.

하지만 같은 패킷이었어도, 패킷의 순서에 맞게 잘렸던 패킷들을 이어붙여야 할 것이다. 이것은 ⑦이 담당한다.

⑤ Fragment Identifier (16 bits) : 각 조각이 동일한 데이터그램에 속하면 같은 일련번호를 공유함

⑥ Fragmentation Flag (3 bits) : 분열의 특성을 나타내는 플래그

  • 앞에 1비트는 안쓰고(0이라고 생각) 중간 1비트Do not fragment 즉, 중간비트가 1이면 fragment하지마라는 뜻이다. MTU보다 작다면 상관없는데 크다면 전송자체가 안될것이다. 그럼 라우터에서는 이 패킷을 폐기시키고, ICMP메시지같은걸로 니가보낸패킷은 폐기되엇다 라고 알려준다. 근데 이 중간비트도 거의 안쓴다고 생각하자
  • 마지막비트는 중요한데, More비트라고 한다. 이 비트가 1로 설정되있으면 뒤에 내 형제(?)패킷이 있다고 말해주는 역할을 한다. 패킷을 잘랐으면 첫번째 잘라진 패킷에 more비트가 1, 두번째 잘라진 패킷 more비트가 1, 마지막 잘라진 패킷의 more비트가 0이다.

⑦ Fragmentation Offset (13 bits) : 조각나기 전 원래의 데이터그램의 8바이트 단위의 위치

  • 왜 8바이트 단위냐면, ④ Total Packet Length가 65535bytes이라 offset으로는 저 total length를 표현하지 못한다. 3비트가 부족해서. 그래서 2^3을 해준 8바이트 단위로 한다.

  • e.g., MTU가 1500byte고 4000짜리 packet이 날라왔다면, 첫번째 잘라진 패킷에 offset은 0, 두번째 잘라진 패킷 offset은 1480, 마지막 잘라진 패킷 offset은 2960이 될 것이다.

⑧ TTL(Time To Live) (8 bits) : IP 패킷이 생존할 수 있는 시간

  • TCP(연결형)는 경로가 만들어져서 그 경로로 쭉 따라가는데, UDP(비연결형)나 IP는 최적경로를 찾으면서 이동한다. 그런데 경로가 자꾸 삐꾸가 나서 낙동강 오리알 패킷이 자꾸 생기면 트래픽이 늘어나 네트워크에 지장을 준다. 이런 놈들을 버리기 위해 TTL을 만든 것이다.

⑨ upper layer (8 bits) : 패킷이 최종 목적지에 도착했을 때, 상위계층의 어떤 프로토콜에 이 패킷을 전달해야 하냐를 결정. transport에 tcp에게도 줄 수 있고, udp에도 줄 수 있고, routing protocol에도, ICMP protocol에도 줄 수 있다.( ∵ routing protocol과 ICMP는 IP protocol보다 상위계층에 있다. 정확히 말하자면 Transport와 Network Layer 사이에 있다.)

  • ICMP: 1, IGMP: 2, TCP: 6, UDP: 17, ICMP: 1, OSFP: 89 etc., 를 보고 6이면 TCP에게 전달, 17이면 UDP에게 전달하는 식으로,,

⑩ 헤더 체크섬 (16 bits) : 헤더에 대한 오류검출 (재전송이 아니라 폐기를 위해 오류검출한다)

⑪ Source IP Address (32 bits) : 송신처 IP 주소

⑫ Destination IP Address (32 bits) : 목적지 IP 주소

⑬ IP 헤더 옵션 (선택옵션) (가변 길이 bits)

⑭ Padding (필요한 경우에만 사용) (가변 길이 bits)

3.3 IPv4 addressing

(1) IP addressing : 소개

IP address : 호스트, 라우터 인터페이스 를 위한 32비트 식별자

인터페이스 : 호스트/라우터와 물리 링크 사이 연결(ex. LAN카드)

  • 라우터는 여러 개의 인터페이스를 가짐 → 각각의 인터페이스마다 IP주소 가짐

  • 호스트는 보통 한 개 또는 두 개의 인터페이스. ex) 유선 이더넷, Wi-Fi

IP 주소는 각 인터페이스와 연관

  • 실제로 인터페이스는 어떻게 연결될까? ⇒ 5,6장에서 배움

host와 router 사이에 스위치가 있는 경우가 많다. 그 이유는 스위치를 사용하면 여러 개의 host가 하나의 라우터에 연결 될 수 있기 때문이다.

또 어떤 경우에는 무선 WiFi interface(공유기)를 사용해서 여러 host를 하나의 라우터의 interface에 연결하기도 한다.

중요한 것은 각각의 host가 router에 연결이 가능하다는 것이다.

(2) Classful IP Address

1980년대 초반 인터넷이 표준화 될때 영역이 고정됨.

  • Class A : 8bit (첫비트 0시작): 0~127

    • (실사용은 0과 127은 제외 함 - 루프백 주소인 127.0.0.1과 같은 약속)
    • 첫비트빼고 나머지 비트 다 가져가니 모든 IP주소의 반인데, 이는 미국이 A클래스 다 가져감,, 너무 많으니 그마저도 쓰지않고 다 버려지는 주소가 많음
    • 상위 8bit가 네트워크 영역을 나타내고 나머지 부분이 host 영역
    • host개수 : 2242=16,777,2142^{24} - 2 = 16,777,214
  • Class B : 16bit (첫비트 10시작):128~191

    • 상위 16bit가 네트워크 영역을 나타내고 나머지 부분이 host 영역
    • host개수 : 2162=655342^{16} - 2 = 65534
  • Class C : 24bit (첫비트 110시작):192~223

    • 상위 24bit가 네트워크 영역을 나타내고 나머지 부분이 host 영역
    • host개수 : 282=2542^8 - 2 = 254

각 호스트 개수에 2개씩 뺀 이유 : 시작주소(0)와 마지막 주소(255)는 각각 네트워크 주소와 브로드캐스트 주소를 나타내기 때문이다.

유니 캐스트: 송수신 주소가 각각 하나인 1:1 통신 (Class A,B,C가 유니캐스트주소)

브로드 캐스트: 모든 구성원에게 동시에 보냄, 1:ALL 통신

  • 즉, host영역에 모두 11111⋯로 주면 네트워크 모든사람에게 패킷이 다 보내짐

멀티캐스트: 1:N 통신 (Class D사용)

But, Classful 주소체계에는 몇가지 문제점이 존재

  • 대규모 네트워크에 대한 네트워크 주소가 너무 적다

    • (Class A, B정도 밖에 없다.)
  • 클래스 A, 클래스 B와 같은 대규모 네트워크에 2계층 구조(서브넷) 적합하지 않다. 라는 의미인거 같다.

netstat -rn: 라우팅 테이블

(3) 서브넷

① IP 주소

  • 서브넷 부분(상위 비트)

  • 호스트 부분(하위 비트)

② 서브넷이란?

  • IP주소의 서브넷 부분이 같은 디바이스 인터페이스
  • 중계하는 라우터 없이 서로 물리적으로 연결
  • 정리하면 Subnet은 router가 없이도 서로 packet을 송/수신할 수 있는 interface들의 집합

③ 서브넷 구성

  • 서브넷을 결정하기 위하여, 먼저 호스트나 라우터에서 각 인터페이스를 분리하여 고립된 네트워크를 만듦

  • 이 고립된 네트워크의 종단점은 인터페이스의 끝이 됨

  • 이렇게 고립된 네트워크를 각각 서브넷 이라고 함

④ 서브넷 마스크(subnet mask)

  • '/24' : 상위 24비트가 서브넷 부분임을 표시

IP주소는 네트워크 주소 부분, 호스트 부분으로 나뉘어져 있는데 그 해당하는 IP주소의 네트워크 부분을 뽑아내기 위해서 네트워크 마스크를 쓴다. 네트워크 부분을 뽑아낸다는 것은 같은 네트워크상에 있는지 아니면 다른네트워크에 있는지 알아보기 위함이다.

HOW? 네트워크 부분을 모두 11111(2)11111⋯_{(2)}로 만들고(10진수로 255), 호스트 부분을 000⋯로 만든다.(이놈을 Netmask라고 한다.) 그리고 서브넷 마스크와 해당하는 IP주소와 AND연산을 하면된다. 그래서 Class A의 netmask는 255.0.0.0이고 Class B netmask: 255.255.0.0, Class C netmask는 255.255.255.0이다.

한편, B클래스의 경우 하나의 네트워크에 약 2^16대의 컴퓨터를 가질 수 있다고 했다. 이는 6만5천대 정도인데 상식적으로 이 많은 네트워크를 다 관리하기는 엄청 빡셀것이다. 따라서 B클래스라도 추가적으로 서브넷으로 나누어서 관리하는 것이 좀 더 효율적이다. 즉, 하나의 네트워크에서 전체 호스트들을 관리하기가 힘드니까 서브네트워크로 나누어 별도의 네트워크인 것 처럼 따로따로 처리를 하는 것이 바로 서브넷이다. 이러한 서브넷 네트워크를 식별하기 위한 것이 서브넷 마스크인거고. 그래서 Network부분은 가만히 놔두고 원래 사용했던 Host부분을 또 서브넷 부분, Host부분으로 나눈다.

클래스 디폴트 네트워크 : 넷마스크 = 서브넷 네트워크 : 서브넷 마스크

로 생각하면 쉽다.

따라서 B클래스인 네트워크 168.23.a.b라는 네트워크가 있고, 원래 16비트가 host부분인데 잘게 쪼갤라고 7bit를 서브넷id로 쓰겠다라고 하면 서브넷 마스크는 255.255.254.0이 된다.

왜냐하면 11111111.11111111.11111110.00000000 이기 때문이다.

얼마나 많을까?

⑤ CIDR(Classless InterDomain Routing) == 수퍼넷

  • IP 주소의 서브넷 부분이 임의의 길이를 가짐

  • 주소 형식 : a.b.c.d/x (단, x는 주소의 서브넷 부분)

서브넷과 수퍼넷 차이: 서브넷은 Class A나 Class B같은 큰 네트워크를 받아 안에서 잘게 나눠 사용하지만, 반대로 수퍼넷은 Class C를 뭉쳐서 Class B에 가까운 형태로 사용한다. 넷마스크에서 호스트부분을 점차 줄여나가면(비트 1로주면) 서브넷이 되고, 네트워크부분을 점차 줄여나가면 수퍼넷이 된다.

(5) DHCP: 호스트는 IP 주소를 어떻게 얻을까?

  • 한 파일 내에 root계정에 의해 하드코딩됨

    • Windows: control-panel->network->configuration->tcp/ip->properties
    • UNIX: /etc/rc.config
  • DHCP : D ynamic H ost C onfiguration P rotocol:

    • 서버로부터 IP주소를 동적으로 받아온다.
      • plug-and-play 방식
    • DHCP목표: 호스트가 네트워크에 접속할 때 서버로부터 IP 주소를 동적으로 획득
      • 네트워크에 연결되었을 때만 주소를 가지므로 주소의 재사용 가능
      • 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자 지원
  • DHCP 동작 전체 개요 :

    1. Host는 DHCP 서버 발견(DHCP discover) 메시지를 널리알림(broadcast)
      • optional
  1. DHCP 서버는 DHCP 제공(DHCP offer) 메시지 응답

    • optional
  2. Host는 DHCP 요청(DHCP request) 메시지로 IP 주소 요청

  3. DHCP 서버는 DHCP ack(DHCP ack) 메시지로 IP 주소 전송

DHCP는 할당된 서브넷의 IP 주소 외에 다음 정보를 전달

  • 첫 번째 홉 라우터의 주소

  • DNS 서버의 이름과 IP 주소

  • 네트워크 마스크(주소에서 네트워크 부분 및 호스트 부분을 표시)

DHCP 예

  1. 랩탑을 인터넷에 연결하기 위해 IP 주소, 첫 홉 라우터의 주소, DNS 서버 주소가 필요 => DHCP 사용

  2. DHCP 요청이 UDP/IP/802.1 이더넷 패킷으로 캡슐화

  3. LAN 상에서 이더넷 프레임(dest:FFFFFFFF)이 브로드캐스트 되고 DHCP 서버의 라우터가 이를 수신

  4. 이더넷/IP/UDP 패킷의 캡슐을 디캡슐화하여 DHCP 서버에 전달

  5. DHCP 서버가 클라이언트의 IP 주소, 첫 홉 라우터의 주소, DNS 서버 이름과 IP 주소가 포함된 DHCP ACK 메시지 작성

  6. DHCP ACK 메시지를 패킷으로 캡슐화하여 클라이언트에 전송하고, 클라이언트는 이를 수신

  7. 클라이언트는 IP 주소, 첫 홉 라우터의 주소, DNS 서버 이름과 IP 주소를 알게 됨

3.4 NAT(Network Address Translation)

⁜ 참고: 사설 IP 주소

ClassNetidsBlocks
A10.x.x.x1
B172.16.x.x ~ 172.31.x.x16
C192.168.0.x ~ 192.168.255.x256

NAT 사용 동기(motivation)

  • 지역 네트워크(local network)은 외부 세계에로는 하나의 IP 주소만을 사용

  • 모든 디바이스에 대해 하나의 IP 주소만을 사용하여, ISP로부터 여러 개 주소를 할당 받을 필요 없음

  • 지역 네트워크에서는 디바이스의 주소를 변경하지 않고 ISP를 바꿀 수 있음

  • 지역 네트워크 내부의 디바이스들은 외부 세계에서 명시적으로 주소 지정을 하거나 노출되지 않음(보안 이점)

i) 16비트 포트번호 - 단일 LAN 측 주소로 약 6만개 동시 연결

ii) NAT에 대한 논란

  • 포트번호는 호스트 주소 지정이 아닌 프로세스 주소 지정에 사용되어야 함

  • 라우터는 계층 3까지만 처리해야 함

  • 종단간의 논의에 위반 - 호스트가 IP 주소와 포트번호 수정 없이 직접 통신해야 함

  • 주소의 부족은 IPv6로 해결

iii) NAT 횡단 문제(NAT Traversal Problem)

  • 외부 클라이언트는 10.0.0.1 서버에 연결하고자 함
  • 서버 주소 10.0.0.1은 LAN에 속한 지역 주소로 클라이언트가 목적지 주소로 사용할 수 없음
  • 외부에는 NAT 주소 138.76.29.7만 노출

해결책 1 : 정적 주소

: 특정 포트로 들어오는 연결 요청을 서버로 전달(forward)하도록 NAT를 정적으로(statically) 구성

해결책 2 : UPnP(Universal Plug and Play) 프로토콜

: 인터넷 게이트웨이 디바이스(Internet Gateway Device, IGD) 프로토콜

가까운 NAT를 발견하고 동적으로 포트 매핑을 자동 설정하는 프로토콜

해결책 3 : 릴레이(relaying)

  1. NAT의 클라이언트라 릴레이로 연결을 설정

  2. 외부 클라이언트는 릴레이에 연결

  3. 릴레이가 두 연결 사이에 패킷을 중계

  4. Skype에서 사용


0x04 라우터 외부에는??


지금까지 라우터 내부의 구조 및 동작에 대해서 배웠었는데, 이제 라우터 자체의 원리에 대해 알아보자

4.1 전달

최종 목적지까지 패킷을 전달하는 방법

I. 직접 전달(direct delivery)

  • 최종 목적지가 전달자(deliverer)와 같은 네트워크에 연결되어 있는 호스트

  • 패킷의 발신지와 목적지가 같은 네트워크에 위치

  • 최종 라우터와 목적지 호스트 사이에 수행

  • 목적지 주소에서 netid를 추출한 후 나의 네트워크 주소와 비교

    • 같으면 직접 전달 수행
  • 송신자는 목적지 IP주소를 이용하여 목적지 물리 주소를 찾아서(ARP이용) 데이터 링크 계층으로 보내어 패킷을 전달

II. 간접 전달(indirect delivery)

  • 최종 목적지가 같은 네트워크 있지 않은 호스트

  • 최종 목적지와 같은 네트워크에 연결된 라우터에 도달할 때까지 여러 라우터를 경유해서 전달

  • 목적지 IP 주소와 라우팅 테이블을 이용하여 패킷이 전달되어야 하는 다음 라우터의 IP 주소를 찾는다

4.2 전달: 포워딩(Forwarding)

Forwarding은 패킷을 목적지로 향하는 경로로 계속 옮기는 것을 의미한다. 전달하려면 라우팅 테이블을 가질 호스트나 라우터가 필요하다.

기본적으로 routing table을 사용하는데, 이 routing table에 쓰는 방법 즉, forwarding 기술은 총 4가지가 있다:

  • Next-Hop 방법
  • Network-Specific 방법
  • Host-Specific 방법
  • Default 방법

I. Next-Hop

  • 라우팅 테이블의 크기를 작게 만드는 기술 중 하나
  • 전체 경로에 대한 정보 대신 Next-Hop 주소만 저장

여기서 Hop은 라우터를 의미한다.

Destination의 IP를 Next Hop으로 주시오.

II. Network-Specific 방법

  • 네트워크에 연결된 모든 호스트에 대해 각 호스트별 엔트리 대신에 네트워크에 대한 엔트리만 저장

III. Host-Specific 방법

  • 라우팅 테이블에 호스트 주소 저장
  • 관리자가 라우팅 테이블을 제어할 때 사용
    • 경로 점검이나 보안성 제공에 매우 좋음

IV. Default 방법

Destination에는 목적지의 IP주소가 들어있는데, 이 IP주소는 약 42억개이므로 이 라우팅 테이블에 42억개를 모두 적어넣을 순 없다. 특정한 몇개만 적어넣고 이외 모두 Default로 주는 방식이다.

  • Destination의 특정 주소 몇개 제외하고, 그냥 다 Default로 R2에게 주시오.
profile
hello world :)

0개의 댓글