본문 바로가기
네트워크

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

by Lizardee 2023. 11. 26.
Network Layer: Internet
Network Layer: Internet
  1. Application layer
  2. Transport layer
  3. Network layer
  4. Link layer
  5. Physical layer

Network layer에서는 여러 프로토콜이 동시에 동작한다.
 
▶ Path-selection algorithm
: forwarding table을 만드는 프로토콜

  • Routing protocols (OSPF, BGP): + routing algorithm --> routing table --> forwarding table (전통적인 방법)
  • SDN controller: control server - router CA --> forwarding table

 
▶ IP protocol
: Data와 관련된 프로토콜
 
▶ ICMP protocol
: Router에서 Host로 오류 메시지를 보내기 위한 프로토콜
 
 
 

4.3.1 IPv4 데이터그램 포맷
IPv4 데이터그램 포맷
  • fragmentation/reassembly를 위한 bit가 32 bits 통으로 존재한다!

 

IPv4 Fragmentation, Reassembly
IPv4 Fragmentation, Reassembly

IP datagram이 source host에서 router를 거쳐 destination host로 이동하는 과정이다.
문제는, 이때 MTU(Max Transmission Unit)의 크기가 달라질 수 있다는 것이다.
 
예를 들어, Ethernet frame은 1,500 byte를 지원하는데, 어떤 wide-area link에서는 576 byte만을 지원한다고 하자. MTU가 작아졌다. Fragmentation을 해야 한다!
이렇게 fragmentation된 IP datagram은 중간에 intermediate router에서 reassemble되지 않고, 목적지 host에서 reassemble된다.
 
그리고 만약 어떤 fragment가 lost됐다면, Network 계층에서는 전체 fragment를 그냥 drop한다. (Network - Internet은 best effort이기 때문이다.) 그리고 Transport 계층의 TCP가 이를 recover한다.
 

IPv4 Fragmentation at Router: Example
IPv4 Fragmentation at Router: Example

보내야 하는 datagram의 길이는 4000 byte인데, MTU가 1500 byte라고 가정하자.
따라서 이 큰 datagram은 3개의 fragment로 쪼개진다.

  • length: Fragment의 길이는 1500 byte인데, 이 중 20 byte는 고정 길이 헤더이고, 나머지 1480 byte가 data이다.
  • ID: ID는 같은 datagram임을 나타내야 하므로, x로 같다.
  • fragflag: fragflag가 1이면, 뒤에 따라오는 나머지 datagram이 있음을 나타내고, fragflag 값이 0이면, 그것이 마지막 datagram임을 의미한다.
  • offset: (앞선 fragment의 데이터 길이/8) 값을 적는다. 그리고 이 값은 누적되므로, 나중의 fragment에는 앞선 offset을 누적해줘야 한다.

 

Fragmentation: Example
Fragmentation: Example

2400 byte의 datagram을 보내야 하고, MTU는 700 byte라고 가정하자.
2400 byte의 datagram 중 20 byte는 헤더, 나머지 2380 byte가 데이터이다.
MTU가 700이므로, (2380/700 = 3.xx). 따라서, 4개의 fragment가 필요하다.

  • Total datagram length: 700 bytes
  • ID: 같다.
  • Frag.Flag: 마지막은 0, 나머지는 1
  • offset: (680/8 = 85)를 누적해서 적는다.

 


4.3.2 IPv4 주소체계

IP 주소 addressing에 대해 배울 때는, 전체 IP 주소가 부족하다는 것을 꼭 기억해야 한다. 예전에 비해 device 수가 늘어남에 따라, 필요한 IP 주소 개수가 늘어났기 때문이다.
 

IPv4 Addressing: Introduction
IPv4 Addressing: Introduction

IP 주소는 device마다 할당된다고 많이들 생각하지만, 사실 router와 host의 interface에 할당되는 것이다.

  • Router는 보통 multiple interface를 가지고 있다.
  • Host는 보통 하나 또는 두 개의 interface를 가지고 있다: Ethernet, wireless WiFi

▶ dotted-decimal IP address: 8비트를 10진수로 표시한다.
 
