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

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

by dustnn 2024. 11. 16.

- 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


 

NAT란

 

local site 전체가 하나의 IPv4주소 할당받음

=> "NAT-enabled router"에 IPv4 주소 할당됨

=> 내부 host들이 외부와 컨택하기 위해서는 NAT의 IP주소 활용해야 함

 

하지만 host들이 다 같은 NAT 사용하면 그들 간 구별이 어려워진다.

그래서 port번호를 다르게 두어 구별한다.

16-bit짜리 port number field를 두어 

네트워크 내부 60000개의 host들이 동시에 internet과 소통할 수 있도록 한다.

 

 

Motivation & Advantages of NAT

 

Motivation

모든 IP-capable device들은 IP주소가 필요하지만, SOHO(small office, home office) subnet이 여럿 등장하면서 할당할 수 있는 IP주소가 부족해지게 됨 => NAT를 두어 n:1 할당이 가능하게 한 것 !!

 

Advantages

- IP주소 하나만 할당하면 되므로 효율적

- local network 안에서 private 주소 바꿔도 internet에 알리지 않아도 됨

- ISP를 바꿔도 자신의 IP주소 바꾸지 않아도 됨

=> security 좋음(host 정보 outside world에 노출되지 않고 NAT만 확인 가능하기 때문에)

 

 

Implementation of NAT

 

IP 주소 하나로 외부와 연결되는 방식을 살펴보자.

NAT router은 모든 일을 transparent하게 실행한다.

 

1. 모든 outgoing datagram에 대해,,

sender host의 IP주소와 port#를 새로운 NAT IP주소와 port#로 대체한다. 그러면 remote host들도 그 NAT IP주소와 port#를 사용해 응답할 것이다.

2. NAT translation table을 가지고 있어 기존 IP주소/port#와 새로운 IP주소/port# 매칭시켜 보관해둔다.

3. remote host들이 NAT IP주소/port#로 응답

4. incoming datagram: NAT IP주소/port#를 기존 IP주소/port#로 전환(NAT translation table 참고)

 

NAT 작동 예시

 

router은 layer 3까지만 다룸

 

하지만 NAT는 다음과 같은 문제가 있음

 

- port번호를 바꾸어야 하는데 port번호는 segment에 들어있기 때문에 layer3 밑 header에 접근해야 함

- end-to-end connectivity도 위반

* port#는 process 주소 지정을 위해 사용되어야 하지만, NAT는 host의 주소 지정을 위해 사용

=> NAT 뒤의 host는 client가 될 수도, server가 될 수도 있는데,

만약 client라면 상관 없지만, server라면 외부의 client가 이 server의 존재를 알 수 없기 때문에 

NAT 뒤에 server를 둘 수 없게 됨...

=> 해결책: NAT traversal techniques

 

이러한 문제가 있긴 하지만 여전히 많이 사용된다.

 

NAT traversal techniques

 

UPnP IGD

 

NAT translation table에 WAN side address 지정해달라고 요청

-> server가 외부와 컨택하지 않아도 됨.

다음과 같은 경우에는 원래 10.0.0.1, 25000 이라는 스펙을 가진 server가 136.76.29.7, 2500 이라는 스펙을 가지고 외부와 컨택 가능

 

 

Relay: 두 host 모두 NAT 뒤에 있어도 통신 가능

 

A가 B에게 컨택하고 싶다면

B는 항상 Relay를 경유한다.

1. 일단 A와 B가 Relay와 연결해 외부와 컨택할 준비 => A와 B의 NAT 각각에, 컨택할 때 쓸 수 있는 IP 주소 존재

2. 컨택(A->B)

- ip header 목적지 주소는 Relay

- payload 목적지 주소는 hostA

 

 

Connection reversal: 하나만 NAT 뒤에 있어야 통신 가능(두 개 다는 안 됨)

 

A가 B에게 컨택하고 싶다면

server C를 매개로 A가 B에게 책임을 전가한다.

1. A가 C에게 A와 컨택하고 싶다고 하면

2. C가 A에게 B에게 컨택해보라고 요청 -> NAT에 B의 IP 주소 실림

3. B가 A에게 컨택

 

'네트워크 > 컴퓨터 네트워크 수업' 카테고리의 다른 글

4-4. Generalized Forwarding, SDN  (0) 2024.11.24
4-3. IP(Internet Protocol)(4)  (0) 2024.11.18
4-3. IP(Internet Protocol)(2)  (6) 2024.11.15
4-3. IP(Internet Protocol)(1)  (0) 2024.11.13
4-2. What's inside a router(1)  (2) 2024.11.12