본문 바로가기
지식/컴퓨터네트워크

Network layer

by 칙칙폭폭 땡땡 2025. 4. 25.
반응형

Network layer

Trnasport layer에서 받은 segment를 IP 헤더를 추가해서 datagram으로 만듦

만든 다음에 내보낸다.

받는 쪽은 IP 헤더 벗기고 트랜스포트 레이어에 전달함.

모든 호스트와 라우터는 네트워크 레이어를 가지고 있다.

라우터에서는 IP 헤더 정보를 읽고 다음 목적지 라우터를 결정함 (포워딩)

네트워크 레이어의 두 핵심 기능은 포워딩라우팅

  • 포워딩
  • 라우팅

data plane

포워딩 담당

인풋의 헤더 보고 아웃풋 링크를 결정함.

실시간으로 포워딩 테이블 보고 어느 포트로 내보낼 지 결정

control plane

라우팅 담당

네트워크 전체 보고 데이터 그램이 어디 어디 라우터를 거쳐서 갈지 결정함.

전통적 라우팅

각 라우터가 자기 라우팅 테이블을 계산

SDN(software-defined networking)

분산적으로 각가의 라우터가 자기 라우팅 테이블 계산하는게 아니라, 경로 결정은 외부 컨트롤러(서버)가 맡고, 라우터는 걍 명령만 따르도록 함

Pre-router control plane

각 라우터가 독립적으로 라우팅 알고리즘을 수행하고 자신만의 포워딩 테이블을 계산

컨트롤 플레인 부분은 각 라우터로 분산되어 있고 안에 라우팅 알고리즘이 있어서 라우터들 끼리 메시지를 주고받으면서 라우팅 정보를 교환함.

이 정보를 토대로 자신의 포워딩 테이블을 계산함.

데이터 플레인은 만들어진 포워딩 테이블을 바탕으로 들어온 패킷을 즉시 어떤 포트로 나갈지 결정하고 전송

Logically Centralized Control Plane

중앙집중식 컨트롤 플레인

이게 SDN

중앙 서버가 네트워크 전체 경로를 계산함.

라우터는 자체적인 라우팅 알고리즘이 없고 중앙 서버로부터 받은 명령만 수행함.

포워딩은 컨트롤러가 포워딩 테이블을 직접 주는데 이거 보고 함.

Network service model

individual datagram

  • 반드시 보장 (손실 없도록)
  • 40ms 이하로 도착하게 보장 (지연 시간 제한)

flow of datagram

  • 순서대로 도착하게 보장
  • 이 흐름에 대해 일정 대역폭 보장
  • 패킷 간 간격이 너무 넓거나 좁아지지 않도록 조절

Router architecture overview

라우터 인풋 포트: 외부에서 패킷 받는 입구

하이 스피트 스위칭 패부릭: 라우터 내부에서 패킷을 입력 포트에서 출력 포트로 전송

라우터 아웃풋 포트: 다음 못적지로 패킷을 내보냄

라우팅 프로세스: 경로 계산. 라우팅 알고리즘 수행

컨트롤 플레인

  • 라우팅 프로세서가 위치함
  • 라우팅 테이블을 계산함 (이걸로 포워딩 테이블도 계산함. 계산해서 각각 라우터한테 줌)
  • 소프트웨어 기반이라 빠르진 않고 전체 경로 계획 담당

데이터 플레인

  • 패킷이 입력 포트 → 출력 포트로 전송되는 경로
  • 하드웨어 기반이라 빠름
  • 실시간으로 포워딩 동작을 수행

Input port functions

피지컬 레이어

  • line termination
  • 전기 신호 받아서 비트로 변환
  • 너무 로우 레벨까지나 CS 까진 아님

데이터 링크 레이어

  • link layer protocol
  • 이더넷 등의 프로토콜로 프레임을 해석
  • 링크 레이어임 내가 아는 링크 레이어

룩업, 포워딩, 큐잉

  • 도착한 패킷의 IP 헤더를 보고
  • 포워딩 테이블을 룩업해서
  • 어느 출력 포트로 보내야 할지 결정하고
  • 스위치 페브릭으로 전달
  • 만약에 스위치 페브릭이 바쁘면 큐잉

decentralized switching

입력 포트 자체에서 포워딩 테이블을 갖고 룩업하는 방식

각 입력 포트에 포워딩 테이블이 있음

중앙으로 안보내고 입구에서 바로 처리함

매치 + 액션

