본문 바로가기
COMPUTER SCIENCE/Network

[Network] Network Layer:The Data Plane - IP(Internet Protocol)

by 민트맛녹차 2023. 1. 26.

IPv4 Datagram Format

datagram header 에는 다음과 같은 값들이 존재한다.

  • Version number :IP protocol 의 version. IPv4 인지 IPv6 인지 알려주며 다른 version 의 IP 는 다른 datagram formats 을 사용함. 4 bits
  • Header length : IP header 의 길이. 4 bits
  • Type of service (TOS) : TOS bits 는 다른 종류의 IP datagrams 를 구분하도록 한다. 특히, real-time datagram 과 non-real-time traffic 을 구분할 때 유용하다.  
  • Datagram length : bytes 로 측정된 IP datagram 의 총 길이. 16bits 이므로 이론적인 maximum size 는 65,535 bytes 이지만, Ethernet frame size 에 때문에 1,500 bytes 가 넘는 경우가 드물다.
  • Identifier, flags, fragmentation offset : IP fragmentation 에 사용되는 fileds 이다. 참고로, IPv6 는 fragmentation 을 허용하지 않는다.
  • Time-to-live (TTL) : TTL filed 는 datagram 이 network 를 영원히 순회하는 것(zombie packet)을 막는다. datagram 이 router 를 통과할 때마다 1 씩 작아지며, TTL 이 0 인 datagram 은 drop 된다. 
  • Protocol : IP datagram 이 final destination 에 도착했을 때 사용되며, IP datagram 의 data portion이 가야 할 특정한 transport-layer protocol 을 알려준다. 예를 들어, 6 은 TCP 를 가리키며 17은 UDP 를 가리킨다.
  • Header checksum : router 가 받은 IP datagram 의 bit error 를 감지하는데 도움을 준다. 
  • Source and destination IP addresses : source 가 datagram 을 생성할 때, source 의 IP address 를 source IP address field 에 넣고, 최종 목적지의 address 를 destination IP address field 에 넣는다. source host 는 destination address 를 DNS lookup 을 통해결정한다. 
  • Options : options fields는 IP header 가 확장 가능하도록 한다. 고려할 사항이 많아져 잘 쓰이지 않는 필드로, IPv6 에서는 포함되지 않는다. 
  • Data (payload) : 대부분의 상황에서, IP datagram 의 data field 는 transport-layer segment 를 포함한다. 하지만 data field 는 ICMP message 같은 다른 종류의 data 를 가질 수 있다. 

 

IPv4 Datagram Fragmentation

link-layer protocol 마다 담을 수 있는 network-layer packets 의 크기가 다르다.예를 들어, Ethernet frames 는 data 를 1,500 bytes 까지 담을 수 있고, 어떠한 wide-area links 의 frames 는 576 bytes 까지 담을 수 있다. link-layer frame 이 담을 수 있는 data 의 최대 양을 MTU(Maximum Transmission Unit) 라고 부른다.이때, router 사이의 link 들이 다른 link-layer protocol 을 사용하는 문제가 발생한다.

해결법은 oversized IP datagram 을 둘 이상의 작은 IP datagram 으로 쪼개고, 각각 분리된 link-layer frame 으로 캡슐화하여 outgoing link 를 통해 보내는 것이다. 쪼개진 작은 datagram 을 fragment 라고 부른다.

fragments 들은 destination 의 transport layer 에 도착하기 전에 reassemble 되어야 한다. datagram reassembly 작업은 network router 아 아닌 end system 에서 이루어진다. destination host 가 reassembly 작업을 할 수 있도록, IP header 에는 identification, flag, offset field 가 있다. datagram 이 생성되면, sending host 는 identification number, source address, destination address 를 사용해 datagram 을 만든다. router 가 datagram 을 fragment 할 때, 기존 datagram 의 src address, dest address, identification number 를 사용해 fragment 를 만든다. 따라서, 같은 datagram 의 fregments 는 같은 identification number 를 가지게 된다. IP 는 unreliable service 이므로, 하나 이상의 fregments 가 destination 에 도착하지 않을 수 있다. destionation host 가 original datagrma 의 last fragment 를 확인할 수 있도록, last fragment 의 flag bit 는 0 이고 다른 fragment 의 flag bit 는 1 이다. 또한, destination host 가 fragments 의 순서와 fragments 의 실종 여부를 확인할 수 있도록 offset field 가 사용된다.

 

