항공대학교 최차봉 교수님의 강의를 참고하여 작성하였습니다
<IPv6>
IPv6는 왜 고안되었을까?
: 기존의 IPv4의 32bit로는 자원 고갈의 문제가 있기 때문에, 이를 늘리고자 고안함.
+ IPv6는 프로세싱 속도도 증가하고, forwarding 도 금방금방 할 수 있음.
+ Header를 40byte로 고정함으로써 QoS(Quality of Service)를 높임
+ Source와 Destination 에서만 Fragmentation을 처리하고, 중간 라우터에서는 하지 않음.
만약 너무 큰 Datagram이 오면 Error msg를 반환하고 통신하지 않는다.
IPv6의 Datagram format을 IPv4와 비교하여 살펴보자.

ver
에는 IP의 version이 들어간다. IPv4 or IPv6
priority
는 감이 잘 오지 않아 검색을 해보니..
- IPv4일때의 TOS 필드와 유사
. IP 패킷 마다 서로다른 서비스 요구사항을 구분하기 위함
. 따라서, 민감한 실시간 응용 및 긴급하지 않은 데이터 패킷 간의 차별적 구분 가능
TOS는 type of service를 말한다. 전화/영상과 같은 스트리밍 형식의 데이터인지, 텍스트 형식의 데이터인지를 구분하는 것 같다. 오키
flow label은 IPv4에서의 ID와 비슷한 역할을 한다. 결국 그 데이터 패킷들이 한 식구인지를 판단하는 기준이다.
payload len는 말그대로 페이로드 부분의 길이로, 기본 헤더를 제외한 IP 데이터그램의 길이를 나타낸다.
next hdr는 IPv4 에서의 upper layer와 비슷한 의미지만, 사실 차이점이 분명하다. 1,6,17 까지는 ICMP, TCP, UDP를 나타내는 기준이었다고 하지만, 44와 58, 그리고 59까지도 표현이 가능하다는 점. 즉, 앞서 말했듯이 IPv6에서는 Source와 Destination에서 fragmentation 처리를 해야하여 확장이 팔요한데, 이를 next hdr에서 관리하는 것이다.
IPv6에서는 next hdr가 upper layer + header 확장 까지도 관리한다.
hop limit는 IPv4에서의 TTL과 같은 역할이다.
Source & Destination address 는 각각 128bit, 16byte로 총 32byte의 크기를 차지하고, 위의 헤더들을 다 합치면
4 + 4 + 16 + 16 byte로 총 40byte의 header로 크기가 고정되어있다.
IPv4와의 차이점을 다시 한번 짚어보자.

1. checksum이 사라졌다
이로써 발생하는 현상으로는 Error check를 헤더에서 하지 않는다 -> Error는 link layer/transport layer에 맡김-> 이로써 전송 처리 속도 증가
2. Option
IPv6도 옵션을 사용할 수는 있다. 이는 확장 헤더 형태로 사용을 하고, 이 확장 헤더는 기본 헤더에 포함되지 않고, 위 그림처럼 별도의 구조로 이어진다. 어떤 확장 헤더가 뒤에 오는지는 IPv6 dataformat의 기본 헤더의 next hdr 필드가 알려준다.
3. Fragmentation 처리
: 오직 Source/Destination 에서만 처리한다
<IPv4 -> IPv6>
이 과정을 결국 해야 IPv6를 사용할 수 있는 것인데,, 사실상 한계가 존재한다. 일단 이 변화를 emigration (이주) 라고 표현한다.

일단 처음 고안된 아이디어는, 몇일을 정해놓고 그 날짜동안 업데이트를 진행하자! 라는 의견이었는데 이건 사실 현실적으로 불가능하다. 그렇게 진행하게 되면 그 짧은 몇일동안 전세계 사람들의 네트워크가 마비되고 결국 flag days가 오게 된다. 그냥 불가능함
그래서 고안된 방법이 바로 -> tunneling
이는 IPv4 datagram을 보낼적에 IPv6 datagram을 쏙 넣어서 보내는 것이다. 예를 들어, 차를 끌고 섬에 가고 싶을때, 배에 나의 차를 싣고 이동하는 것을 상상해보면 된다.
Tunneling은 다음과 같이 이루어진다.