Q. 그렇다면 이러한 interface들은 실제로 어떻게 연결되어 있을까?
A. link layer에 연결되어 있다: Ethernet switches, WiFi base station

  • Wired Ethernet interfaces: connected by Ethernet switches.
  • Wireless WiFi interfaces: connected by WiFi base station.

 

Subnets
Subnets

▶ Subnet
: Device interfaces with same subnet part of IP address can physically reach each other without intervening router.
--> 즉, router의 개입 없이 연결된 인터넷의 집합이다.
 
▶ IP address structure: subnet part + host part

IP address structure: subnet part + host part

--> IP 주소는 subnet part와 host part로 나뉘어 있기 때문에, subnet part를 subnet mask로 표현해준다.

  • 같은 subnet에 속하면, subnet part를 서로 공유한다.

 

IPv4 addressing

IPv4 addressing 방법에는 subnet part의 길이를 미리 정해놓는 방식과, 가변 길이를 이용하는 방식(CIDR)이 있다.
 

IPv4 careful addressing
IPv4 careful addressing

이 방법에서는 class를 5가지로 구분하고, first high bits 몇 개를 이용하여 class를 식별할 수 있도록 한다.
A class의 경우, subnet part가 8 bit이다. 따라서 A class에 속할 수 있는 주소의 수는 적고, A class 내에서는 다양한 주소를 생성할 수 있다. 따라서 subnet 규모가 큰 경우, A class를 이용한다.

  • Number of Networks = 2^(subnet part - 1) - 2
  • Hosts per Network = 2^(32 - subnet part) - 2

이러한 고정 길이 subnet part 방식은, 주소의 낭비가 심하다는 단점이 있다. 예를 통해 그 이유를 설명하겠다.
C class의 경우, subnet의 규모가 너무 작다. 반면 B class의 경우, subnet 규모가 크다. 사용자 입장에서는 subnet 규모가 큰 것이 모자라는 것보다는 나으므로, 주로 B class를 자주 이용한다. 하지만 이 거대한 B class의 subnet은 종종 사용되지 않는다. 즉, 낭비되는 것이다.
 

IPv4 careless addressing: CIDR

따라서 대안으로 제시된 방법이 CIDR 방법이다. 
이 방식에서는 subnet part의 길이를 가변 길이로 설정한다. 따라서 아래와 같이 subnet part를 표시해 주어야 한다.

IPv4 careless addressing: CIDR

 

CDIR example

 

CDIR example

 


IP addresses: how to get one?

그렇다면, 이러한 IP 주소는 어떻게 얻을까?
 
Q1. host는 network 내에서 어떻게 IP 주소를 얻을까?

  • hard-coded by system admin in a configuration file. 
  • DHCP (Dynamic Host Configuration File)

Q2. Network는 어떻게 IP 주소를 얻을까? (subnet part of address)
 
 

IP addresses: How does host get IP address?

▶ hard-coded by system admin in a configuration file.
 
 DHCP (Dynamic Host Configuration File)
: host가 server에서 일시적으로 쓸 IP 주소를 받아오는 방식이다.

  • 이때, client와 server 모두 well-know port 번호를 이용한다.

 

DHCP (Dynamic Host Configuration File)

: Host가 network로부터 IP 주소를 dynamic하게 받아온다.
--> IP 주소의 재사용이 가능하고, mobile user에게 유리하다.
 
 DHCP overview: 4개의 message

  1. Client: host broadcast DHCP discover message. (optional)
  2. Server: DHCP server responds with DHCP offer message. (optional)
  3. Client: host requests IP adddress -- DHCP request message
  4. Server: DHCP server sends address -- DHCP ack message

 

DHCP client-server scenario
DHCP client-server scenario
  1. DHCP client: DHCP discover - DHCP server 거기 있니?
  2. DHCP server: DHCP offer - 이 IP 주소를 써보는게 어때?
  3. DHCP client: 좋아, 나 그 주소 쓸게!
  4. DHCP server: 그래, 이 주소 너꺼 해.

 

DHCP: more than IP addressing

DHCP는 IP 주소 이외에도 다른 정보들을 보내준다.

  • DNS server의 IP 주소
  • Address of first-hop router (default gateway) for client
  • Network mask (subnet part)

 

