4. Network Layer (Data Plane) (2)

728x90
반응형

(3) IP : Internet Protocol

네트워크 계층의 구조

네트워크 계층의 구조는 위 그림과 같다.

위로는 Transport Layer, 밑으로는 Link Layer가 있다.

Network Layer의 역할은 2가지가 있다. Routing과 Forwarding

라우터들이 링크로 연결이 되어있는데, 이 링크의 규격이 똑같지가 않다. 어떤 때에는 규격이 크고, 어쩔 때는 작다. 그래서 MTU(Maximum Transmission Unit)이 있다.

· MTU : 네트워크에 연결된 장치가 최대로 받아들일수 있는 최대 데이터 패킷 크기

큰 MTU를 가진 링크를 들어갈 때는 문제가 없지만, MTU가 작아서 Bottle neck이 일어나는 구간이 존재한다고 해보자. 그러면 할 수 없이 이 datagram을 쪼개줘야 한다. 이렇게 datagram을 쪼개주는 것을 fragmentation이라고 한다.

그리고 쪼개준 datagram을 목적지에서 합쳐주는 것을 reassemble이라고 한다.

예를 들어, 4000 byte인 datagram이 있다고 해보자.

그런데 링크가 1500 byte의 MTU를 가진다. 그러면 이거를 3개로 쪼개야 하는데, 하나의 datagram은 20 byte의 오버헤드를 가진다. 그러므로 1500 byte를 가지고 왔지만 오버헤드인 20 byte를 뺀 1480 byte만 가지고 온다.

또한 8 byte가 1 offset이므로 2번째 datagram의 offset은 1480/8 = 185가 된다.

마지막 datagram에는 4000 - 2(1500 - 20) = 1040 byte가 남아 있게 된다.

IP version4는 IP address를 32 bit로 정의한다.

각각의 호스트와 라우터의 인터페이스에는 32 bit 짜리 IP address를 할당한다.

· 인터페이스 : 호스트/라우터와 Physical 링크를 연결해주는 랜카드 같은 것

그럼 이 IP address는 어떻게 할당될까?

원래는 위 사진의 오른쪽 아래와 같이 11011111.... 처럼 표현을 해야한다. 그런데 이렇게하면 기억하기 힘드니까 8 bit씩 4덩어리로 쪼갠다. 그 뒤, 이 덩어리를 10진수로 부여한다.

그런데 10진수로 변환한 값들도 기억하기 힘드니까, DNS을 통해 자연어로 변환한다.

Subnet : 라우터를 제거했을 때, 섬처럼 고립되어있는 local area network를 의미한다. 즉, 라우터 없이 통신할 수 있는 네트워크 영역

이 IP address는 subnet 파트와 host 파트로 나뉜다.

즉, 233.1.1.1같은 address가 있을 때, subnet 파트를 결정해서 어느 subnet인지를 결정하고 host 파트를 이용해서 subnet 안의 구체적인 host를 찾아가는 것이다.

왼쪽이 subnet 파트 오른쪽이 host 파트를 나타낸다.

그러면 addressing을 어떻게 할 것인가를 정의해보자.

전형적인 방법이 바로 CIDR 이다.

즉 주소의 형태가 a.b.c.d/x 의 형태로 나타나지는데, 여기에서 x비트 만큼의 숫자가 subnet 파트가 되는 것이라는 것을 의미한다.

예를 들어, 200.23.16.0/23 이라고 써있으면 11001000 00010111 ... 라는 address가 있으면 앞에서부터 23번째 비트까지가 subnet 파트이고 그 뒤가 host 파트라는 것을 의미한다.

그렇다면 어떻게 각 디바이스에 유니크한 IP address를 붙여줄까?

예전에는 고정 IP를 써서 직접 내가 쓸 IP 주소를 써서 사용했다.

하지만 요즘에는 DHCP(Dynamic Host Configuration Protocol)을 사용한다.