매치하고 바로 액션

두 가지 포워딩 방식

destination-based forwarding

아이피 주소에 기본해서 포워딩

이 아이피 주소는 저기에 있으니까 이 쪽 링크로 가야겠다.

이게 시간이 너무 걸림

generalized forwarding

헤더 필드 까보고 아이피 보고 바로 결정

Longest prefix matching

목적지 주소가 여러 항목과 매칭될 경우, 가장 긴 prefix를 선택함

포워딩 테이블을 확인하고 가장 킨 prefix 찾음

최대한 긴 걸로 찾음.

TCAM으로 한번에 한 클락에 계산할 수 있어서 엄청 빠름

Switching fabrics

스위칭 페브릭은 입력 포트에서 온 패킷을 적당한 출력 포트의 버퍼로 옮기는 통로다.

스위칭 레이트는 출력 전송 속도이다.

3 종류

  • Memory
  • Bus
  • Crossbar

Memory

패킷이 들어오면 CPU가 개입해서 시스템 메모리에 복사하고 다시 출력 포트로 복사함

근데 병렬 안되고, 바틀넥 있고 아주 쓰레기

Bus

공용 버스를 사용해서 입력 포트에서 출력 포트로 데이터를 전달

여러 개의 포트가 하나의 공유된 버스에 연결됨.

입력 포트에서 나온 패킷은 이 버스를 통해서 출력 포트로 전송됨

모든 포트가 같은 버스를 사용하기 때문에 한번에 하나의 패킷만 전송 가능함

여러 포트가 동시에 전송하려고 하면 대기 발생하고 이게 길어지면 바틀넷

Crossbar

버스 기반 방식은 대역폭이 한계였는데 이걸 극복하려고 고속 병렬 전송 가능하게 함

매트릭스 모양으로 한 입력이 동시에 여러 출력과 연결이 가능함 서로 다른 입력 출력 쌍은 병렬로 처리 가능함

⇒ 여러 패킷이 동시에 다른 출력으로 전달될 수 있음.

버스나 메모리처럼 병목이 없음

Input port queuing

스위치 내부의 페브릭이 입력 포트보다 느리면 입력 포트에서 큐잉이 발생함.

⇒ 패킷 로스 발생할 수도

⇒ 큐의 맨 앞에 있는 패킷이 전송 불가 상태면 그 뒤에도 싹 다 잼병(HOL)

빨간 패킷이 두 개 포트에서 동시에 같은 출력 포트로 가려고 함

하나만 보낼 수 있으니까 나머지 빨간 패킷은 블락됨

그런데 뒤에 있는 파란색이랑 초록색은 사실 다른 포트로 갈 수 있었는데 같이 멈춰버림

이게 HOL 블라킹

시간 지나서 조금 해결되었다고 하더라도 초록 패킷은 여전히 못 나감.

Output port

버퍼링

  • 페브릭에서 출력 포트로 패킷이 너무 빠르게 들어오면 잠시 보관할 공간이 필요함
  • 왜냐하면 출력 링크가 처리 가능한 속도보다 빨리 패킷이 들어오면 버퍼에 저장해야되니까
  • 버퍼가 꽉 차면 패킷 로스 발생
  • 이게 congestion, 버퍼 부족

스케줄링

  • 출력 포트 큐에 여러 패킷이 있을 때, 누가 먼저 나갈지 결정하는 규칙
  • 기준이 있음
  • 우선순위, 우선순위 높은 놈 먼저 처리하도록
  • 공정 큐잉, 사용자 별로 공평하게 전송하도록
  • 가중 큐잉, 더 중요한 흐름에 더 많은 비중을 부여

스위치 페브릭을 통해 출력 포트로 들어오는 패킷의 양이 해당 포트의 전송 속도보다 많으면 출력 포트에서 버퍼링이 발생함

전송을 기다리면서 큐잉 딜레이

버퍼가 꽉차면 패킷 로스

위 그림은 3개의 입력 포트에서 2개의 패킷이 동시에 같은 출력 포트로 향함

출력 포트는 한 번에 하나만 처리할 수 있음

2개는 버퍼에 쌓인다.

출력 포트가 첫번째 패킷을 보내고 나서도 여전히 대기중인 빨간 패킷이 있고 다른 초록 패킷도 같은 포트로 들어오면서 버퍼에 추가됨

그러면 버퍼의 사이즈는 어떻게 결정하냐?????????????

Scheduling