DHCP: example
DHCP: example
  1. DHCP client가 DHCP server에게 DHCP request를 broadcast한다.
  2. DHCP server가 DHCP ACK으로 응답한다.

이때, DHCP ACK에는 client의 IP 주소뿐만 아니라, 
name and IP address of DNS server, IP address of its first-hop router를 포함한다.
 


IP address: how to get one subnet part?

Host는 기관에 의해 IP 주소를 제공받는다. 
이때 host가 IP 주소를 제공받는 방법에는, 시스템에 의해 수동으로 제공받는 hard-coded 방법과 host가 일시적으로 쓸 주소를 받아오는 DHCP(Dynamic Configuration Protocol) 방법이 있다.
 
Q. 그렇다면 기관은 어떻게 IP 주소의 subnet part를 받아오는 것일까?
A. Gets allocated portion of its provider ISP's address space! 즉, ISP가 기관에 주소를 할당한다.

ISP가 기관에 주소를 할당한다.

예를 들어, 하나의 ISP의 subnet part가 20-bit라고 하자. 
이러한 ISP가 8개의 기관에게 IP 주소를 할당하려면, 23-bit의 subnet mask를 할당해주어야 한다. (8개의 기관 각각을 식별하기 위해서는 2^3개가 더 필요하기 때문)
이때, 이러한 ISP가 제공한 subnet part의 공통된 부분 20을, common network prefix라고 한다. 그리고 이 common network prefix를 통해 ISP는 "이러한 first 20-bit을 가지는 것은 나에게 보내줘."라고 이야기할 수 있다. 그리고 이 때는 route aggregation이 이용된다.
 

Hierarchical addressing: route aggregation
Route aggregation

Route aggregation에 대해 자세히 알아보자. 두 개의 ISP가 있는 상황이다.
 
Fly-By-Night-ISP와 ISP-R-US는 각각 200.23.16.0/20, 199.31.0.0/16이라는 common network prefix를 가지고 기관에게 IP 주소를 할당했었다. 
그런데 기존에는 Fly-By-Night-ISP 관할의 기관이었던 200.23.18.0/23을 ISP-R-US 관할 기관으로 변경하려고 한다. 이때는 ISP-R-US에 200.23.18.0/23 을 할당하면 된다. 원래 200.23.18.0/23은 Fly-By-Night-ISP 의 기관이었고, 겹치는 부분이 있지만, route aggregation은 longest prefix matching을 하기 때문에, 200.23.18.0/23과 더 많이 겹치는 ISP-R-US가 이를 관할하게 된다.
 

Longest prefix matching
Longest prefix matching

Longest prefix matching이란, 가장 길게 matching되는 ISP가 그 기관을 관할하게 된다는 원칙이다.
 

Route aggregation: Example
Q8
Q9

4개의 기관을 식별하기 위해서는 2 bits가 추가되어야 한다.
64를 이진수로 변환하면 01xxxxxx이다. 2 bits가 추가되었으므로, 
- 0100xxxx
- 0101xxxx
- 0110xxxx
- 0111xxxx
각각의 subnet에게는 이렇게 4개의 prefix가 할당된다.
 


IP addressing: last words...

Q. 그렇다면 ISP는 어떻게 주소 block을 할당받아 기관에게 IP 주소를 제공할 수 있는 것일까?
A. ICANN(Internet Corporation for Assigned Names and Numbers)에서 5개의 RR(regional registries)를 가지고 ISP에게 주소 block을 할당해준다.

  • 이때 ICANN은 주소 block 할당 기능 뿐만 아니라,
    manages DNS root servers including delegation of individual TLD management, 
    assigning domain names,
    resolving domain name dispates.

 
Q. ISP는 20-bit의 common prefix part를 받아, 총 32-bit의 IP 주소를 생성한다. 이러한 32-bit만으로 이 세상의 모든 interconnection을 식별할 수 있는 것일까?
A. IP 주소 block이 고갈되었다... 더 이상 ISP에게 줄 주소 block이 없다!

  • Sol 1) NAT: IP 주소 block을 받은 ISP를 통해 로컬 사이트가 각각의 IP 주소를 갖는 것이 아니라, 그냥 IP 주소 하나만 받아서, 그 하나를 잘 나눠쓴다. (private address)
  • Sol 2) IPv6: 128-bit address space

 


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

