NAT : network address translation
NAT는 앞서 말했다싶이 IPv4만을 사용해서 IP 주소가 부족한 상황에서 생겨난 개념으로 하나의 IPv4 주소를 local network에 있는 모든 디바이스 내에서 공유하는 개념을 말한다. 외부에서 볼때는 한 지점이지만 실제로 local device는 여러개를 사용하고 있다. NAT는 외부에서 쓰는 하나의 public한 IP 주소가 있고, 내부에서 사용하는 private한 주소가 있는데, 내부 private한 진짜 목적지까지를 구분하기 위해서는 포트번호를 사용한다. 사실상 포트번호는 device를 구분하기 위해서 사용되지 않고 프로세스를 구분하기 위해 사용되는데 규칙을 위반한 것이긴 하다. 들어온 패킷의 IP 주소는 내부의 어떤 디바이스로 연결해줘야할지 NAT translation table을 참조해서 전달해준다.
router에 NAT기능을 추가한 것을 공유기라고 부르며 NAT는 end to end 법칙을 위반한다. 하지만 NAT를 사용하는 디바이스로는 서버를 돌리기에는 비적합하다. NAT에 부담을 많이 주기때문이다.
NAT의 장점으로는 다양하다.
1. 한개의 IP 주소로 여러개의 device 연결이 가능하게 한다.
2. NAT 장비 내부에서 외부로의 고지 없이 주소를 변경할 수 있다. 내부에서만 체계가 잘 잡혀있으면 아무런 문제가 없다.
3. ISP를 변경할때에도 내부 네트워크 영향을 받지 않는다.
4. 공격자가 NAT를 통해서는 내부 IP 주소밖에 못보기때문에 보안 측면에서도 도움이 된다.
IPv6
IPv6는 인터넷 주소 체계를 대폭 확장하기 위해 도입된 새로운 프로토콜이다. 기존 IPv4 주소 체계가 점점 고갈되어 갈 것으로 예상되었기 때문이다. IPv6는 약 27년 전인 1990년대 후반에 나왔다.
IPv6의 주요 변화점은 다음과 같다.
- 주소 공간 확장: IPv4의 32비트에서 IPv6는 128비트로 크게 늘어났습니다. 이렇게 되면 주소 고갈 문제가 해결된다.
- 단순화: IPv4에 있던 불필요한 기능들(option, checksum, fragment/reassembly 등)이 제거되어 더 간단해졌다.
하지만, IPv6로 완전히 전환하기는 어려운 상황이다. 모든 사용자와 기기가 한꺼번에 바꾸기 힘들기 때문이다. 따라서 현재는 IPv4와 IPv6를 동시에 지원하는 라우터를 사용하고 있다.
이때 IPv4 영역과 IPv6 영역 사이를 연결하기 위해 '터널링(tunneling)' 기술을 사용합니다. 중간에 IPv4 노드가 있어도 양쪽 끝이 IPv6라면, IPv6 패킷을 IPv4 패킷에 캡슐화하여 전송하는 방식입니다.
IPv6는 주소 공간 확장과 단순화를 위해 도입되었지만, 기존 IPv4와 병행하여 점진적으로 전환 중에 있다. 이 과정에서 터널링 기술을 활용하고 있다. (하지만 20년이 지난 후에도 IPv6로의 완전한 변환은 불가능해보인다고 말씀하셨다. )
Pv6 데이터그램을 전송하려고 할 때, 중간에 IPv4만 지원하는 네트워크가 있다면 터널링 기술을 사용한다. 이때 IPv6 패킷 전체를 IPv4 헤더에 캡슐화(encapsulation)하여 전송합니다. IPv4 헤더에는 송신지와 수신지 IPv4 주소를 붙인다.
다음 라우터 네트워크가 IPv4만 지원하는지 IPv6도 지원하는지 여부는 라우팅 프로토콜을 통해 알 수 있다. 이 부분은 다음 장에서 자세히 배울 예정이다. IPv4만 지원하는 라우터 네트워크를 IPv4 터널이라고 부른다.
구글의 경우, 클라이언트 기반 트래픽의 약 30%가 IPv6를 통해 전송되고 있지만, 일반인들의 관심이 많지 않아 IPv6 전환이 크게 늘어나지 않고 있다. 또한 NAT(네트워크 주소 변환)나 CIDR(ClassLess Inter-Domain Routing) 등의 기술로 IPv4 주소 부족 문제를 해결해나가고 있다.
Generalized Forwarding, SDN
일반적인 포워딩 방식의 한계를 넘어서려는 시도에서 Generalized Forwarding 개념이 등장했다. 기존에는 패킷을 목적지 IP 주소의 프리픽스(prefix)와 가장 길게 일치하는 링크로 전달하는 전통적인 포워딩 방식을 사용해왔다. 하지만 이렇게 목적지 IP만을 보고 전달할 이유가 있을까? 라는 의문과 목적지 IP 외에도 다른 조건들을 보고 단순히 포워딩하는 것이 아니라 다른 액션을 취할 수 있지 않을까? 라는 아이디어에서 일반화된 포워딩 개념이 도입되었다.
일반적인 포워딩 방식에서는 각각의 router들이 control plane을 통해서 forwarding table (flow table이라고도 부름)을 분산시스템으로 생성하고 이를 참고하여 forwarding 시켰다.
일일반화된 포워딩에서는 패킷의 헤더 정보(목적지 IP, 소스 IP, 포트번호, 프로토콜 등)를 조합하여 다양한 규칙을 만든다. 그리고 그 규칙에 따라 단순히 포워딩하는 것이 아니라 여러 가지 액션을 취할 수 있다.
취할 수 있는 액션의 예시는 다음과 같다
- Drop: 블랙리스트에 해당하는 소스 IP 주소라면 그 패킷을 버린다.
- Copy: 추가 조사가 필요한 패킷인 경우 (private IP 주소라던지..) 컨트롤러로 복사본을 보낸다.
- Modify: NAT(Network Address Translation)와 같이 IP 주소나 포트번호를 변경한다.
- Log: 패킷 도착 속도를 기록하기 위해 로그를 남긴다.
일반화된 포워딩에는 간단한 패킷 처리 규칙이 있는데, 주요 요소는 다음과 같다.
- Match: 패킷 헤더 정보와 일치하는 조건
- Actions: 위와 같은 Drop, Copy, Modify, Log 등의 액션
- Priority: 규칙들 간에 패턴이 중복되거나 겹치는 경우 우선순위(priority)에 따라 규칙을 구분한다.
- 예를 들어 다음과 같은 두 규칙이 있다고 가정해보자.
- Match: 소스 IP 1.1.1.1, Action: Drop, Priority: 높음
- Match: 소스 IP 1.1.1.0/24, Action: Accept, Priority: 낮음
- 소스 IP 1.1.1.1인 패킷에 대해서는 두 규칙 모두 Match 조건에 부합한다. 이때 Priority가 높은 규칙 1)의 Drop 액션이 적용되어 패킷이 버려진다.
- 예를 들어 다음과 같은 두 규칙이 있다고 가정해보자.
- Counters: 해당 규칙과 일치하는 패킷 수나 바이트 수 등의 카운터
Open Flow: flow table entries
OpenFlow는 SDN을 구현하기 위해 처음으로 제정된 표준 인터페이스이다. 다음 그림과 같이 OpenFlow 스위치, OpenFlow 컨트롤러로 구성되며, 흐름(flow) 정보를 제어하여 패킷의 전달 경로 및 방식을 결정한다.
OpenFlow 스위치 내부에는 패킷 전달 경로와 방식에 대한 정보를 가지고 있는 FlowTable이라는 것이 존재한다. 패킷이 발생하면 제일 먼저 FlowTable이 해당 패킷에 대한 정보를 가지고 있는지 확인한다. 패킷에 대한 정보가 존재하면 그에 맞춰 패킷을 처리하고, 정보가 존재하지 않으면 해당 패킷에 대한 제어 정보를 OpenFlow 컨트롤러에 요청한다.
앞에서 언급했듯이 OpenFlow에서 패킷을 제어하는 정보는 FlowTable에 저장되어 있으며, 다음 그림과 같이 Header Fields, Counters, Actions로 구성된다.
OpenFlow는 destination 기반 forwarding을 방법으로 사용할 수도 있고, Firewall와 같은 보안을 위한 방법을 사용할수도 있다. 또한 Data Link 기준에서 특정 MAC주소(Ethernet dst)를 보고 특정 포트로 보내는 Action을 할 수도 있다.(programability)
match+action추상화가 다양한 종류의 네트워크 장치들을 통합한다.
라우터, 방화벽, 스위치, NAT 등 각 장치의 고유한 기능을 "match" 조건과 "action"으로 통일된 형태로 표현할 수 있다.
라우터
- match: 가장 긴 prefix
- action: link로의 forward
방화벽
- match: IP 주소와 TCP,UDP port number
- action: 허용/거부
스위치
- match: MAC 주소
- action: forward / flood(전체로 뿌려주기=broadcast)
NAT
- match: IP 주소와 port 번호
- action: IP 주소와 port 번호 바꿔치기
Middleboxes
네트워크 트래픽이 소스에서 목적지로 이동하는 경로 상에는 라우터 외에도 다양한 미들박스(middlebox)가 존재한다. 미들박스란 방화벽, NAT(네트워크 주소 변환), 캐시 서버 등의 장치를 말한다. 과거에는 미들박스가 폐쇄적인 하드웨어 솔루션으로 제공되었지만, 최근에는 기술을 공개하고 개방하는 추세이다. 또한 이전에는 하드웨어 기술의 발전이 두드러졌다면, 현재는 소프트웨어 기술의 발전이 두드러진다.
SDN(Software-Defined Networking)은 네트워크 구성 요소를 중앙 집중식 컨트롤러가 프로그래밍 방식으로 관리하자는 개념이다.
NFV(Network Functions Virtualization)는 네트워크 기능을 가상화하여 소프트웨어로 구현하자는 개념이다.
미들박스는 네트워크 경로 상의 특수 목적 장치이며, SDN과 NFV는 이러한 네트워크 기능을 소프트웨어로 구현하고 중앙 집중식으로 관리하려는 움직임이다.
IP
인터넷의 핵심은 바로 IP(Internet Protocol)이다. 인터넷 연결을 위해서는 IP가 필수적으로 구현되어야 한다.
다른 계층의 프로토콜들(physical layer, link layer, transport layer, application layer 등)은 변경될 수 있지만, 네트워크 계층의 프로토콜인 IP는 인터넷 연결을 위해 반드시 구현되어야 합니다.
인터넷의 핵심 네트워크 계층 프로토콜은 IP이며, 대부분의 인터넷 연결에 IP가 사용됩니다. 하지만 IPv6나 일부 특수 환경에서는 다른 네트워크 계층 프로토콜도 사용될 수 있다.
인터넷 연결을 위해서는 IP가 핵심적인 역할을 하지만, 네트워크 계층에서 IP만 유일하게 사용되는 것은 아니다. 다른 계층의 프로토콜은 변경 가능하지만, IP는 대부분의 경우에 필수적으로 구현되어야 한다.
네트워크 내부에서 동작하는 미들박스(middlebox)들은 네트워크의 주요 기능 외에 추가적인 기능을 제공한다. 이러한 미들박스에는 NAT(네트워크 주소 변환), 캐싱, NFV(네트워크 기능 가상화), 방화벽 등이 포함됩니다.
Internet 초기의 목표
인터넷의 초기에 나왔던 목표는 연결성이었다. 소련이 미사일 공격을 하여 연결이 끊어진다할지라도 우회하여 연결이 될수있도록 하자는 것이 목표였고, 이를 위해 연결을 단순하게 해야하며 narrow waist의 IP protocol을 가지며, intelligence는 network edge에서 구현하자고 말하였다.
인터넷 초기의 주요 목표는 연결성(connectivity)을 갖추는 것이었다. 이는 소련의 미사일 공격과 같은 상황에서도 네트워크 연결이 끊어지지 않고 우회할 수 있도록 하기 위함이었다.
이를 위해 인터넷은 연결 방식을 단순화하고, 핵심 프로토콜로 IP(Internet Protocol)를 채택하는 '네트워크의 좁은 허리 부분' 구조를 취했다. 또한 intelligence와 같은 복잡한 기능들은 네트워크 가장자리(edge)에서 구현하도록 하여 네트워크 자체는 단순하게 유지했습니다.
신뢰성 보장이나 혼잡제어와 같은 Network 기능들은 network core에서도, network edge에서도 구현될 수 있다.
현재 router에서는 대부분 IP로 인터넷 연결을 진행하므로 TCP의 경우 end host계층에서 구현되는 것이므로 network edge에서 구현되는 것으로 볼수있는데, 사실은 network 계층에서도 이런 기능들은 구현 가능은 하다. 예를 들어 다음 hop router에 도착하여 ack를 받을때까지 router가 데이터를 가지고 있는 방식으로 신뢰성을 보장할 수는 있다만, 이렇게 되면 ack가 날라올때까지 data를 가지고 있어야하므로 router에게 부담이 생겨 이런 방식을 잘 취하지는 않는다. 그래서 이런 network function들은 대부분 network edge에서 진행하는 추세이다.
20세기 초반 전화망의 경우 생각해보면 지능형 기능이 네트워크 코어(switch)에 집중되어있었다.
하지만 2005년 이전에는 지능형 기능이 end-system으로 이동했으며
2005년 이후에는 core와 edge에 intelligence가 위치해있는 모습이 흔해졌다.
'CS > 컴퓨터 네트워크' 카테고리의 다른 글
[Network Layer 04] Control Plane 2 (0) | 2024.06.04 |
---|---|
[Network Layer 03] Control Plane (1) | 2024.05.28 |
[ Network Layer 01] Data Plane (1) | 2024.05.20 |
[Tranport Layer 03] TCP의 연결 설정 (0) | 2024.05.03 |
[Transport Layer 02] TCP (0) | 2024.05.01 |
댓글