[CS]/[컴퓨터네트워크]

네트워크계층 - IP 프로토콜

broship 2021. 6. 13. 16:53

※kocw에서 제공하는 이석복 교수님의 컴퓨터네트워크 수업을 듣고 필기한 내용입니다.

출처를 따로 밝히지 않는 한 전부 해당 수업에서 제공한 자료들이며 제가 작성한 부분에 있어 틀린 부분이 있을 수도 있다는 점 양해바랍니다.


 

 

라우터가 하는일 2가지


 

1. forwarding 포워딩

- 들어온 패킷의 목적지 주소와 포워딩 테이블의 엔트리를 매칭시켜서 그 엔트리에 해당하는 링크로 전달한다

 

2. routing 라우팅

- 포워딩 테이블을 만들어 주는 역할을 담당

 

- 라우터는 오직 들어온 패킷을 라우팅 알고리즘에 따라 다음 라우터로 전달하는 역할만을 담당

- 라우터에 모든 도착지 정보를 다 담아둘수는 없음, 대략적인 큰 범위만 구분하여 전달

- Longest prefix matching 방식을 사용, prefix가 가장 길게 동일한 범위로 전달

 

 

 

IP 프로토콜 헤더정보


중요한 헤더들 몇가지

1. ver: IP 프로토콜 버전, 현재는 4버전

2. length: 패킷 총 길이

3. source IP address, destination IP address: 메세지를 생성해서 보내는 사람의 IP주소, 받는 사람의 IP 주소

4. time to live: 처음에 값을 주고 하나의 라우터를 거쳐갈 때마다 하나씩 줄임, 값이 0이되면 해당 패킷은 사라짐(패킷이 간혹가다 무한루프에 빠질 수 있는 상황을 방지하기 위함)

5. upper layer: TCP인지 UDP인지 확인 가능함(리시버 측에서 TCP 혹은 UDP 중 어디에 올릴지 결정할때 사용)

6. data 부분엔 TCP 혹은 UDP 세그먼트가 들어감

 

- 각각의 IP헤더, TCP 헤더는 20바이트씩 나옴, TCP/IP 프로토콜은 기본적으로 40바이트의 오버헤드가 발생함

- ACK 같은 경우는 40바이트씩만을 가지고 있음(실제로 떠돌아 다니는 패킷의 대다수를 차지)

 

 

IP Address(IPv4)


- NIC(네트워크 인터페이스)를 지칭하는 주소

- IP 주소, 4버전

- 32비트 주소체제

- 이론상으로 2^32승의 IP 주소를 사용할 수 있음

- 보기쉽게 8비트씩 끊어서 10진수로 표현함(192.168.10.1)

- 라우터는 여러개의 NIC를 가지고 있음

 

- IP 주소를 규칙없이 배치할 경우 편함

- 하지만 그 경우 주소를 찾아갈때 참조되는 포워딩 테이블이 복잡해짐

- 그래서 IP 주소를 계층화 시킴

 

 

- 네트워크아이디(prefix, 서브넷 아이디)와 호스트 아이디로 나눔

- Subnet Mask: 서브넷마스크, 어디까지가 네트워크ID인지, 어디까지가 Host인지 나타냄

- 그래서 IP주소와 서브넷 마스크는 항상 같이 다님

- 255.255.255.0이면 앞의 3개가 네트워크 아이디, 뒤에 1개가 호스트

 

- 이렇게 계층화 시켜두면 포워딩 테이블 짜기가 편해짐

- 계층별로 보내는 방향을 설정하면 됨

 

 

 

IP주소 발전 과정


- 인터넷은 네트워크의 집합

- 각각의 네트워크(삼전 네트워크, 엘지 네트워크 등)는 각각의 prefix를 가지고 있음

- 네트워크 규모에 따라 prefix 규모도 달라져야됨

- 예전에는 class로 나눠서 배정하는 방식을 사용함

 

1. Classful Addressing

