Computer Science/컴퓨터네트워크(ComNet)

[컴네/CN] Network계층의 IP

gxxgsta 2023. 12. 6. 00:36
반응형
SMALL

Network 계층

네트워크 계층은 OSI 계층의 세 번째 계층으로 아래와 같은 일을 수행한다.

 

- IP 패킷 송수신

- IP 패킷 전달: 라우터의 패킷 포워딩

- IP 주소와 IP에 대한 경로 찾기

 

IP packet

IP 패킷은 아래와 같은 과정을 통해 생성된다.

 

1. 웹 브라우저 클릭
2. 클릭에 대한 내용을 HTTP 메시지로 만들기
3. HTTP 메시지 TCP 세그먼트로 만들기
4. TCP 세그먼트를 IP 패킷으로 만들기 (encapsulation)
5. IP 패킷을 이더넷 프레임으로 만들기
6. 이더넷 프레임을 0,1 비트로 만들어서 보내기
7. 비트를 아날로그 신호로 보내기

 

 

네트워크 계층에서 수행하는 일은 위의 사진과 같다.

 

- Path-selection algorithm

라우터의 SW에 구현되어 있으며 포워딩 테이블을 통해 호스트 간의 최적의 경로를 찾아준다.

 

- IP protocol

ip 패킷(datagram)을 만들어 주는 역할을 한다.

 

- ICMP protocol

라우팅에 문제가 발생하였을 때 주로 오류를 보고하기 위해 사용된다.

 

IP Datagram/Packet format

 

1. ver(version) (4 bits)

IPv4 또는 IPv6의 ip 프로토콜의 버전을 나타낸다.

 

2. head.len (4 bits)

해당 패킷에서의 헤더가 차지하는 길이를 나타낸다.

이때, 4bits는 크기가 작아 헤더의 길이를 모두 나타낼 수 없다. 따라서 보통 1/4한 값으로 필드를 채운다.

 

3. type of service (8 bits)

6개의 비트는 diffserv, 2개의 비트는 ECN을 나타낸다.

 

4. length (16 bits)

헤더를 포함한 패킷 전체의 길이를 바이트 개수로 표현한다.

따라서 최대 길이는 (2^16)-1이 된다.

 

5. 16-bits identifier (16 bits)

데이터그램을 식별해주는 id이다.

해당 패킷이 단편화(조각화)된 경우 같은 데이터그램에 속하면 같은 일련번호의 값을 공유한다.

 

6. flgs (3 bits)

해당 패킷의 단편화 여부를 알려준다.

D: do not fragment

M: more fragment

 

7. fragment offset (13 bits)

해당 데이터그램이 단편화가 발생한 데이터그램인 경우 몇 번째 offset인지, 순서를 나타내주는 값이다. 8B단위로 나타낸다.

 

8. TTL(time to live) (8 bits)

라우터를 건너갈 수 있는 최대 횟수에 대한 값이다.

뒤에서 추가적으로 언급하겠다.

 

9. upper layer (8 bits)

상위 계층 프로토콜에 대한 정보이다. 즉, 상위 계층 프로토콜에서 TCP를 사용하는지 UDP를 사용하는지 알려준다.

 

10. header checksum (16 bits)

헤더에 대한 오류를 검출하기 위해 존재하는 필드이다.

 

11. source IP address (32 bits)

출발지의 ip 주소값이다.

 

12. destination IP address (32 bits)

도착지의 ip 주소값이다.

 

13. option (if any)

 

14. payload data

 

TCP/IP 프로토콜 사용시 TCP 헤더 20B, IP 헤더 20B로 인해 40B + α의 overhead를 가진다.

 

Fragmentation

 

MTU는 maximum transfer unit의 약자로 네트워크에 연결된 장치가 받아 들일 수 있는 최대 데이터 패킷의 크기를 이야기한다. 네트워크에서 MTU보다 큰 패킷은 해당 네트워크를 통과할 수 없다.

 

이때, MTU는 바이트(8bits) 단위이고, 최대 MTU는 1500B이다.

이러한 링크 계층의 프레임 크기 제한으로 인해 IP 패킷이 쪼개지는 단편화 작업을 진행해야 한다.

IPv4는 라우터에서 단편화 진행이 가능하며 단편화된 패킷은 목적지에서 재조립된다.

 

 