NAT을 이용하면, Iocal site에서 각각의 IP 주소를 할당받는 것이 아니라, IP 주소 1개를 나눠 쓴다.
 

NAT(Network Address Translation)
NAT(Network Address Translation)

NAT-enabled router는 IP 주소 block이 아닌 하나의 IP 주소를 할당받고, local network는 이 하나의 IP주소를 나눠쓴다.
Local network들은 내부에서는 private IP address로 서로 구분된다. 외부에서는 NAT-enabled router로부터 받은 하나의 IP 주소를 가지고, port 번호들로 구분된다.

  • 16-bit port number filed --> 2^16개를 구분할 수 있다.

 

How NAT works
How NAT works
  1. outgoing datagrams: (source IP address(private IP 주소), port #) --> (NAT IP address, new port #)
  2. NAT translatation table: (source IP address, port #) --> (NAT IP address, new port #) 무엇을 무엇으로 바꿨는지 기억한다.
  3. remote host는 (NAT IP address, new port #)로 응답한다.
  4. incoming datagrams: NAT translation table에 있는 정보를 이용해, 다시 사설 IP 주소로 변환한다.
    : (NAT IP address, new port #) --> (source IP address, port #) 

 

Motivation & Advantages of NAT
  • Just one IP address is needed from provider ISP for all devices.
  • Can change address of host in local network (사설 IP 주소) without nofiying outside world. (외부에서는 NAT-address만 알면 된다.)
  •  Can change ISP without changing addresses of devices in local network. (NAT-address만 바꾸면 된다.)
  • Security: devices inside local network is not directly addressable, visible by outside world.

--> Management가 간단하다!
 
 

NAT is controversal
  • Rouuters should only process up to layer 3. --> NAT violates the principle of end-to-end connectivity (port number manipulation by network-layer device) originally envisioned in the design of the Internet.
  • Port numbers are used for addressing processes, not for addressing hosts.
    NAT uses port # for addressing hosts. --> server로 동작 불가능, P2P 참여 불가능

--> NAT은 자주 사용되기는 하지만, 결과적으로 IP 주소의 부족 문제는 NAT이 아니라, IPv6로 해결되어야 한다.
 
 

UPnP IGD
UPnP IGD

▶ NAT에 대한 해결책: IGD (Internet Gateway Device) protocol
: IGD 프로토콜은 host가 private IP 주소를 할당받을 필요가 없도록, IGD를 통해 NAT router와 직접 연결한다.
 
 

NAT traversal techniques

: NAT에 대한 해결책

Relaying

▶ Relaying
: host들은 통신하기 전에 relay server에 먼저 connection 요청을 하여, NAT translation table에 WAN side address를 만들어 놓는다. 그리고 host들은 이 relay server를 통해 통신한다.
 

Connection reversal

▶ Connection reversal
: 한 쪽의 host만 NAT 뒤에 있는 경우 사용할 수 있는 방법이다. NAT 뒤에 있는 Peer B가 미리 Peer C에 NAT translation table을 만들어놓고, 이를 이용하여 Peer A와 Peer B가 직접 통신한다.
 


4.3.4 IPv6

NAT에서는 IP 주소의 부족 문제를 해결하기 위해 여러 개의 local network에서 하나의 IP 주소를 나눠 쓰는 방식을 이용하였다. 하지만 IPv6는 IP 주소 자체를 늘림으로써, 이 문제를 해결한다.
 

IPv6: motivation

: IP 주소 확장!
 
▷ Additional motivations:

  • 고정 길이 헤더 --> speed up (IPv4: 가변 길이 헤더)
  • 헤더에 "flow" 추가 --> QoS  서비스

 

IPv6 addressing

: 128-bit addressing 

  • IPv4: 32-bit addressing --> 8-bit를 묶어서 10진수로 표현하였다.
  • IPv6: 128-bit addressing --> 16-bit를 묶어서 4자리 16진수로 표현하였다.
IPv6 addressing

 

IPv6 datagram format
IPv6 datagram format
  • ver: 버전
  • Pri: datagram flow 사이의 priority
  • flow lable: datagram이 어떤 flow에 속하는지 식별한다.
    IPv6의 경우, router에서 fragmentation이 일어나지 않는다. MTU가 바뀌면 fragmentation을 하지 않고 그냥 drop한다. "다시 보내!"
  • payload len: 고정 길이 헤더를 사용하기 때문에, payload의 길이만 표시한다.
  • next hdr: 어떤 data field로 전송되는지 표시한다.
  • hop limit: hop count
  • source address (128 bits)
  • destination address (128 bits)
  • Data: chain of extension headers + upper layer header + payload

 

Changing Extension Headers in IPv6 Packets
Changing Extension Headers in IPv6 Packets
  • next hdr에는 어떤 data field로 전송되는지를 표시한다.
  • Data에서의 chain of extension headers에는 뒤에 오는 헤더의 종류를 표시한다.
    --> destination에서 fragmentation을 reassemble할 수 있도록 한다.

 

IPv4 vs. IPv6
IPv4 vs. IPv6

▶ IPv6:

  • 고정 길이 헤더
  • router에서 fragmentation하지 않는다.

 


Transition from IPv4 to IPv6

32-bit 주소 체계를 가지는 IPv4의 IP주소 부족 문제를 해결하기 위해 IPv6가 등장하였다. 하지만 모든 IPv4가 IPv6로 대체된 것은 아니다.
따라서 이렇게 서로 다른 주소 체계를 가지는 router들의 통신을 위해서는, transition from IPv4 to IPv6가 필요하다.

1) Dual Stack
1) Dual Stack

▶ Dual stack router
: Server는 IPv4와 IPv6 둘 다에 대한 traffic을 가지게 된다. 
--> 별도의 transition없이, IPv4 client, IPv6 client 모두와 통신이 가능하다.
 

2) NAT-PT (NAT-Protocol Translation)
2) NAT-PT

