본문 바로가기
네트워크/컴퓨터 네트워크 수업

4-3. IP(Internet Protocol)(4)

by dustnn 2024. 11. 18.

- Overview of Network Layer

- What's inside a router

- IP(Internet Protocol) : forwarding을 위해 사용

(1) datagram format & fragmentation

(2) IPv4 addressing

(3) network address translation(NAT)

(4) IPv6

- Generalized Forwarding, SDN(Software-Defined Network)

- Middleboxes : 새롭게 생겨나는 기능들을 router의 핵심 계층으로 실을 수 없어 만드는 별도의 box


IPv6

 

: 128bit 사용

 

- 32bit IPv4 address가 모두 할당되고

- 40bit header format이 processing과 forwarding을 도움

- header가 Qos 활성화 -> "flow"에 대한 network layer의 다른 접근 허용

 

-> 2001:0000:3238:DFE1:0063:0000:0000:FEFB

-> (뒤쪽에 있는 0 생략, 앞쪽 0은 생략 불가) 2001:0000:3238:DFE1:63::FEFB

-> (앞쪽 0 많으면 줄여 표현) 2001:0:3238:DFE1:63::FEFB

 

* 4byte 고정길이 header(32+32+128+128=320bits=4bytes)

 

<header>

- flow label(20-bit): "flow" 기반으로 datagram 식별 => 같은 flow label을 달고 오면 같은 priority를 부여

- payload len: payload는 가변적이므로 길이 표시(header은 40byte로 고정 길이 가지므로 길이 표시 안 함)

- hop limit: IPv4의 "time to live"와 같은 기능

- next hdr: payload에 실린 데이터의 header가 무슨 종류인지 써줌(IPv4의 "protocol"과 비슷 기능)

* IPv4에서는 protocol field에 TCP/UDP 등등 중 어느 header를 싣고 있는지 구별

<Data>

- chain of extension headers: IPv6에서 process를 가속화하기 위해 IPv4의 "option" field 내용 넣음

- upper layer data unit의 header&payload: upper layer protocol이 들어가 있다면 그것이 무엇인지 표시,

없다면 extension header가 어떤 종류인지 표시

 

1. payload에 Upper Layer Header 내용 실린 경우

Next Header 에는 Upper Layer Header가 TCP/UDP/ICMPv6/OSPFv6 중 누군지 써줌

* TCP = 6, UDP = 17, ICMPv6 = 58  => 번호로 써줌(번호는 안 외워도 ok)

 

 

2. payload 이전에 extension header가 끼어 있는 경우

Next Header에는 첫 번째 extension header가 무엇인지 적어줌

나머지 extension header은 header 파트 밑에,

그 밑에 Upper Layer Header

 

extension header의 순서는 다음 표 order부분을 참고하면 된다.

 

** Fragment Header: IPv6는 fragmentation 진행 불가

 

IPv4 vs IPv6

 

* 노란색: 이름과 위치까지 모두 그대로인 부분

* 파란색: 이름 또는 위치가 바뀌었지만 기능은 여전히 같은 부분

* 빨간색: IPv6에서 없어진 부분

* 녹색: 새로 생긴 부분

 

주요 변화 비교하면 다음과 같다.

  IPv4 IPv6
header 길이 20byte 40byte
option field 있음 없음
"Next Header" field 씀
"Type of Service" 실제로 사용되지 않고 ECN을 위해 사용됨 "Traffic Class"로 이름 변경 => priority 부여
.. "Time to Live" "Hop Limit"
Length field 전체 total length 써줌  payload length 써줌
.. "protocol" "Next header"
Flow Label 없음 있음
fragmentation 가능 불가
너무 큰 packet 받으면 source에게
"Packet Too Big"이라는 ICMPv6 메시지 전송
+ 메시지 안에 MTU size 적어줌
** (ICMPv6는 오류 상황을 알려주는 프로토콜)
checksum 있음 없음
오류 상황이 너무 많기 때문에 차라리 end point에서 처리 => router의 processing time 줄임

 

* Flow Label: 자세한 내용은 표준안 자체에는 없고 flow&control 부분에 있음

 

 

Transition from IPv4 to IPv6

 

다음 세 가지를 사용해 IPv4와 IPv6가 호환된다.

 

- dual stack router

- NAT-PT

- Tunneling

 

IPv4에서 IPv6로 갑자기 넘어간 것이 아니기 때문에 두 개가 공존할 때 tunneling을 통해 연결된다.

dual stack router

 

맨 왼쪽에 있는 것이 server인데, IPv4를 사용하는 client와 IPv6를 사용하는 client 둘 모두와 연결 가능하다.

이때 dual stack router로 연결하는 거다. 가운데 있는 원통이 dual stack router다.

 

이 dual stack router는 ..

IPv4와 IPv6 Network 두 가지 모두의 address 가지고 있기 때문에

server와 연결할 때는 두 개의 인터페이스를 동시에 다룰 수 있는 configuration을 가지고 있다.

=> 그래서 결론은, IPv4 network에 있는 host로부터 packet이 들어오면 IPv4 형식으로 server에게 전달

IPv6 host의 packet은 IPv6 형식으로 server에 전달하는 거다.

따라서 IPv4든 IPv6든 IP version을 바꿀 필요 없이 server에 접속할 수 있다. 

보통 internet의 core가 아니라 edge에 존재한다.

 

NAT-PT

 

NAT는 outgoing packet의 header에서 IP주소/port#를 NAT의 것으로 바꿔준다고 공부한 바 있다.

하지만 NAT-PT에서는 IPv4 header를 아예 떼내고 그것을 번역한 IPv6 header를 붙여준다.

IPv4 host로부터 받으면 그걸 IPv6로 번역해 internet 세상에 내보내고

반대로 internet으로부터 IPv6가 들어오면 IPv4로 번역해 host에게 전달하는 것이다.

 

 

Tunneling

 

 

** dual stack router와 다른 점은,,

dual stack router은 IPv4, IPv6 configuration 둘 다 가지고 있는 반면

tunneling은 IPv4 Network쪽에서는 IPv4 configuration을, IPv6 Network쪽에서는 IPv6 configuration을 가지고 있는 것이다.

 

새로운 protocol이 도입되면 보통 tunneling을 사용해 연결해준다.

tunnel을 형성하면 두 IPv4 host가 소통할 때, 사이에 껴있는 IPv6의 방해를 받지 않고 원활히 소통 가능하다.

 

 

다음 예를 살펴보자.

 

두 IPv6 host가 연결되고 싶지만 중간에 IPv4 router들이 있다면,,

IPv4 network부분을 tunnel로 생각하도록 만들어주는 거다.(물리적으로는 router쌍들)

 

그러면 B는 다음 IPv4 router을 C가 아니라 E로 인식할 수 있게 된다.

* 이때 B의 왼쪽은 IPv6 interface, 오른쪽은 IPv4 interface

 

 

A->B

- flow: X

- src: a

- dest: f

 

B->C

(encapsulate)"A->B"의 IPv6 msg 내용을 자신의 IPv4 msg에 넣어 보냄. But,, src&dest만 따로

- src: b

- dest: e

 

D->E

도착

 

E->F

(decapsulate)IPv4 안에 들어있는 IPv6 msg를 꺼냄

 

* end system이 IPv4라면 IPv6 안에 IPv4

end system이 IPv6라면 IPv4 안에 IPv6

endsystem이 모두 IPv6

 

현재 IPv6가 등장한 지 30년이 다 되어가지만, 아직 IPv6를 사용하는 application은 많지 않다.

network core에까지 접근해야 하고, 너무 많은 application들이 IPv4에 기반하기 때문이다.