위 사진은 ip 패킷의 단편화 예시이다.

패킷이 단편화되면서 id값은 고정되어 있고 offset 값을 통해 해당 패킷의 순서를 알 수 있다.

이때 패킷을 너무 잘게 쪼개는 것은 좋지 않으며 IPv6가 도입되면서 라우터에서 파편화가 진행되었다.

 

TTL(Time to Live)

건너갈 수 있는 라우터의 최대 개수를 나타낸다.

왜냐하면 라우터에서 패킷 전송을 위해 또 다른 라우터에게 해당 패킷을 전송하는데,

이 과정에서 포워딩 테이블이 서로를 가리키면 loop가 발생하여 목적지에 도달하지 못하고 라우터를 빙글빙글 도는 상황이 발생할 수 있다.

 

위와 같은 상황을 막기 위해 라우터를 하나 건너 갈 때마다 TTL 필드의 값을 1씩 감소시킨다.

 

TTL 값이 0이 되면 해당 패킷을 폐기하고, ICMP time exeeded 오류 메세지를 송신자에게 전송한다. 이때 ip 패킷의 upper layer 필드에서 해당 패킷이 ICMP 오류임을 나타낸다.

 

TTL을 이용한 네트워크 응용으로는 제이콥스가 만든 traceroute가 있다.

 

IP Option

IP option으로는 Record route, MTU probe/reply, time stamp가 있다.

 

- IP option 필드의 최대 길이

IP 헤더 길이는 IHL(header length) 필드에 표시되어 있다.

이때, IHL필드는 4bits이지만 word(4B)단위이기 때문에 IHL 필드의 최소값은 5 words(20B)이고 최댓값은 15words(60B)이다. 즉, 옵션의 최대값은 60B - 20B로 총 40B이다.

 

- IP Record Route option

이 옵션은 라우터에서 IP 주소를 기록하는 옵션인데, 옵션 필드에는 ip 주소가 9개까지밖에 기록되지 않는다. (ip 주소는 4B, 옵션 설명 칸을 제외하고 36B의 데이터 기록 가능) 그러나 실제로 인터넷에 존재하는 라우터의 개수는 9개를 넘기 때문에 방문하는 모든 라우터의 ip 주소를 추적하기 위해 Van Jacobson은 traceroute를 개발하였다.

 

IP address 개요

 

IP 주소는 IPv4 기준 32bits로 표현 가능한 식별자이다.

이러한 주소는 인터페이스마다 할당된다.

 

interface(인터페이스)란 물리/가상 링크를 말하는데 라우터/공유기의 무선/유선랜 포트를 말한다.

 

Subnet(서브넷)

 

서브넷은 라우터를 거치지 않고 도착할 수 있는 인터페이스의 집합을 말한다.

 

ip 주소는 subnet part와 host part 두 부분으로 나뉜다.

- subnet part: 공통의 high order bits

- host part: 남은 low order bits

 

위 사진에서 파란 부분이 subnet이다.

 

subnet의 표기법은 공통 바이트를 통일하는 것이다. 

 

라우터는 서로 선으로 연결되어 있는데, 이러한 선도 하나의 subnet이다.

따라서 라우터를 하나 건너면 subnet도 바뀐다.

 

라우터 집합에서의 계층적인 주소 할당

 

각 라우터와 서브넷은 계층적인 구조를 가진다.

이때 각 서브넷들은 여러 ip 주소를 가질 수 있는데, 상위 계층의 서브넷은 하위 계층의 서브넷 전체를 하나로 인식할 수도 있다.

 

CIDR

CIDR은 Classless InterDomain Routing의 약어로 주소에서 subnet 부분을 표기하는 방법이다. 이때 표기법은 a.b.c.d/x로 x는 서브넷으로 고정된 비트의 개수를 의미한다.

 

위 사진에서 200.23.16.0/23의 주소에서 23bits가 고정된 subnet 부분임을 의미한다.

 

 

CIDR은 부족한 IPv4 주소를 효율적으로 사용하기 위한 도구이다.

/8까지가 class A, /16까지가 class B, /24까지가 class C를 의미한다.

 

라우팅 테이블에 A, B, C 클래스 단위의 주소 개수를 최소화한다.

 

