-> 블로그 이전

[Network] 네트워크 계층 : IP

2022. 2. 18. 17:57Major`/컴퓨터 네트워크

네트워크 계층 프로토콜

IP 프로토콜

- Addressing 방식 지정

- IP 데이터그램의 형식

- 패킷 Handling 방식

 

>> Data의 전송 관련 제어 프로토콜

>> Data Plane

 

라우팅 프로토콜

- Packet의 경로를 결정

  • RIP / OSPF / BGP / ....

>> Control Plane

 

ICMP 프로토콜

- Packet의 에러 보고

- 라우터의 신호 제어

 

>> 에러/신호 관련 제어 프로토콜


IP 데이터그램 형식 (IPv4)

  • 고정 헤더 : Version / Header Length / TOS(Type of Service) / Total Length / Identification / Flags / Fragment offset / TTL(Time to live) / Protocol / Header Checksum / Dest IP Addr / Source IP Addr
  • 가변 헤더 : Options
  • 페이로드 : 데이터
    • IP 데이터그램의 최소 크기 = 고정헤더 크기 = 4byte × 5 = 20byte

 

Version

- IP 데이터그램의 버전

  • IPv4 : 0x8000
  • IPv6 : 0x86DD

 

Header Length

- 고정헤더 + 가변헤더의 총 길이

  • 어디까지가 헤더이고, 어디서부터 데이터인지 파악 가능
    • Data길이 = Total Length - Header Length

 

TOS (Type Of Service)

- 페이로드의 Data가 필요로하는 서비스가 뭔지 알려주는 형식

  • 필요로하는 서비스를 통해서 해당 데이터그램의 경로 선택에 반영된다
  • 실제로 데이터그램의 목적지가 동일해도 TOS에 따라 서로 다른 경로를 통해서 목적지에 도달한다

- 실제로 사용은 거의 하지 않는다

 

Total Length

IP 데이터그램의 총 길이

  • 헤더길이 + Data길이

 

TTL (Time To Live)

- 이 데이터그램이 건너갈 수 있는 홉의 최대 크기

  • 홉을 거쳐갈때마다 TTL은 1씩 감소된다
  • 목적지 도착전에 TTL이 0이 된다면 해당 홉(라우터)가 이 데이터그램에 대한 포워딩을 멈추고 Drop시킨다

 

Protocol

- 상위 계층(Transport Layer)의 프로토콜이 뭔지 기입

  • TCP = 6
  • UDP = 17

IP 데이터그램 단편화 & 재조립 (Fragmentation & Assembly)

이 단계에서 데이터그램의 Identification / Flags / Fragment Offset 필드가 사용된다

 

- 네트워크의 Link에는 링크가 전달할 수 있는 패킷의 최대크기(MTU)가 존재한다

  • if 데이터그램의 크기 > MTU
    • 데이터그램을 분할시켜야 한다 :: 단편화 (Fragmentation)
  • 분할된 데이터그램반드시 목적지에서 재조립된다
    • 중간에 재조립 X
      • Internet에서 "복잡한 일"은 Edge로 넘기려하기 때문이다

Example)

- 데이터그램의 길이(총 길이 :: 헤더 + Data) : 4000

- MTU : 1500

  • 데이터그램 길이 > MTU이므로, 해당 데이터그램을 분할시켜야 한다

- 여기서 데이터그램의 헤더 길이는 20byte라고 가정 (Options X)

 

 

- 분할된 데이터그램 각각에 대해서 당연히 각각 길이도 달라지기 떄문에

  • Length / ID / Flags / Offset 총 4개의 필드가 변한다
  • 분할된 데이터그램 각각에 대해서도 헤더 길이는 20byte (Options X)

 

Length

1) 원본 데이터그램

- 총 길이 4000 = 헤더 길이 20 + 데이터 길이 3980

 

2) 분할 데이터그램 1

- 총 길이 1500 = 헤더 길이 20 + 데이터 길이 1480

 

3) 분할 데이터그램 2

- 총 길이 1500 = 헤더 길이 20 + 데이터 길이 1480

 

4) 분할 데이터그램 3

- 분할 데이터그램3의 데이터 길이 = 원본 데이터그램의 데이터 길이 - (분할 데이터그램 1, 2의 데이터 길이)

  • X = 3980 - (1480 + 1480) = 3980 - 2960 = 1020

- 총 길이 1040 = 헤더 길이 20 + 데이터 길이 1020

 

ID :: Identification

- 분할된 데이터그램의 ID는 원본 데이터그램의 ID와 동일해야 한다

  • 그래야 목적지에서 ID별로 구분할 수 있다

 

Fragflag :: Flags

- 분할된 데이터그램 각각에 대해서 "내 뒤에 분할된 데이터그램이 또 있다/없다"를 알려주는 Flag

Flag = 1 

- "내 뒤에 분할된 데이터그램 또 있어"

Flag = 0 

- "내 뒤에 더 이상 분할된 데이터그램이 존재하지 않아"

 

offset :: Fragment Offset

- 전체 Data중, 분할된 각각의 데이터그램의 Data는 전체의 몇번째 Data인가를 나타내는 필드

  • 8byte를 1로 간주하고 설정

  • 분할 데이터그램 1 Offset : 0
  • 분할 데이터그램 2 Offset : 1480/8 = 185
  • 분할 데이터그램 3 Offset : 2960/8 = 370

IP주소

- Host/Router 인터페이스를 위한 32bit 식별자 (IPv4)

 

▶ 인터페이스

- Host/Router ~ 물리 링크(유선/무선)사이의 연결 

  • Router는 여러 개의 인터페이스 보유
  • Host는 1개 or 2개의 인터페이스 보유 (유선/무선)


서브넷 (Subnet)

- IP주소는 서브넷 부분 / 호스트 부분으로 나눠진다

  • 서브넷 부분 : 전체 네트워크에서 각각의 서브넷을 구분
  • 호스트 부분 : 서브넷 내에서 각 Host를 구분 

- 서브넷에 존재하는 Host들라우터 없이 서로 물리적으로 연결된다

왼쪽 : 서브넷 3개 / 오른쪽 : 서브넷 6개

 

서브넷 마스크

- IP 주소에서 어디까지가 서브넷 주소인지를 표현해준다

  • '/24' : IP 주소중 상위 24비트가 서브넷 주소
  • '/30' : IP 주소중 상위 30비트가 서브넷 주소

 

CIDR (Classless Interdomain Routing)

- 원래 서브넷 주소의 비트수는 클래스마다 정해져있다

  • A 클래스의 서브넷 비트 : 호스트 비트 = 8 : 24
  • B 클래스의 서브넷 비트 : 호스트 비트 = 16 : 16
  • C 클래스의 서브넷 비트 : 호스트 비트 = 24 : 8

 

- CIDR은 클래스구분없이 서브넷 비트가 임의의 개수를 가지는 것을 의미

  • 200.23.16.0/23 = 200.23.16.0에서 상위 23bit가 서브넷 주소이다


IP주소 할당 방법

1. 개별 IP 주소를 Host에 할당

 

2. 시스템 관리자에 의해 파일에 IP주소 저장

  • 거의 고정 IP이다

 

3. DHCP (Dynamic Host Configuration Protocol) 방식 

  • DHCP로부터 Client가 동적으로 IP 주소를 할당받는다
  • Client는 인터넷에 연결할 때마다 IP주소를 DHCP 서버로부터 할당받는다

 

 

DHCP (Dynamic Host Configuration Protocol)

- Host가 네트워크에 접속할 때 서버로부터 IP주소를 동적으로 획득

- 네트워크에 연결되었을 때만 주소를 가지므로 주소의 재사용 가능

- 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자 지원 

 

>> DHCP 서버는 Client의 새로운 주소뿐만 아니라, 첫번째 홉 라우터의 주소 / 로컬 DNS 서버 이름 + IP 주소 / 네트워크 마스크까지 추가로 준다


Example)

- 223.1.2 서브넷에 새로운 기기가 들어왔다

  • 해당 기기가 서브넷에 들어와서 시스템을 키게 되면 → DHCP 클라이언트 프로그램이 자동 실행된다 → 해당 서브넷을 담당하는 DHCP 서버를 contact

 

DHCP 서버

- 일정 범위의 IP주소를 다른 클라이언트에게 할당해준다

  • 클라이언트로부터 IP 할당 요청이 들어오면 IP를 부여해주고, 할당 가능한 IP들을 관리한다

 

DHCP 클라이언트

1. 시스템이 시작하면 DHCP서버에 자신의 시스템을 위한 IP주소 요청

2. DHCP 서버로부터 IP주소를 부여받으면 TCP/IP 설정이 초기화 → 다른 Host와 TCP/IP를 통해서 통신 가능

  • 서버로부터 IP를 할당받으면 TCP/IP 통신 가능 
  •  

>> DHCP discover (Client) / DHCP offer (Server) / DHCP request (Client) / DHCP ACK (Server) 총 4개의 과정으로 이루어져있다


 

Client, Server간의 상호작용은 전부 Broadcast 주소를 통해서 이루어진다

  • 255.255.255.255 
  • 브로드캐스팅 : 네트워크에 존재하는 모든 Host에게 신호 전달

 

DHCP discover (Client)

▶ src

- Client는 아직 서버로부터 IP주소를 할당받지 않았기 때문에

  • 자신의 IP주소를 0.0.0.0으로 설정하고 discover 메시지를 보낸다
  • 메시지는 무조건 브로드캐스트 주소 :: 255.255.255.255로 보내야 한다

 

▶ dest

- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255

 

▶ transaction ID

- 이 메시지를 구별할 수 있는 ID

  • 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다

 

DHCP offer (Server)

▶ src

- DHCP 서버 자신의 주소인 223.1.2.5를 기입

 

▶ dest

- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255

 

▶ yiaddr

- Client가 사용할 주소"223.1.2.4"를 보내준다

 

▶ transaction ID

- 이 메시지를 구별할 수 있는 ID

  • 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다

 

▶ DHCP Server ID

- DHCP 서버의 주소 223.1.2.5를 기입

 

▶ Lifetime

- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다

 

DHCP request (Client)

DHCP offer를 통해서 "서버가 제공한 IP"를 request 메시지를 통해서 "Client가 사용하고 싶어요"라고 요청하는 메시지

▶ src

- offer를 통해서 자신의 쓸 IP주소를 받았지만, 아직 해당 IP주소를 쓸 수 있는지 확인응답 메시지(ACK)를 받지 않았기 때문에 아직 클라이언트에게는 IP주소가 없다

 

▶ dest

- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255

 

▶ yiaddr

- 정말 offer에서온 주소를 써도되는지 확인 용도 :: "223.1.2.4"

 

▶ transaction ID

- 이 메시지를 구별할 수 있는 ID

  • 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다

 

▶ DHCP Server ID

- DHCP 서버의 주소 223.1.2.5를 기입

 

▶ Lifetime

- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다

 

DHCP ACK (Server)

▶ src

- DHCP 서버 자신의 주소인 223.1.2.5를 기입

 

▶ dest

- 브로드캐스트의 주소로 보낸다 :: 255.255.255.255

 

▶ yiaddr

- DHCP ACK을 통해서 클라이언트에게 "223.1.2.4를 써라"라고 응답해준다

 

▶ transaction ID

- 이 메시지를 구별할 수 있는 ID

  • 같은 transaction ID를 보유한 메시지는 서로 연관있는 메시지이다

 

▶ DHCP Server ID

- DHCP 서버의 주소 223.1.2.5를 기입

 

▶ Lifetime

- 할당한 주소를 Lifetime만큼 사용할 수 있도록 Client에게 부여한다

 


DHCP request 과정

- 일단 노트북을 인터넷에 연결하기 위해서는 본인의 IP 주소 / 첫 홉 라우터의 주소 / DNS 서버 주소가 필요하다

  • DNS 서버 주소 : 통신하려는 상대의 IP 주소를 알아내기 위해서 필요

- DHCP를 사용한다

  1. DHCP request가 UDP/IP/802.1 이더넷 패킷으로 순차적으로 캡슐화된다
  2. LAN상에서 이더넷 프레임이 브로드캐스트되고 DHCP 서버의 라우터가 해당 프레임을 수신한다
  3. 서버에서 역캡슐화를 통해서 DHCP request를 해석한다

 

DHCP ACK 과정

1. DHCP 서버가 클라이언트 IP주소 / 첫 홉 라우터의 주소 / DNS 서버 이름 + IP 주소가 포함된 DHCP ACK 메시지를 작성한다

2. DHCP ACK 메시지를 패킷으로 캡슐화해서 클라이언트에게 전송하고, 이 패킷을 클라이언트가 수신한다

3. 결과적으로 클라이언트는 원하는 결과인 클라이언트 IP주소 / 첫 홉 라우터의 주소 / DNS 서버 이름 + IP 주소를 알게된다