▶ NAT enabled device
: Server와 Host 사이의 translation을 해 주어, 서로 다른 주소체계(IPv4, IPv6)를 가진 server와 host가 통신할 수 있도록 해준다.
 

3) Tunneling
3) Tunneling

▶ Tunnel
: 최종 client와 server의 주소체계는 같은데, 중간에 주소체계가 바뀔 때, tunneling 기법을 이용한다.

  • 두 IPv6 network는 tunneling을 통해 중간의 IPv4 network를 통과할 수 있다.

 

Transition from IPv4 to IPv6: tunneling

IPv6 client network와 IPv6 server network가 통신을 하려고 한다. 그런데 중간에 IPv4 network가 있다. (core 부분)
--> tunneling!

  • IPv6와 IPv4가 바뀌는 부분, 즉 진입부와 진출부 router에 tunnel이 생긴다.
  • tunnel 이전 부분에서는 IPv6 datagram만이 존재한다. IPv6 datagram header의
    - source: 기존 source
    - destination: 최종 destination
  • tunnel 이후에는 IPv4 datagram 안에 IPv6 datagram이 encapsulate된다. IPv4 datagram header의
    - source: tunnel의 시작 부분
    - destination: tunnel이 끝나는 부분
  • IPv4 network를 다 통과하여 tunnel이 끝나면, 진출부 router에서 IPv4 datagram을 떼어낸다.

 

IPv4 header, IPv6 header - source, destination

: tunneling하는 동안 IPv6는 IPv4 안에 encapsulate되고, tunneling이 끝나면, IPv4가 떼어진다.

  • IPv6 datagram 입장에서 보면, IPv4 looks like a link layer.

 

Via tunneling, IPv4 looks like a link layer to IPv6 datagram.

: IPv6가 link-layer fram에 encapsulate되는 것과, tunneling에서 IPv4 datagram에 encapsulate되는 과정은 거의 똑같다.
--> Via tunneling, IPv4 looks like a link layer to IPv6 datagram.
 
 

IPv6: adoption

: IPv4에서 IPv6로 많이 바뀌기는 했지만, 바뀐 것은 주로 edge 부분이고, 아직 core 부분은 IPv4인 경우가 많다.
--> Edge의 주소체계가 IPv6로 동일하다 하더라도, core 부분을 통과하기 위해서는 tunneling이 요구된다.
 
 
 
 
 
 
출처: 이화여자대학교 이미정교수님 컴퓨터네트워크