priority

  • Tail drop : 새로 도착한 패킷을 버림
  • Priority drop: 우선 순위가 낮은 패킷을 버림
  • Random drop: 임의로 패킷 하나 선택해서 버림

우선순위가 가장 높은 큐에 있는 패킷을 먼저 전송하는 방식

여러 개의 클래스(큐)가 존재함

각 클래스는 우선순위를 가진다

패킷이 도착하면 헤더를 기준으로 우선순위가 분류됨

전송할 때는 우선순위가 높은 순서로 큐를 처리함.

큐에서 우선순위에 따라서 새치기가 가능함

Round Robin

각 큐에서 한 개씩 번갈아 가며 패킷을 전송하는 방식

우선순위 기반이 아니고 모든 트래픽 큐에 공평한 전송 기회를 준다.

둥가 둥가 강강 술래

Weighted Fair Queuing

각 큐에 가중치를 줘서 비율적으로 공정하게 서비스함

모든 큐를 라운드 로빈처럼 똑같이 돌리는게 아니라 비율을 부여해서 그거에 따라서 돌림

가중치에 따라서 돌리는 것.

한 라운드에서 빨간색 @개 처리

다음 라운드에서 초록 #개 처리

그 다음에 파랑 %개 처리

Internet network layer

네트워크 계층은 크게 3가지 주요 기능

  • routing
  • forwarding
  • error report

프로토콜

  • IP protocol
  • ICMP protocol
  • routing protocol -라우팅 계산하는 프로토콜(라우팅 프로세스)

IP datagram format

소스 IP 주소: 32비트

목적지 IP 주소: 32비트

20바이트가 TCP일때 붙고, 20바이트가 IP에서 붙음

IP fragmentation, reassembly

각 네트워크 링크는 고유한 MTU가 있음.

MTU보다 큰 IP 데이터 그램은 링크를 통과할 수 없어서 작게 조각을 내야 함.

⇒ Fragmentation

큰 데이터 그램을 작은 단위로 조각 냄

라우터는 조각화가 일어날 수 있음

각 조각은 고유한 identifier, offset, fragments 비트를 가짐

조각들은 최종 목적기에서만 재조립됨. 중간 라우터는 쪼개기만하고 재조립하진 않음

IP헤더에 identifier, offset, flag 보고 조립함.

처음 length 4000 중에 20은 오버헤드 ⇒ 3980

MTU가 1500이니까 최대 1500으로 쪼갤 수 있음

프래그먼트마다 오버헤드 20씩 붙어야하니까 20 제하고 1480씩 데이터가 붙음

1480 + 20 = 1500

1480 + 20 = 1500

1020 + 20 = 1040

⇒ 4040

처음부터 40 더 붙음

IP addressing

호스트나 라우터를 식별하도록 하는걸 IP 주소라고 함

라우터는 여러 개의 인터페이스를 가질 수 있음. 인터 페이스마다 고유한 IP 주소 가짐

호스트는 보통 1개나 2개의 인터페이스

8비트씩 10진수로

총 32비트로 나타남

Subnet

서브넷은 네트워크 아래에 있는 네트워크

라우터를 통하지 않고 패킷들이 전달될 수 있는 네트워크

서브넷 구분하려면 라우터 뜯어보면 됨 (없다고 생각)

라우터 없이 데이터를 보낸다는 건 걍 나랑 연결된 모든 애들한테 다 뿌리겠다는 마인드

그래서 보안이 아주 중요함

뒤에 /24는 서브넷 마스크

이건 상위 24비트가 서브넷을 식별하는데 사용된다는 뜻

하위 8비트는 호스트 식별자로 자동으로 배정

8비트면 2의 8승으로 하나의 서브넷이 256 - 2개의 호스트를 가질 수 있음

0은 자기 자신, 255는 브로드캐스트

CIDR

Classless InterDomain Routing

서브넷 마스크의 길이를 비트 수로 표현

서브넷 마스크의 길이를 비트 수로 표현

a.b.c.d/x

a.b.c.d는 IP주소의 시작 주소

/x는 앞에 x비트까지가 서브넷, 나머지는 호스트

DHCP

Dynamic Host Configuration Protocol

AL의 프로토콜임!!!!!!!!!!!!!!!!!!!

이 녀석 덕분에 wifi 연결하면 자동으로 IP를 얻어줌

  • DHCP Discover
  • DHCP Offer
  • DHCP Request
  • DHCP ACK