즉, IP 주소를 고정으로 사용하지 않고 비어있는 IP주소 중 하나를 자동적으로 할당해주는 것이다.

예를 들어, 내가 노트북을 들고 카페를 갔다 해보자.

그리고 내가 카페의 와이파이 연결을 누르면, DHCP 서버가 알아서 IP 주소를 할당해준다.

DHCP는 서브넷에 IP 주소 뿐만 아니라 다른 것들도 준다.

· 클라이언트와 가장 가까운 라우터 정보

· DNS 서버의 IP 주소와 이름 (클라이언트의 다음번 컨택은 DNS 서버이므로)

· 네트워크 마스크

ICANN(Internet Corporation for Assigned Names and Numbers)

(프로토콜이 아니라 협회 이름이다.)은 다음과 같은 역할을 한다.

· 주소들을 할당

· DNS 관리

· 도메인 네임 할당 등등

NAT(Network Address Translation; 네트워크 주소 변환)

NAT이 동작하는 라우터 안의 호스트들을 하나의 local network로 생각하는 것이다.

NAT을 사용하는 이유는 IP4에서 IP 주소도 이제 부족해지니까, 조금 더 효율적으로 사용하기 위해 local network에 있는 호스트들의 IP 주소는 NAT 라우터의 IP 주소로 치환을 하자.

대신 라우터의 유니트한 포트 넘버를 통해 각 호스트들에게 패킷을 전송해주는 것이다.

즉, local network안에서는 기존 방법대로 각 호스트들이 유니크한 IP 주소를 갖는다. 대신 호스트들이 보낸 패킷이 라우터를 통과하는 순간 호스트의 IP 주소는 사라지고 NAT이 동작하는 라우터의 IP 주소로 바뀐다. 대신 각 호스트들에게 유니크한 포트 넘버를 붙여주고 그 테이블을 라우터가 갖고있다.

즉, NAT을 통해 하나의 IP 주소로 굉장히 많은 호스트들을 관리할 수 있게 된다.

· datagram이 밖으로 나갈 때 : 원래 호스트들의 (source IP 주소, 포트 넘버)를 (NAT IP 주소, 유니크 포트 넘버)로 바꾼다.

· 라우터는 NAT 테이블을 기억한다 : 모든 (source IP 주소, 포트 넘버)와 (NAT IP 주소, 유니크 포트 넘버)를 기억한다.

· datagram이 들어올 때 : (NAT IP 주소, 유니크 포트 넘버)로 돌아오면 저장되어 있던 테이블에 따라 (source IP 주소, 포트 넘버)로 다시 바꿔준다.

그림으로 NAT 과정을 봐보자.

  1. 먼저 10.0.0.1, 3345의 IP 주소를 갖는 호스트가 datagram을 보낸다.
  2. 라우터를 통과하면서 NAT이 일어난다.

local area network의 해당 주소(10.0.0.1, 3345)는 밖(wide area network)으로 나갈 때, 다른 주소(138.76.29.7, 5001)로 변환되서 나간다. 이때, 해당 테이블을 라우터가 기억해놓는다.

3. 밖에 있는 애는 변환된 주소(138.76.29.7, 5001)만 알고 있으므로, 해당 주소를 destination으로 설정되서 보낸다.

4. 라우터는 테이블에 따라 다시 원래 IP 주소로 변환시켜서 해당 호스트에게 데이터를 건내준다.

IPv6(version 6)

IPv4와 비교했을 때, 4배(128비트) 주소 공간을 가진다. 또한 QoS 등 추가적인 header 정보들이 추가된다.

그래서 40 byte의 헤더로 구성되어있다.

그런데 하루 날 잡고 인터넷 전부 스탑시키고 하루만에 IPv4에서 IPv6로 업그레이드 하는 것은 불가능하다.

그래서 IPv4와 IPv6의 라우터가 혼합되어있다.

이렇게 혼합되어 있는 환경에서 통신을 하기위해 tunneling을 한다.