Class A: /8 blocks, prefix로 8비트 사용, 2^24개의 호스트 주소 사용 가능, 2^7(128)개의 기관만 배정 가능

Class B: /16 blocks, prefix로 16비트 사용, 2^16개의 호스트 주소 사용 가능, 2^15개의 기관만 배정 가능

Class C: /24 blocks, prefix로 24비트 사용, 2^8개의 호스트 주소 사용 가능, 2^23개의 기관 배정 가능

 

- prefix의 맨 앞은 0으로 배정해야 되서 1씩 뺌

- Class A의 경우 고작 128개의 기관만 배정이 가능함, 배정되어도 그 많은 호스트(2^24개)를 다 사용 불가능

- Class C의 경우 많은 기관에게 배정이 가능하나 최대 255개의 호스트만 배정할 수 있음

- 이러한 점들이 비효율적임

 

2. Classless Inter-Domain Routing(CIDR)

- 8비트씩 끊어서 prefix를 지정하면 편차가 너무커짐

- 8비트가 아닌 자유롭게 prefix를 끊어서 사용 가능하게 함

- 1000명의 호스트가 필요한 기관일 경우

class 방식이면 /24 * 4개를 받아야됨

classless 방식이면 /22 하나만 받으면 됨

- /24 * 4 이렇게 여러개를 받을 경우 포워딩 테이블이 복잡해짐

 

- 이제 이렇게 계층화된 네트워크를 기반으로 라우터는 계속 Longest prefix matching 사용

- 그럼 그걸 결정하는 포워딩 테이블은 어떤 알고리즘으로 생성되나? - 라우팅 알고리즘에 의해(나중에 배움)

 

정리

- IP 주소는 32비트

- prefix와 host 2가지로 구성되어있음

- prefix(subnet)은 유연하게 계층화되어있음

 

 

Subnets


- 같은 subnet ID(prefix)를 가진 디바이스의 집합

- 라우터들을 거치지 않고 접근이 가능한 호스트들의 집합

- 라우터는 여러개의 IP 주소를 가지고 있음

- 그뜻은 라우터는 하나의 서브넷에 포함되어 있는게 아니라 여러 서브넷에 걸쳐있는 존재

 

 

 

Network Address Translation(NAT)


- IPv4는 32비트 사용, 약 40억개의 IP 주소 사용 가능

- IPv6는 128비트 사용, 해변의 모래알 개수보다 많은 IP 주소 사용 가능

- 현재는 NAT 방식(트릭)을 사용해서 IPv4로 연명하는중

NAT 방식:

- 하나의 서브넷마다 사설 IP로 이용됨

- 해당 서브넷에서 빠져나갈때 라우터가 자기 IP(공인 IP)와 포트번호로 바꿔치기함

- 그럼 올때 해당 서브넷은 항상 같은 IP로 옴

- 이때 해당 포트번호로 정확한 주소 찾아감

 

NAT를 사용했을때 생기는 문제:

- 네트워크계층까지만 담당하는 라우터가 TCP 계층의 포트번호를 변경하는 계층 바이로레이션 문제가 발생함

- 원래 포트번호는 프로세스를 찾아가는 역할을 담당하는데 현재 서브넷 내의 IP 주소 찾아가는 역할로 바뀜

- 이 방법으로는 프로세스를 찾아갈 방법이없음

 

- 처음에 IPv4를 설계했을때 주소 부족, 보안등의 문제를 예측할 수 없었듯이 IPv6또한 어떠한 문제점이 있을지 예측할 수 없음, 게다가 벌써 20년이나 되어버림

- 20년 넘게 IPv6로 못넘어가듯이 한번 도입이 되면 바꾸기가 쉽지 않음, 성급하게 바꿨다가 나중에 문제 생기면 다시 바꾸기도 어려워짐

- 그래서 IPv6로 갈지, 다른 방법으로 갈지는 아직 정해진게 없음