DHCP는 IP주소 말고도, 기본 게이트웨이랑 DNS 서버 주소와 이름, 서브넷 마스크를 같이 보내줌

DHCP가 TL로 갈 때 UDP 사용, NL에서 IP 사용, DL에서 Ethernet 사용

마지막에 이걸 브로드캐스트

근데 서버 빼고는 이걸 다 무시함

서버는 이 정보를 demux로 받고 IP랑 이것저것 해서 mux로 보냄

정리

DHCP Discover

클라이언트는 자신에서 IP주소를 줄 DHCP 서버를 찾기 위해서 브로드 캐스트 메시지를 보냄.

이 메시지는 UDP → IP → Ethernet 순서로 캡슐화됨

DHCP Offer

DHCP 서버가 응답하여 할당 가능한 IP 주소 정보와 기타 구성 정보를 포함한 DHCP Offer 메시지를 브로드캐스트 함.

DHCP Request

클라이언트는 수신한 Offer 중 하나를 선택하고 해당 IP를 요청하는 DHCP Request를 다시 브로드캐스트 한다.

DHCP ACK

서버는 요청한 IP를 확정하고, IP 주소, 첫 홉 라우터 주소, DNS 주소, 서브넷 마스크 등을 포함한, DHCP ACK을 클라이언트에게 전송한다.

클라이언트는 결과적으로 저걸 받는다.

Hierarchical addressing

여러 오가니제이션이 하나의 ISP인 Fly-By-Night-ISP를 통해 인터넷에 연결됨

ISP는 하나의 큰 주소 블록을 가짐 (200.23.16.0/20) 이를 조직별로 서브넷으로 /23씩 나눠줌

IP Addressing

ICANN

Internet Corporation for Assgined Names and NUmbers

IP 주소 블락으로 할당해주는 곳

나라 대표가 가서 받아와서 블락으로 다시 쪼개서 하청 하청 하청~~~

이게 서브네팅

IP Subnetting

IP 주소를 어떻게 나눌까

굉장히 큰 서버넷을 원하면 (호스트가 엄청 많이 붙은)

32bit를 class로 나눠서 서브넷을 주자

class A : ~~/8: host가 2의 24승 / 맨 앞의 비트가 0 시작

class B : ~~/16: host가 2의 16승 / 맨 앞의 비트가 10 시작

class C : ~~/24: host가 2의 8승 / 맨 앞의 비트가 110 시작

호스트가 얼마나 필요할 지에 따라서 클래스를 지정해주는 것

근데 이 class based는 문제가 있다.

내가 호스트 10개만 쓸거면 class C를 받는건데 낭비가 너무 심하다

나머지 안쓰는 호스트 ip들은 걍 버려지는 것.

해결책응로 CIDR 기법

CIDR 기법

이건 명심할게, 아이피가 부족한 IPv4에서 사용한다는 것을 명심!

서브넷 마스크는 IPv4의 주소를 네트워크 부분이랑 호스트 부분으로 나누는 데 사용하는 비트 패턴을 말함

이 녀석은 어떤 조직 내부에서 네트워크를 더 작은 단위로 나누기 위해서 사용함

그리고 슬래쉬(/)로 어디까지가 네트워크 부분이고 어디까지가 호스트부분인지 마스크를 통해서 판별함.

호스트가 class C가 주는 host보다 적게 필요한 상황

그래서 IP를 아껴야 하니까 더 적게 IP를 주기 위해서 CIDR 기법으로 마지막 8비트 중에서 3 비트를 111로 설정하고 이걸 네트워크 부분을 의미하도록 함

나머지 5비트로 호스트 표현

0이랑 32는 자기자신, 브로드캐스트 니까 제외하면 30개 가능

아이피 주소랑 서브넷 마스크를 AND 연산하면 네트워크의 ID가 나옴

NAT: network address translation

IPv4 주소는 약 43억개 뿐인데, 인터넷을 사용하는 기기는 훨씬 많음

그래서 모든 기기에 공인 IP를 주는건 개에바임

내부 네트워크는 사설 IP 사용

사설 IP는 인터넷에서 직접 사용 못함.

예를 들어서 10.0.0.2가 구글에 요청을 보냄

라우터는 이 IP를 공인 IP로 바꾸고, 고유 포트 번호를 붙여 외부로 전송함

외부 서버는 138.76.29.7:포트 번호로 응답을 보냄