이때 호스트나 네트워크에서는 어떻게 IP 주소를 할당받을까?

 

DHCP

우리는 ip 주소를 할당 받을 때 수동 또는 자동으로 할당 받을 수 있다.

이때 자동으로 ip 주소를 할당받기 위해서는 DHCP를 사용한다.

 

DHCP는 Dynamic Host Configuration Protocol의 약어로 자동으로 유선이나 무선 랜에게 ip 주소를 할당하기 위한 프로토콜이다.

 

DHCP의 목표는 아래와 같다.

- 호스트가 네트워크에 참여 시 ip 주소를 자동으로 할당 받는다.

- 사용 중인 ip 주소에 대한 임대를 갱신하도록 한다.

- 연결 중에만 ip 주소를 할당하고 연결이 종료된 호스트가 사용하던 ip 주소는 재사용이 가능하다.

- 네트워크에 가입/탈퇴하는 모바일 유저에 대해서도 지원한다.

 

 

DHCP는 아래의 과정을 통해 작동된다.

 

1. 호스트가 브로트캐스트로 DHCP 검색 메세지를 뿌린다. (선택적)

2. DHCP 서버는 DHCP offer msg로 응답한다. (선택적)

3. 호스트는 ip 주소를 요청한다. -> DHCP request msg

4. DHCP 서버는 ip 주소를 전송한다. -> DHCP ack msg

 

NAT(Network Address Translation)

NAT는 IPv4형식의 주소를 사용하던 중 주소의 개수가 모자라 생각해낸 방법이다.

NAT는 공용 네트워크와 개인 네트워크 사이에 설치되는 것으로 내부 비공개 IPv4 주소와 할당된 공용 IPv4 주소를 변환하는 역할을 한다. 따라서 개인 네트워크의 모든 디바이스는 동일한 공용 IPv4 주소를 공유할 수 있다.

 

 

위 그림은 NAT를 통해 사설 IP 주소(우측)으로부터 공인 IP 주소(좌측)로 변환하는 모습을 보여주고 있다.

 

사설 네트워크에서는 출발지와 목적지가 있는 데이터그램에서는 출발지 주소에 대해 10.0.0.x/24로 설정된다. 

 

이때, NAT로 인해 사설 네트워크를 떠나는 모든 데이터그램은 모두 출발지의 주소가 NAT IP 주소(138.76.29.7)로 설정된다. 사설 네트워크에서의 각 기기는 포트번호를 통해 구분된다.

 

위 그림을 통해 NAT가 사설 주소를 공인 주소 바꾸는 과정을 살펴보자.

 

1. 호스트 10.0.0.1은 데이터그램을 128.119.40.186의 80포트로 보낸다.

 

2. NAT 라우터는 데이터그램 출발지 주소를 10.0.0.1:3345에서 138.76.29.7:5001로 변경하고 NAT translation table을 업데이트합니다.

 

3. 응답이 도착했을 때 해당 응답 패킷의 도착 주소는 138.76.29.7:5001로 설정되어 있다.

 

NAT로 인한 논란: 계층침범

 

1. 계층 구조 침범

네트워크 계층의 라우터는 오직 IP 패킷만 다룰 수 있다. 하지만 NAT에서는 TCP 패킷의 port 번호를 수정한다.

 

2. end-to-end 원칙 위반

네트워크 노드는 패킷을 수정할 수 없다는 end-to-end 원칙을 위반한다.

 

3. 서버로의 전달

NAT는 로컬에서 서버로 나갈 때 NAT에서 테이블을 통해 정보를 저장하고, 해당 테이블 데이터를 통해 응답을 알맞은 위치로 전송한다. 그런데, NAT 테이블에 등록되지 않은 외부 클라이언트에서 데이터가 들어오면 이에 해당하는 값이 NAT 테이블에 없으므로 로컬 환경 내부에서 해당 패킷을 전송할 방법이 없다. (대부분의 사용자는 클라이언트이므로 큰 문제가 되지는 않는다.)

 

위의 문제점을 상쇄하기 위한 여러 방법이 있지만 그 중에서도 가장 효과적인 방법은 IPv6를 사용하는 것이다.

 

IPv6

IPv6는 32비트를 사용하는 IPv4의 개수 부족 문제로 인해 등장하였다.

 

