[Computer Network] - IPv6

오현석·2024년 10월 3일
1

Computer Network

목록 보기
9/25

IPv6

기존이나 웹에서는 IPv4 버전을 사용한다. 그러나, IPv4 버전은 사용 가능한 주소의 개수가 고갈되었고, 헤더의 길이가 20바이트부터 60바이트까지 가변적이라는 특징이 있다. 처음 IPv4 버전을 사용했을 때보다 지금은 host의 개수가 훨씬 많아져서 IPv4에서 사용 가능한 주소가 고갈되었다. 또한, 헤더의 길이가 가변적이면 라우터에서는 헤더를 다 열어서 어떤 옵션이 있는지 없는지 다 확인해야 한다. 특히 옵션들이 들어가면 헤더가 복잡하니까 옵션을 처리하고 확인하는 것으로 인해 라우터의 성능이 좀 떨어질 수 있고 Fragmentation도 시행하면 더 성능이 떨어지게 된다.

그래서 사실 이제 Fragmentation은 라우터가 시행하진 않는다. 그렇다고 Fragmentation을 아예 하지 않는 것은 아니고 Sender에서 보낼 때 Fragmentation을 해서 보낸다. Sender는 다른 네트워크들의 MTU는 모르기 때문에 일단 자기 네트워크 MTU만큼으로 보낸 다음에 에러 메세지가 들어오면 다시 MTU를 낮춰서 보내는 식으로 적절한 MTU 값을 찾는다. 이를 MTU Discovery라고 한다. 그러나 이 Discovery도 오버헤드이기 때문에 표준으로 1280이라는 표준을 만들어서 MTU가 최소 1280은 넘도록 표준을 정했다.(이더넷에서는 MTU가 1500이다.)

IPv6는 주소가 IPv4에 비해 굉장히 많이 늘어났다. IPv4는 32bit로 주소를 표현하는 반면, IPv6는 128bit로 주소를 표현하기 때문에 2^128개만큼의 주소를 할당할 수 있다. 또한, 헤더를 단순화 시켜 헤더의 길이를 40Byte로 고정시켰고, 굳이 라우터가 처리하지 않아도 되는 옵션은 Bypass할 수 있게 해서 성능을 올렸다. 그외에는 인증이나 암호 기능을 추가하고 Flow label을 사용했다.

IPv4 VS IPv6

다음은 IPv4의 헤더이다.

여기서 HL는 IPv6에서는 40Byte로 고정되었으니 삭제했고 Service Type은 이름을 바꾼 상태로 다시 등장한다. Id, Flags, Fragment Offset은 Fragmenation을 위한 헤더들인데 이는 라우터의 성능을 저하시킬 수 있으므로 삭제되었다.
Checksum도 삭제되었다. 기존에는 헤더의 값을 다 더하고 1의 보수를 취해서 계산했어야 했는데 이 연산이 성능을 떨어뜨리기 때문에 기존 Checksum에 1만 더해서 계산하는 방식으로 변했다고 했다. 그러나, 이렇게 하는 것은 큰 의미가 없기 때문에 Network layer가 아닌 Transport layer에서 하는 걸로 위임하고 여기서는 삭제시켰다.

이제는 IPv6의 헤더를 살펴보자.

IPv6는 총 40Bytes의 헤더 길이를 가진다.

  • Class : 기존의 Service Type과 유사
  • Flow label : 새로 추가된 필드이다.
  • Payload length : TL과 같다. 총 길이를 의미한다.
  • Next Header : 기존 Protocol과 같다.
  • Hop Limit : 기존 TTL과 같다.
  • Address : 주소가 128bit로 훨씬 길어졌다.

이렇게 기본 헤더의 길이는 40bytes로 고정시켜놨고, 옵션이 필요한 경우에는 뒷쪽의 Payload 앞 부분에 추가되게 된다.

저 Extension headers를 보고 라우터는 라우터에게 들어온 패킷을 라우터 본인이 처리하지 않아도 되는 패킷이다라는 것을 판단할 수 있다. 이렇게 되면 라우터는 해당 패킷을 처리하지 않아도 되서 전체적인 성능이 좋아진다.
예를 들어, Fragment이 되었다는 Fragment Hdr이 붙어있다고 했을 때, 라우터는 기존과 달리 자신이 추가적으로 해야할 작업이 없으므로 바로 그냥 패킷을 보내주면 된다.

다음은 IPv6의 Next Header Field의 값들이다.

옵션들은 거의 사용하지 않긴 한다. Fragmentation에 대해서는 앞에서도 설명한 것처럼 Source에서 이미 Frag를 시켜서 보낸다고 말했고, MTU값을 찾는 법도 미리 설명했었다. 또햔, Source Routing 헤더는 Strict한 방식인지 Loose한 방식인지에 대해 선택할 수 있게 한 것이다.

IPv6 Address Architecture

IPv6도 IPv4와 유사하다. 한 인터페이스는 여러 주소를 가질 수 있지만, 한 주소를 여러 인터페이스가 가질 수 없다는 내용도 동일하다. 또한, 주소는 Link local Address와 Global address가 있는데, 이 Link local은 동일한 네트워크의 특정 host 주소를 말하는 것이고, Global은 전체에서 사용하는 주소를 말한다.

IPv6는 16진수로 주소를 표현한다. 이때, 주소가 길어지는 것을 축약하기 위해 0074와 같이 되어있다면 그냥 74라고 표시하거나, 더 축약한다면 연속적으로 0이 붙어있을 때 이 0들은 하나의 비워진 공간으로 표시할 수도 있다. 이때, 공간을 비우는 방식은 한 주소에서 1번만 사용이 가능하다. 여러 번 사용하면 중간에 0이 몇 개 생략되었는 지를 알 수가 없기 때문이다.