예를 들어 4,000 bytes 의 datagram 이 router 에 도착하여 1,500 bytes MTU 의 link 에 forward 되어야 한다고 하자. datagram 은 위의 그림처럼 3 개의 fragments 로 fragmentation 된다. 3 개의 fragments  는 동일한 origin datagram 을 가지므로 identification number 가 같다. 마지막 fragment 의 flag bit 는 0 이고 나머지 fragments 의 flag bit 는 1 이다. 첫 번째 fragment 의 offset 은 0 이다. 두 번째 fragment 의 offset 은 첫 번째 fragment 의 payload 인 1480 을 8 로 나눈 값인 185 가 되는다.  세 번째 fragment 의 offset 은 두 번째 fragment 의 offset 과 두 번째 fragment 의 payload 인 1480 을 8 로 나눈 값인 370(185 + 185) 가 된다.

 

IPv4 Addressing

IP address 는 32 bits (4 bytes) 로 2^32 (약 4억) 개의 IP address 가 가능하다. IP address 의 예로 193.32.216.9 가 있다.

host/router 와 physical link 사이의 경계를 interface 라고 한다. router 는 보통 여러 개의 interface 를 가지고 있다. 모든 host 와 router 는 IP datagrams 를 보내고 받을 수 있으므로, IP 는 각각의 host 와 router 의 interface 에 고유한 IP address 가 있어야 한다. 따라서IP address 는 host 나 router 가 아니라 interface 와 기술적으로 연결된다.

global internet 의 모든 host 와 router 의 interface 는반드시 globally unique 한 IP address 를 가진다. interface 의 IP address 의 일부는 연결되어있는 subnet 에 의해 결정된다.

 

Subnet

위 그림의 예를 보면, 한 router 가 7 hosts 와 연결되어있다. 왼쪽 위의 3 hosts 와 연결된 router interface 는 모두 223.1.1.xxx 형태의 IP address 를 가진다. 즉, IP address 의 왼쪽 24 bits 가 모두 같다. 또한 이 4 개의 interfaces 는 router 없이 network 로 연결되어 있으며, 이 network 는 Ethernet LAN 이나 wireless access point 에 의해 연결된다. 이렇게 router 의 개입 없이 직접적으로 연결된 network 를 subnet 이라고 한다.

IP addressing 은 이 subnet 에 subnet mask 라고 불리는 address 를 할당한다. /24 (slash-24) notation 은 32 bit 중 왼쪽 24 bit 가 subnet address 를 정의한다고 알려준다. 위에서 언급한 subnet 의 subnet mask 는 223.1.1.0/24 이다. 223.1.1.0/24 subnet 에 추가될 host 는 223.1.1.xxx 형태의 IP address 가 필요하다. 

참고로 subnet 은 router interface와 hosts 의 network 뿐만아니라, router interface 들의 network 도 포함한다. 위의 그림에서는 router interface 와 hosts 로 이루어진 3 개의 subnet 과 한 쌍의 router interface 로 이루어진 3 개의 subnet 이 존재하여, 총 6개의 subnet 이 존재한다.

 

CIDR

Internet 의 address 할당 전략인 CIDR (Classless Interdomain Routing) 은 subnet addressing 의 개념을 일반화 한다. 32-bit IP address 는 subnet part 와 host part 두 part 로 나뉘고 a.b.c.d/x 의 형태를 가진다. 이때 x 는 subnet part 의 길이를 나타내며 prefix (network prefix) 라고 불린다. 예를들어 200.23.16.0/23 의 경우 bit 로 표현하면 '11001000 00010111 00010000 00000000' 이다. prefix 23에 의해 subnet part 는 '11001000 00010111 0001000' 이 되고 host part 는 '0 00000000' 가 된다.

 