즉, IPv4의 데이터그램 안에 Ipv6의 데이터그램이 임베디드 되는 것이다.

예를 들어, 위와 같이 IPv6로 갔다가 IPv4인 라우터가 존재하면 저 구간을 터널링을 하는 것이다.

즉 A-B로 갔을 때는 IPv6의 데이터로 가다가 B-C 구간은 IPv4안에 IPv6의 데이터그램을 encapsulate한 뒤, 터널을 빠져나가면(E라우터)에서 decapsulate해서 original data가 최종 목적지에 도착하게 한다.

4.4 Generalized Forward and SDN

위에서도 설명했다 시피, 기존에는 control plane과 data plane이 tight하게 묶여져 있었다.

SDN은 이 control plane과 data plane을 느슨하게 묶는 것이다.

라우터들은 라우터 별로 패킷이 들어왔을 때, 어디로 forwading할 것인지를 정하는 flow table이 들어가있다. 기존에는 라우터 별로 독자적으로 계산했다면, SDN은 지역적으로 중심화된 컨트롤러가 계산을 한 뒤, 각 라우터들에게 뿌려주는 형식으로 동작하는 것이다.

이 플로우는 헤더에 있는 필드 값들에 의해서 결정된다.

일반적인 포워딩은 simple packet-handling rule에 의해서 결정되는데, 이 규칙은 pattern, action, priority, counters에 의해서 결정된다.

· pattern

헤더 필드 값을 보고 이 값들이 실제로 패턴이 맞는지 보는 작업

· action

패턴에서 일치 여부를 확인한 후, drop, forwading, modify 등 할 행동을 정의

· priority

겹치는 패턴에 대해서 우선 순위를 매김

· counters

바이트 수와 패킷 수

만약 새로운 유형의 패킷이 등장하면 SDN은 컨트롤러에게 물어보는 방식을 택한다. 그러면 controller가 계산해서 갱신된 table을 보내준다.

오픈 플로우에서 match and action은 각 디바이스 종류마다 다르다.

1. 라우터의 경우 longest destination IP prefix를 가지고 특정 output port로 포워드 한다.

2. 스위치의 경우 destination MAC 주소를 가지고 broadcasting을 할건지 아니면 특정 포트로 넘길 건지를 정한다.

3. 방화벽의 경우 IP 주소와 TCP/UDP 포트 번호를 매칭해서 신뢰할 수 있다면 승인처리 되서 보내고, 신뢰할 수 없으면 거부를 한다.

4. NAT의 경우 IP 주소와 포트를 가지고 매칭을 해서 오리지날 주소와 포트를 복원시켜준다.

예를 들어, host h5와 h6가 h3 혹은 h4에게 datagram을 보내야 된다고 해보자.

그러면 controller가 flow table을 계산해서 각 라우터들에게 뿌려준다.

그러면 라우터는 그 테이블을 가지고 행동한다.

S3의 경우 IP source 주소가 10.3.*.* 고 IP destination 주소가 10.2.*.*면 3번 포트로 포워딩 한다.

S1의 경우 1번 포트로 datagram이 들어왔을 때, 소스의 IP 주소가 10.3.*.* 이고 목적지의 IP 주소가 10.2.*.*면 4번 포트로 포워딩한다.

S2의 경우 2번 포트로 datagram이 들어왔을 때, 목적지의 IP 주소가 10.2.0.3이면 3번 포트, 10.2.0.4면 4번 포트로 포워딩해줘서 정확한 IP 주소를 가지고 정확한 corresponding 호스트들에게 포워딩을 해준다.

728x90
반응형

'Study > 네트워크' 카테고리의 다른 글

5. Network Layer: Control Plane(2)  (0) 2023.06.14
5. Network Layer : Control Plane (1)  (2) 2023.06.14
4. Network Layer (Data Plane) (1)  (6) 2023.06.14
3. Transport Layer (3)  (1) 2023.06.14
3. Transport Layer (2)  (0) 2023.06.14