결국 이렇게 IPv4와 IPv6가 공존해야 한다는 것이다. 현재 A -> B -> C -> D -> E -> F 로 데이터를 보내는 과정에서, C와 D 라우터는 IPv4를 지원하기 때문에 IPv6가 지나갈 수가 없는 상황인데, 이 때 IPv6를 IPv4로 감싸서 보내면 C,D를 통과할 수 있게된다. 이 과정 자체가 터널링 인 것이고, IPv6는 IPv4 안에 캡슐화되었다고 할 수 있겠다.
+ C, D 처럼 IPv6, IPv4를 둘 다 처리할 수 있는 구조가 바로 Dual Stack 이다. 동시에 두 스택을 유지하여 통신한다.

2010년 부터 IPv6의 변경을 시작해왔지만, 현재 10년이 넘게 지난 지금도 변경이 더디다. 그냥 매우매우매우 오래걸릴 것이다.
<ICMP>
: Internet Control Message Protocol
ICMP 는 네트워크 정보를 주고받기 위한 프로토콜로 이도 ICMPv4, ICMPv6가 존재한다.

네트워크 통신간에 에러가 났거나, request/reply를 다시 찍어주는 역할을 한다고 한다.
이는 Network-Layer 위에 존재하는 IP인데, 그렇다고 Trasnport Layer는 아니다. 결국 ICMP는 Network-layer위에 존재하면서도 Layer 3에 속해있다고 볼 수 있다.
오른쪽 타입과 코드에 따라 ICMP의 의미가 달라지는 것을 알 수 있다. 파란색 칠해진 것들만 좀 살펴보자.
0 0 -> reply 를 찍어줌
3 3 -> 포트가 인식되지 않을 때의 시그널
8 0 -> request 를 찍어줌
11 0 -> TTL 이 0 이 되는 시점의 시그널

이러한 ICMP의 특징을 이용해 Traceroute를 확인할 수 있다. Traceroute는 End-system 에서 출발해 특정 라우터에 도달했다가 다시 End-system으로 돌아올 동안 걸리는 시간을 의미한다.
이를 확인할때는 Layer 2 로 UDP를 사용하며, 몇번째 라우터에 도달할 것인지를 TTL 설정을 통해 조정할 수 있다. ( TTL = 1 이면, 한 홉을 지나고 나서 TTL Expired 처리 되므로 한 라우터만 찍고 다시 돌아오게 된다. )
만약 n번째 라우터에 도달했는데 TTL 이 0이 되면, 그 자리에서 라우터는 datagram을 버려버리고 host로 ICMP를 날린다 ( 11 0 )
이 메세지에는 라우터의 이름과 IP 주소가 담긴다.
결국 이 방법으로 RTT(Round Trip Time) 을 알 수 있게 되는 것이다.
그렇게 TTL을 1씩 증가시켜 원하는 라우터까지 도달 했을 때, ICMP가 (3 3) 코드의 ICMP를 보내면 "아~ 목적지까지 잘 도달했구나" 라는 것을 알 수 있게 되는 것이다.

앞서 설명했듯이 ICMPv4와 ICMPv6가 존재하는데, ICMPv4가 앞서 설명했던 버전이었고, 이와 ICMPv6가 다른점은
"패킷이 너무 크면 ICMP가 Error 메세지를 보낸다" 는 것이다. 그 후 Datagram은 보내지 않는다.
다음 포스팅에서는 그토록 고대하던 Routing Algorithm 에 대해 포스팅하겠습니다. 화이팅 하십쇼들!
'CS > 네트워크' 카테고리의 다른 글
| [네트워크] Network Layer(3) - IPv4 (1) | 2025.05.26 |
|---|---|
| [네트워크] Network Layer - (2) IP가 뭔데요 (2) | 2025.05.26 |
| [네트워크] Network Layer - (1) 라우터 구조가 뭔데요 (0) | 2025.05.22 |
| [네트워크] Network Layer - (1) VC가 뭔데요 (0) | 2025.05.22 |