organization 의 subnet 을 위한 IP addresses 의 block 을 얻기위해 network administrator 는 ISP 를 접축하면, ISP 는 이미 ISP 에 의해 할당된 보다 큰 addresses 의 block 에서 address 를 제공해준다.

예를들어, ISP 가 이미 address block 200.23.16.0/20 을 할당받았다고 하자. ISP 는 차례로 address block 을 8 개의 같은 크기의 address block 으로 나누어 ISP 에 의해 지원되는 8 organizations 에 나누어 준다. 추가로 ISP 에 직접 address block 을 가져오는 방법도 있다.

 

DHCP

organization 이 address block 을 얻는다면, organization 의 host 와 router interface 로 개개인의 IP addresses 를 할당할 수 있다. host address 는 수동적으로 설정될 수 있지만, 보통 DHCP(Dynamic Host Configuration Protocol) 를사용한다.

DHCP 는 host 가 network 에 연결되면 network server 로부터 동적으로 IP address 를 얻을 수 있게 한다. network administrator 는 DHCP 를 설정하여, host 가 네트워크에 연결될 때마다 같은 IP address 를 받도록 하거나 네트워크에 연결될 때마다 다른 temporary IP address 를 받도록 할 수 있다. 추가로 host 에게 subnet mask, gateway(IP address of first-hop router), local DNS server의 IP address 와 name 같은 정보를 알려줄 수 있다. 

DHCP 는 client-server protocol 이다. client 는 보통 network configuration information 을 얻기 원하는 새로운 host 이다. 가장 단순한 경우는 각각의 subnet 에 DHCP server 가 있는 상황이다. 만약 subnet 에 DHCP server 가 없다면, network 를 위한 DHCP server address 를 알고있는 DHCP relay agent (보통 rotuer) 가 필요하다.  위 사진의 예를 보면, DHCP server 는 223.1.2/24 에 있고, subnet 223.1.1/24 와 223.1.3/24 에 붙는 clients 는 router 가 중계해 준다.

새롭게 host 가 도착하면 DHCP protocol 은 4 단계의 process 를 거친다. 참고로, yiaddr(your internet address) 은 새로 도착한 client 에 할당되는 address 이다. 

  • DHCP server discovery : host 가  DHCP discover message 를 broadcast address 를 통해, subnet 에 있는 모든 node 에 전달하여 DHCP server 를 찾는다. 
  • DHCP server offer : DHCP server 가 DHCP discover message 를 받으면 DHCP offer message 를 subnet 의 모든 node 에게 보내 client 에게 응답한다. 
  • DHCP request : clinet 는 하나 이상의 server offers 중 하나를 선택해, DHCP request message 를 보내 선택된 offer 에 응답한다.
  • DHCP ACK : server 는 DHCP ACK message 를 사용해 DHCP request message 에 응답한다.

 

Network Address Translation (NAT)

Private Network and Public Network

private network 는 일반 가정이나 회사의 pirvaet IP address 로 구축된 네트워크이다. pirvate IP address 는 라우터에 의해 로컬 네트워크상의 PC 나 장치에 할당된다. unique 하지 않고 외부접근이 불가능하다. private ip 의 종류로 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 가 있다.

public network 는 인터넷과 같은 공공 회선에 액세스 할 때 global/public IP address 로 구축된 네트워크이다. public IP address 는 인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP 가 제공하는 IP 주소이다. unique 하며 외부접근이 가능하다. 

 

home network 내의 devices 들은 10.0.0.0/24 addressing 을 사용해서 packets 을 주고받을 수 있지만, home network 를 넘어 더 큰 global internet 을 향한 packets 은 이러한 addresses 를 사용할 수 없다. private adddress 는 home network 에서만 의미가 있기 때문에, global internet 으로부터 packet 을 보내거나 받을 때는 NAT 을 사용한다.