위의 사진은 IPv6의 데이터 그램 포멧을 나타낸 것이다.

 

1. ver (4 bits)

IP 주소의 버전을 알려주는 필드이다.

 

2. pri (4 bits)

혼잡에 대한 패킷의 우선 순위를 정의하는 필드이다.

 

3. flow label (24 bits)

실시간 서비스 등 우선권을 주기 위해 특정 트래픽의 흐름에 대해 라벨링하는 필드이다.

 

4. payload len (16 bits)

기본 헤더를 제외한 IP 데이터그램의 길이를 정의한 필드이다.

 

5. next hdr (8 bits)

데이터그램의 기본헤더 다음에 오는 헤더를 정의하는 필드이다. IPv4의 upper layer 필드와 동일한 역할을 하는 것 같다.(뇌피셜)

 

6. hop limit (8 bits)

IPv4의 TTL과 동일한 역할을 한다.

 

7. source address (128 bits)

출발지의 주소를 명시한다.

 

8. destination address (128 bits)

도착지의 주소를 명시한다.

 

9. payload

 

Transition from IPv4 to IPv6

현재까지 IPv6를 도입하기 위해 많은 노력을 기울였지만 다양한 원인으로 인해 모든 라우터에서 IPv6를 처리하도록 만들지 못했다. 따라서 IPv4와 IPv6를 섞어서 사용할 수 있는 방법을 개발해냈다.

 

Tunneling

 

tunneling(터널링)이란 IPv6인 데이터그램을 IPv4 형태의 데이터그램의 payload로 넣는 방식이다. 즉, IPv4를 사용하는 라우터 사이에 IPv6이 IPv4안에서 payload로 이동되도록 IPv6을 IPv4로 캡슐화하는 것을 말한다.

 

 

위 그림은 터널링으로 데이터를 전송하는 모습을 보여준다.

 

현재 구글에서 30%의 클라이언트가 IPv6를 사용하여 접근한다.

또한 모든 미국 정부 도메인의 30%가 IPv6을 지원한다.

모든 라우터를 IPv6로 바꾸기엔 무리가 있지만 25년동안 계속해서 변환을 진행 중이다.

 

MiddleBox

middlebox는 RFC 3234 표준으로 출발지와 목적지 주소 사이의 데이터 경로에서 라우터가 제공하는 일반적인 표준 기능 이외의 기능을 수행하는 중개 box이다.

 

middlebox의 종류로는 NAT, Firewall(방화벽), IDS, Application-specific, Cache, Load balancers 등이 있다. 초기에는 하드웨어에서만 관리되었지만, 최근 open api에서 구현하여 하드웨어의 독점이 사라져 white box로 이동하였다.

 

 

위 사진은 IP hourglass로 이전의 네트워크 상황이었다.

네트워크 계층을 제외한 모든 계층에서는 여러 개의 프로토콜이 존재하지만, 네트워크 계층에서는 하나의 프로토콜만 존재하기 때문에 모든 인터넷 연결 기기에서 이 프로토콜이 구현되어 있어야 했다.

 

 

하지만 middlebox를 통해 네트워크 계층에서 이용 가능한 여러 가지 프로토콜이 늘어났다.


참고 및 출처

https://engineeringcode.tistory.com/49

https://movefast.tistory.com/53

https://velog.io/@cyw320712/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-4.-Network-Layer-2

https://www.cloudflare.com/ko-kr/learning/ddos/glossary/internet-control-message-protocol-icmp/

https://www.cloudflare.com/ko-kr/learning/network-layer/what-is-mtu/

https://learn.microsoft.com/ko-kr/azure/rtos/netx-duo/netx-duo-nat/chapter1

https://velog.io/@arthur/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B3%84%EC%B8%B5-3

https://velog.io/@hsshin0602/%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-IPv6

반응형
LIST

'Computer Science > 컴퓨터네트워크(ComNet)' 카테고리의 다른 글

[컴네/CN] 인터넷 잡학  (1) 2023.12.06
[컴네/CN] 네트워크 레이어의 라우터 큐  (1) 2023.12.06
[컴네/CN] 혼잡제어  (1) 2023.12.05
[컴네/CN] Socket Programming  (1) 2023.12.05
[컴네/CN] TCP  (0) 2023.12.04