역시 /60과 같이 CIDR 주소를 사용해서 네트워크가 얼마나 있다라는 것도 표기해준다.


한편, IPv6는 IPv4와 용어가 조금 달라진다. IPv4에서는 Network id와 Host id라고 불렀던 내용들이 IPv6에서는 Prefix와 Interface ID라고 불린다.

IPv6 주소 종류

Global unique address

Local address

1111 110으로 시작하는 주소는 Unique한 Local unicast block이다. 8번째 비트가 0이면 locally, 1이면 authority라는 의미이다.

Link local한 주소는 1111 1110 10으로 시작한다. 이 주소는 같은 네트워크에 패킷을 보내주기 때문에 라우터를 더 이상 거치지 않는다.

Unique Local unicast addres는 IPv4에서의 Private address와 같고, Link local address는 라우터를 통과하지 않고 해당 host의 링크 내에서만 통신한다.

Anycast address

같은 주소를 써도 사용자에게 가장 가까운 위치로 할당해주는 주소들을 말한다. 예를 들어, 어느 프렌차이즈 음식점의 대표 전화로 전화를 걸면 나와 가장 가까운 매장의 전화로 연결해주는 것을 Anycast 방식이라고 하고 이 주소를 Anycast address라고 한다.

Reserved addresses

1. Unspecified Address
0:0:0:0:0:0:0:0 라는 주소로 사용된다. 이 주소는 임시 주소로 IP를 할당받기 전에 잠깐 사용하는 주소이다.
2. Loopback address
0:0:0:0:0:0:0:1이라는 주소로 사용되고 IPv4의 127.0.0.1처럼 밖으로 나가지 않고 장치 안에서 다시 Loopback 되는 주소이다.
3. IPv4-mapped IPv6 address
v6안에 v4를 넣어서 보내는 방법이다.

여전히 v4를 사용하는 host가 많기 때문에 v6안에 v4를 넣어 통신할 수 있게 하는 방법으로 0::FFFF:xxxx:xxxx로 구성된다. 여기서 xxxx:xxxx가 16bit로 IPv4의 주소가 들어가게 된다.

ICMPv6

기존 IPv4에서는 ICMP를 사용한 반면, IPv6에는 ICMPv6를 사용한다. ICMPv6은 기존 ARP와 IGMP, ICMP를 모두 포함하는 버전이다.

ICMPv6의 종류

기존 ICMP에 해당했던 Error messages와 Query message가 이름만 바뀐 Informational messages, ARP를 의미하는 Neighbor discovery messages와 IGMP를 의미하는 Group membership messages가 포함되어 있다.

Error-reporting messages

Error messages를 먼저 보면 기존 IPv4와 비교햇을 때 Source quency가 삭제되고 Packet too big가 생겼다. Packet too big은 MTU Discovery를 위한 항목이다. MTU를 넘어가는 패킷 크기를 보낸다면 이 메세지를 다시 보내준다. 나머지는 동일하다.

Query Message

여기서도 Echo와 Router solicitation은 동일하지만, Timestamp와 Address mask가 삭제되었다. 이 두 항목은 어차피 동적이면 DHCP에서 알려주고 정적이라면 solicitation에서 알려주기 때문에 필요가 없어졌다. 대신 그 자리에 ARP에 해당하는 Neighbor와 IGMP에 해당하는 Group이 들어왔다.

Address autoconfiguration

IPv6의 가장 큰 특징이다.

이 기능은 Host가 DHCP 서버가 없이도 자동으로 주소를 설정할 수 있는 기능이다. 기존 IPv4에서는 DHCP 서버를 통해서 IP를 할당받고 인터넷에 접속했는데, IPv6에서는 DHCP를 사용하는 Stateful autoconfiguration 뿐만 아니라 사람과 DHCP 서버의 도움 없이도 혼자서 주소를 할당할 수 있는 Stateless autoconfiguration을 지원한다.

Stateless Autoconfiguration

Stateless autoconfiguration의 순서는 다음과 같다.

  1. MAC 주소를 사용하여 자신만의 link local address를 만든다.
  • link local address는 처음 64bit가 정해져있다. 이후 64bit를 MAC 주소를 사용해서 만들어 128bit로 만들어버린다. 이때, MAC 주소는 48bit이기 때문에 중간에 FFFE를 넣어 64bit로 늘려서 가공한 후 붙인다.
  1. 이 link local address를 마치 자신의 주소가 아닌 것처럼 네트워크에 Broadcast해서 현재 이 주소를 사용 중인 host가 있는 지ARP를 사용해서 확인한다. - 이를 DAD(Duplicate Address Detection)이라고 부른다.
  2. 이 주소를 사용 중인 host가 있다면 주소를 바꿔서 다시 2번 과정을 거치고, 없다면 라우터가 가끔씩 Broadcast하게 advertise하는 네트워크의 주소를 받아 Link Local 값을 넣어두었던 자리에 네트워크 주소(Prefix & SubnetId)를 넣어 자신의 최종 주소를 완성한다.
profile
다함께 성장하는 개발자 세상을 꿈꾸는 MLOps 엔지니어입니다😁 작성 당시 제 생각의 흐름을 독자 모두가 공감하고 이해할 수 있게 적으려고 노력합니다. 조언이나 질문은 언제든 환영입니다!

0개의 댓글