라우터는 응답을 다시 내부 IP인 10.0.0.2로 매핑해서 전달함.

라우터는 요청을 기억하기 위해서 NAT 테이블이 있음

내부 아이피와 내부 포트 번호를 외부 아이피와 외부 포트 번호로 매핑허도록 함.

이렇게 하면 공인 IP 절약하고 보안 잘 됨.

보안 굳

유연성 굳

근데 계속 연결 상태를 추적해야 함 NAT 테이블이 꽉 차면 트래픽이 지연될 수도?

엔드 투 엔드 통신이 어려움 IP가 중간에 바뀌니까 암호회된 패킷은 영향을 받을 수도

NAT은 기능적인 모듈임

라우터 안에서 구현된 기능

내부적으로 NAT 테이블, 포트 매핑 로직, 주소 변환 로직 등 수행하는 코드 탑재

NAT을 사용하면 하나의 공인 IP 주소로도 2의 16승 (6만개 연결을 유지할 수 있음)

사설 아이피 부족 문제를 잘 해결해줌

하지만!!!!!!!!!!!

라우터는 네트워크 레이어까지만 처리하는 장비임 (원칙적으로)

근데 포트 번호를 수정?? 이건 트랜스포트 레이어가 해야될 건데 왜 네트워크 레이어가 함?

이건 트랜스패런트 하지 않아!!!!!!!!

그래서 IPv6 등장!

이녀석은 128비트 사용

IPv6

IPv4 주소 고갈 문제를 해결하기 위해 128비트 주소를 갖는 IPv6 등장

더 이상 NAT 없이도 전 세계 모든 기기에 고유 주소 할당 가능

IPv4와 차이점은 주소의 크기!!!!!!!!!!!!!!!

ipv4는 4바이트였는데, ipv6은 16바이트

Transition from IPv4 to IPv6

전 세계 라우터를 한 번에 IPv6으로 업그레이드하는 건 불가능함.

따라서 IPv4 라우터와 IPv6 라우터가 공존하는 네트워크가 생김

이럴 때는 IPv6만 쓰는 네트워크끼리 IPv4 네트워크를 경유해야됨

근데 걍 막 통과할 수가 없음.

그래서 IPv6 데이터 그램을 IPv4 데이터 그램의 페이로드로 캡슐화해서 IPv4 네트우크를 통과하도록 함

걍 IPv6의 데이터 그램 자체가 IPv4의 데이터 그램의 페이로드로 진짜 걍 들어가는 것.

그러면 IPv4 라우터는 그냥 일반적인 IPv4 데이터 그램처럼 전달함.

이 과정을 터널링이라고 함

근데 이게 시간이 낭비가 좀 있다.

변환해야되니까!!

그리고 웬만해서는 IPv6이 되는 걸로 바꾸면 좋겠지만, 현실적으로 그렇지 않음

어찌저찌 엣지파트는 바꾼다고 해도 코어 파트는 비싸고 많고 걍 바꿔버리기가 애매함.

Generalized forwarding and SDN

SDN (software defined network)는 두 가지 평면이 있음

  • control plane
  • data plane

플로우 테이블은 중앙 집중된 컨트롤러가 계산해서 각각의 라우터에 뿌려줌.

OpenFlow data plane abstraction

OpenFlow는 프로토콜 이름

SDN 구현할 때 사용함

라우터나 스위치 같은 네트워크 장비가 중앙 컨트롤러의 지시에 따라 동작할 수 있도록 통신 규칙을 정한 표준 프로토콜

OpenFlow 컨트롤러가 장비를 제어하는 프로토콜임

플로우 테이블을 읽고, 수정, 추가, 삭제, … 해줌

기존 포워딩은 헤더에서 목적지 IP 주소만 보고 라우팅 테이블에서 경로를 선택하고 포워딩을 했음.

GF는 다양한 필드를 조합해서 판단하고 그 결과에 다라서 drop, forward, modify, send-to-controller 등 다양한 액션을 수행함.

장비별로 OpenFlow를 추상화

장비
match
action
Router
목적지 IP
특정 링크로 포워딩
Switch
목적지 MAC 주소
forward, flood
Firewall
IP 주소 + TCP/UDP 포트
허용, 차단
NAT
IP + 포트
주소와 포트 재작성

 

반응형

'지식 > 컴퓨터네트워크' 카테고리의 다른 글

Transport layer  (0) 2025.04.25
Application layer  (0) 2025.04.25
Introduction  (2) 2025.04.25