NAT router 는 outside world 에 single IP address 를 가진 single device 처럼 행동한다. 따라서, local network 는 outside world 에서 보기에는 한 개의 IP address 를 사용하며 home network 의 세부사항들을 숨긴다. 위 그림을 보면, home router 를 떠나 larget internet 으로 가는 모든 traffic 은 138.76.29.7 source IP address 를 가지고, home router 로 들어오는 모든 traffic 은 138.76.29.7 의 destination address 를 가진다. 

WLAN 에서 NAT router 에 도착한 모든 datagram 은 같은 destination IP address 를 가지게 되는데, NAT router 는 NAT translation table 을 사용하여 datagram 은 internal host 에게 전달한다. NAT translation table 에는 IP address 와 port number 이 기록된다. NAT 의 과정은 다음과 같다.

  1. NAT router 가 home network 에서 datagram 을 받으면, datagram 의 source address 인 (source IP address, port number) 은 (NAT IP address, new port number) 로 교체되어 전송된다.
  2. (source IP address, port number) 와 (NAT IP address, new port number) 의 translation pair 들은 NAT translation table 에 저장된다.
  3. NAT router 에  destination field 가 (NAT IP address, new port number) 인 datagram 이 도착하면, NAT router 는 NAT table 을 인덱싱 하여 저장된 (source IP address, port number) 을 사용해 datagram 의 destination address 를 변경한다.

 

IPv6

32-bit address space 가 빠르게 사용됨에 따라, 더 큰 IP address 의 필요성에 의해 IPv6 protocol 이 개발되었다. 

IPv6 Datagram Format

IPv6 의 중요한 변경사항은 다음과 같다.

  • Expanded addressing capabilities : IPv6 는 IP address 의 크기를 32 bits 에서 128 bits 로 늘려 IP address 부족을 해결했다. IPv6 는 새로운 종류인 address 인 anycast address 를 사용해 datagram 이 hosts 의 그룹 중 하나에 전달되록 해준다.
  • A streamlined 40 byte header : fixed-length 40 byte header 는 router 가 IP datagram 를 빠르게 처리할 수 있게 해준다.
  • Flow labeling : IPv6 는 flow 라는 개념을 정의하여 사용한다. flow 는 "sender 가 special handling 을 요청하는 특정한 flows 에 속하는 packets 을 labelling 하는 것" 이다. 예를 들어, auido 와 video transmission 은 flow 로 다루어지지만, file transfer 와 e-mail 은 flow 로 다루어지지 않는다. 

IPv4 에서는 존재하지만 IPv6 에서 더 이상 존재하지 않는 fileds 는 다음과 같다.

  • Fragmentation/reassembly : IPv6 는 더이상 intermediate router 의 fragmentation 과 reassembly 를 허용하지 않는다. 만약 IPv6 datagram 이 outgoing link 로 보내기 너무 크다면, router 는 단순히 datagram 을 drop 하고 "Packet Too Big" ICMP error message 를 sender 에 보낸다. sender 는 더 작은 IP datagram size 를 사용해 data 를 다시 보낸다. Fragmentation 과 reassembly 는 시간은 많이 쓰는 작업이므로, 이를 제거하여 IP forwarding 의 속도를 올렸다.
  • Header checksum : transport-layer 와 link-layer protocl 에서 checksum 을 제공하므로 다소 불필요하다. header checksum 이 제거되어 각각의 hop 의 처리 시간을 줄일 수 있게 되었다.
  • Options : IP header 에서는 제거되었지만, next header 에 의해 허용될 수 있다.

 

Transitioning from IPv4 to IPv6

모든 router 들이 동시에 IPv4 에서 IPv6 로 교체되는 것은 불가능하다. 보편적으로 채택된 IPv4-to-IPv6 transition 접근은 tunneling 이다. tunneling 은 IPv6 node 가 IPv6 datagram 을 IPv4 datagram 의 payload 로 담아 IPv4 node 로 보내는 것이다. tunnel 의 receving side 에 있는 IPv6 node 는 IPv4 datagram 을 받으면, IPv6 datagram 이 포함되있는 것을 확인하고 추출한다.

 

 

 

참조
Computer Networking _ A Top Down Approach, 7th, converted
https://www.tabmode.com/windows10/private-public-network.html

댓글