일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 백트래킹
- 백준
- 15649
- 기계학습
- 경사하강법
- 4948
- 파이싼
- pyenv
- 파이썬
- n과 m
- BOJ
- 9020
- 손실함수
- 개발환경
- end to end
- 1002
- 1101
- 밑바닥부터 시작하는 딥러닝
- 재귀
- streamlit
- Mac
- 신경망 학습
- 가상환경
- 그리디 알고리즘
- Python
- 설정
- N-Queen
- 실버
- Today
- Total
파이톨치
[네트워크] Network 계층 본문
Network 계층
이번 챕터는 IP 주소와 네트워크 계층에 대해 배운다. 우선, IP 주소란 무엇이고, 어떤 구조로 이루어 졌는지 알아야 할 것이다.
IP 주소는 네트워크 상에서 장치를 식별하기 위한 고유한 주소를 말한다. 이는 32비트(IPv4)이며, 네트워크 부분과 호스트 부분을 구성된다. IP주소는 클래스로 구분되는 주소 체계를 사용한다.
네트워크 계층은 서로 다른 네트워크 간의 데이터 전송을 담당한다. IP 주소를 사용해서 패킷을 전송한다. 이때 출발지에서 목적지까지 최적의 경로를 결정하기 위해서 라우팅을 한다.
IP 주소의 클래스 와 서브넷
A 클래스는 앞의 1바이트가 네트워크 주소이고 뒤의 3바이트가 호스트 주소이다. 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 로 이루어져 있어, 0으로 시작되는 IP 주소는 A 클래스이다. A 클래스는 전 세계에 0~127까지 밖에 할당을 못한다. 3바이트가 호스트 주소를 나타내며, 호스트에 할당 가능한 주소 수는 2**24 - 2 개를 만들 수 있다. 생각해보면 앞이 0이면 모두 A 클래스 이기 때문에 IP 주소의 50%를 차지한다. B 클래스는 앞이 10으로 시작되고, C 클래스는 앞이 110으로 시작된다.
서브넷은 하나의 IP 네트워크 주소를 네트워크 내부에서 적절히 분할하여 여러 개의 서로 연결된 지역 네트워크로 사용하는 것이다.
내부적으로 여러개의 서브넷을 만드는 과정을 서브넷팅이라 부른다. 이를 위해서, 서브넷 마스크를 사용한다. 클래스 A에 대한 서브넷 마스크는 255.0.0.0이다. 클래스 C에 대한 서브넷 마스크는 255.255.255.0이다.
만약, C 클래스에 대하서 서브넷 마스크가 255.255.255.224인 경우에, 11111111.11111111.11111111.11100000 이 서브넷 마스크가 되는 것이다. 이는 호스트 주소 중에서 3비트를 서브넷 주소로 사용하겠다는 의미이다. 이는 3비트니까, 8개의 작은 서브넷으로 구성되어 있다는 이야기이다.
예제 1) 호스트IP 주소가 128.66.12.1 이고서브넷 마스크가 255.255.255.0일 때, 이들의관계를설명하라.
이는 128이니 클래스 B 주소이다. 서브넷 마스크가 255.255.255.0이기 때문에 앞의 3바이트를 네트워크 주소로 사용하고, 나머기 1바이트를 호스트 주소로 사용하겠다는 의미이다. 또한 추가적인 서브넷의 수는 256-2개이다. (2개는 예약)
예제2) 호스트 IP 주소가 140.97.35.132 이고, 서브넷 마스크가 255.255.255.192 일 경우, 이들의관계를설명하시오.
140으로 시작하는 경우 클래스 B의 IP 주소이다. 서브넷 마스크는 11111111.11111111.11111111.11000000 이다. 때문에 앞의 26비트가 네트워크 주소로 사용되고, 나머지 6비트가 호스트 주소로 사용된다. 때문에, 140.97.35.132에서 호스트 주소는 132 - 128이 되며, 4가 된다. 140.97.35.128 내에 있는 4번째 호스트를 의미한다.
패킷
패킷은 네트워크에서 전송되는 데이터의 기본 단위로, 일정한 구조를 가진다. 패킷의 구조는 캡슐화(Encapsulation) 과정을 통해 형성되며, 이는 상위 계층의 데이터에 하위 계층의 헤더를 추가하는 과정이다.
헤더(Header): 패킷의 전송과 처리에 필요한 제어 정보를 포함한다. 소스 주소(출발지 주소)와 목적지 주소, 패킷의 길이, 순서 번호, 프로토콜 식별자 등의 정보를 가진다.
페이로드(Payload) 또는 데이터(Data): 실제 전송되는 데이터를 포함한다.상위 계층(예: 응용 계층)에서 전달된 데이터이다.
트레일러(Trailer) 또는 푸터(Footer): 패킷의 끝을 나타내며, 오류 검사 정보 등을 포함한다.
캡슐화와 디캡슐화 과정을 통해 데이터는 출발지에서 목적지까지 전달되며, 각 계층에서는 자신의 기능을 수행하기 위해 필요한 정보를 헤더에 추가하거나 제거한다. 패킷 기반 통신과 인터넷 사용은 네트워크 아키텍처의 단순화, 종단 시스템의 역할 강화, 자원 공유의 효율성, 개방성과 확장성 등의 이점을 제공한다. 종단 시스템이 더 많은 기능을 담당하고, 네트워크 코어는 단순화되어 효율적이고 안정적인 데이터 전송을 가능하게 한다.
패킷 헤더
헤더의 크기는 20바이트 이며, 뒤에 데이터가 붙는다.
주요 필드와 특징은 다음과 같습니다:Version: IP 프로토콜 버전 번호 (IPv4 또는 IPv6)Header Length: IP 헤더의 길이 (단위: 바이트) Type of Service: 데이터의 유형과 우선순위 지정Total Length:IP 데이터그램 전체 길이 (단위: 바이트) Identification: 단편화/재조립을 위한 식별자Flags: 단편화 제어를 위한 플래그 비트 Fragment Offset: 단편화된 데이터그램의 오프셋 값Time to Live: 데이터그램이 네트워크에 남을 수 있는 최대 홉 수 Protocol: 페이로드를 전달할 상위 계층 프로토콜 (TCP, UDP 등)Header Checksum:헤더의 오류 검사를 위한 체크섬
Source IP Address: 출발지 IP 주소 (32비트) Destination IP Address: 목적지 IP 주소 (32비트) Options: 추가 옵션 (타임스탬프, 경로 기록, 방문할 라우터 목록 등)
일반적으로 IP 헤더는 20바이트, TCP 헤더도 20바이트로 총 40바이트의 오버헤드가 발생하며, 여기에 애플리케이션 계층의 오버헤드가 추가됩니다. IP 데이터그램은 가변 길이를 가지며, 보통 TCP나 UDP 세그먼트를 담아 전송합니다.
IP 단편화와 재조립
IP 단편화(fragmentation)와 재조립(reassembly)은 인터넷 프로토콜(IP)에서 대용량 데이터그램을 전송할 때 사용되는 기술
네트워크 링크마다 MTU(Maximum Transmission Unit)라는 최대 전송 단위가 있습니다. 이는 링크 계층에서 전송할 수 있는 가장 큰 프레임 크기를 의미합니다. 서로 다른 링크 유형은 서로 다른 MTU를 가질 수 있습니다. 큰 IP 데이터그램이 네트워크 내에서 MTU보다 클 경우, 이를 여러 개의 작은 데이터그램으로 분할하는 것을 "단편화(fragmentation)"라고 합니다. 단편화된 데이터그램은 최종 목적지에서만 "재조립(reassembly)"됩니다. 중간 라우터에서는 재조립하지 않습니다. IP 헤더의 특정 비트(Identification, Flags, Fragment Offset)가 관련된 단편들을 식별하고 순서를 정하는 데 사용됩니다.
단편화 과정은 다음과 같습니다: 출발지에서 큰 IP 데이터그램을 생성합니다. 데이터그램이 전송되는 경로 상의 라우터에서MTU보다 큰 데이터그램을 발견하면, 이를 MTU에 맞게 여러 개의 작은 단편으로 분할합니다. 각 단편은 독립적인 IP 데이터그램이 되어 네트워크를 통해 전송됩니다. 이때 IP 헤더의 식별자, 플래그, 단편 오프셋 필드를 사용하여 단편들을 식별하고 순서를 지정합니다. 최종 목적지에 도착한 단편들은 IP 헤더 정보를 사용하여 원래의 데이터그램으로 재조립됩니다.
단편화와 재조립은 IP 계층에서 처리되므로, 상위 계층 프로토콜(TCP, UDP 등)은 이를 인식하지 못합니다. 단편화는 네트워크 성능에 영향을 미칠 수 있으므로, 가능한 한 단편화를 피하는 것이 좋습니다.
예시)
IP 단편화와 재조립 예시를 통해 자세히 살펴보겠습니다.
예를 들어, 4000바이트 크기의 IP 데이터그램을 MTU가 1500바이트인 네트워크로 전송해야 한다고 가정해 보겠습니다.
1. 첫 번째 단편:
- ID = x (원래 데이터그램의 식별자)
- Offset = 0 (단편 오프셋)
- Fragment Flag = 1 (마지막 단편이 아님을 나타냄)
- Total Length = 1500 (헤더 + 데이터)
- 데이터 필드에는 1480바이트를 담을 수 있습니다. (1500 - 20바이트 IP 헤더)
2. 두 번째 단편:
- ID = x (동일한 식별자)
- Offset = 185 (단편 오프셋, 185 * 8 = 1480바이트)
- Fragment Flag = 1 (마지막 단편이 아님)
- Total Length = 1500
- 데이터 필드에 1480바이트를 담습니다.
3. 세 번째 단편 (마지막):
- ID = x (동일한 식별자)
- Offset = 370 (단편 오프셋, 370 * 8 = 2960바이트)
- Fragment Flag = 0 (마지막 단편임을 나타냄)
- Total Length = 1040 (헤더 + 남은 데이터)
- 데이터 필드에 남은 1020바이트를 담습니다.
단편 오프셋은 8바이트 단위로 계산되므로, 1480바이트는 185 * 8로 표현됩니다.
최종 목적지에서는 동일한 ID를 가진 단편들을 모아 오프셋 순서대로 정렬한 후, 데이터를 연결하여 원래의 4000바이트 데이터그램으로 재조립합니다. 재조립 과정에서 Fragment Flag를 확인하여 마지막 단편을 식별하고, 모든 단편이 도착했는지 확인합니다.
이렇게 IP 단편화와 재조립을 통해 큰 데이터그램을 MTU에 맞게 분할하여 전송하고, 목적지에서 원래의 데이터그램으로 복원할 수 있습니다.
라우터
라우터의 주요 역할: 라우팅 알고리즘과 프로토콜을 소프트웨어적으로 수행하여 최적의 경로를 결정합니다. 입력 포트에서 출력 포트로 패킷을 하드웨어적으로 전달(포워딩)합니다.
라우터의 기본 동작:
입력 포트로 들어온 패킷은 포워딩 테이블을 참조하여 적절한 출력 포트로 전달됩니다. 이 과정에서라우팅(경로 결정)과 포워딩(패킷 전달)이 이루어집니다.라우팅은 소프트웨어적으로 처리되며, 라우팅 프로세서가 담당합니다.포워딩은 하드웨어적으로 처리되며, 고속 스위치(switching fabric)가 사용됩니다.
코어 네트워크 문제 발생 시 동작:
연속적으로 응답이 없는 경우(time out) 또는 코어 네트워크 문제 발생 시, 호스트는 패킷 손실(loss)이 발생했다고 판단합니다. 이 경우, 호스트는 패킷 전송 속도를 줄여 네트워크 혼잡을 완화하려 합니다. 이를 혼잡 제어(Congestion Control)라고 하며, 호스트가 자체적으로 판단하고 수행합니다.
혼잡 제어와 달리, 흐름 제어(Flow Control)은 목적지 호스트가 송신 호스트에게 수신 가능한 데이터 양을 알려주는 것입니다.
스위칭 패브릭의 종류:
메모리를 통한 스위칭: 초기 방식으로,CPU가 버퍼와 메모리 간 패킷 복사를 관리합니다. 메모리 대역폭 제한으로 인해 속도가 느립니다.
버스를 통한 스위칭: 버스 경합(Bus Contention) 문제가 발생할 수 있으며, 버스 대역폭에 의존적입니다.
상호연결 네트워크를 통한 스위칭:크로스바 구조등을 사용하여 확장성을 개선한 최신 방식입니다.
출력 포트의 역할: 버퍼링과 스케줄링을 수행합니다. 혼잡으로 인해 버퍼가 부족해지면 패킷 손실이 발생할 수 있습니다. 우선순위에 따른 패킷 스케줄링을 수행하여 QoS를 보장할 수 있습니다.
출력 포트 큐잉(Output Port Queueing): 출력 포트의 버퍼가 가득 차면 큐잉(지연)과 패킷 손실이 발생합니다. 들어오는 패킷의 양이 나가는 패킷의 양보다 훨씬 많을 때 주로 발생합니다.
입력 포트 큐잉(Input Port Queueing): 스위칭 패브릭의 속도가 입력 포트의 속도보다 느릴 때 발생합니다. 입력 버퍼가 가득 차면서 문제가 발생합니다.
HOL(Head-of-Line) 블로킹: 여러 입력 포트가 동일한 출력 포트로 패킷을 전송하려 할 때, 한 패킷이 전송되지 못하면 다른 패킷들도 전송이 블로킹되는 현상입니다.
포워딩과 라우팅
### 포워딩(Forwarding)과 라우팅(Routing): 포워딩은 패킷을 입력 포트에서 출력 포트로 전송하는 과정입니다. 라우터는 패킷의 목적지 IP 주소를 확인하고, 포워딩 테이블을 참조하여 해당 패킷을 적절한 출력 포트로 전송합니다. 포워딩은 주로 하드웨어적으로 처리되며, 고속으로 이루어집니다. 라우팅은 소스에서 목적지까지 패킷을 전송하기 위한 최적의 경로를 결정하는 과정입니다. 라우터는 라우팅 테이블을 참조하여 패킷의 목적지까지의 경로를 결정합니다. 라우팅 알고리즘(예: 최단 경로 알고리즘)을 사용하여 최적의 경로를 계산합니다. 각 라우터는 자신이 최선이라고 판단한 경로로 패킷을 전송하지만, 전체 네트워크 관점에서는 최적이 아닐 수 있습니다. 라우터는 주기적으로 라우팅 정보를 교환하고 업데이트하여 최신의 네트워크 토폴로지 정보를 유지합니다.
### 네트워크 서비스 모델과 인터넷의 패킷 네트워크: 인터넷은 패킷 교환 네트워크로, 네트워크 계층에서는 호스트 간 연결 설정(콜 설정)이 없습니다.라우터는 각 패킷을 독립적으로 처리하며, 종단 간 상태 정보를 유지하지 않습니다. 패킷은 목적지 호스트의 IP 주소를 기반으로 전송되며, 라우터는 네트워크 주소를 보고 라우팅을 수행합니다.
### 패킷 포워딩 테이블과 최장 접두사 매칭(Longest Prefix Matching):포워딩 테이블은 목적지 IP 주소와 해당 주소로 패킷을 전송할 출력 포트의 매핑을 포함합니다. 하지만 실제 네트워크에서는 주소 범위가 항상 깔끔하게 나뉘지 않을 수 있습니다. 이 경우 다음과 같은 방법으로 처리할 수 있습니다. 패킷의 목적지 주소와 일치하는 가장 긴 접두사를 가진 포워딩 테이블 항목을 사용하여 출력 포트를 결정합니다. 이를 통해 대규모 네트워크에서도 효율적인 패킷 포워딩이 가능합니다.
### 컨트롤 플레인: 네트워크 토폴로지가 변경되면(예: 라우터 장애), 변경 사항이 모든 라우터에게 즉시 전파되지는 않습니다. 라우팅 프로토콜을 통해 라우터 간에 라우팅 정보가 교환되고 업데이트됩니다. 일부 라우터는 토폴로지 변경을 먼저 인지하고, 이를 다른 라우터에게 전파합니다. 결국 모든 라우터의 라우팅 테이블이 업데이트되어 네#트워크 토폴로지 변경을 반영하게 됩니다.
IP 주소
IP 주소 개요:
- IP 주소는 호스트와 라우터 인터페이스를 식별하는 32비트 식별자입니다.
- 인터페이스는 호스트/라우터와 물리적 링크 사이의 연결입니다.
- 라우터는 일반적으로 여러 개의 인터페이스를 가집니다.
- 호스트는 보통 1-2개의 인터페이스(예: 유선 이더넷, 무선 Wi-Fi)를 가집니다.
- 각 인터페이스에는 IP 주소가 할당됩니다.
- 유선 이더넷 인터페이스는 이더넷 스위치로 연결됩니다.
subnet
서브넷 (Subnets)
IP 주소는 두 부분으로 나뉩니다:
- 서브넷 부분 - 상위 비트
- 호스트 부분 - 하위 비트
서브넷이란 무엇일까요?
- IP 주소의 서브넷 부분이 동일한 장치 인터페이스들의 집합입니다.
- 이 인터페이스들은 중간에 라우터 없이 물리적으로 서로 도달할 수 있습니다.
서브넷을 확인하는 방법:
1. 각 인터페이스를 호스트나 라우터에서 분리하여 고립된 네트워크 섬들을 만듭니다.
2. 이렇게 고립된 각 네트워크를 서브넷이라고 부릅니다.
그림에서 총 몇 개의 서브넷이 있을까요? 그림을 잘 살펴보면서 세어보세요.
## CIDR, DHCP
CIDR (Classless InterDomain Routing)
- IP 주소의 서브넷 부분 길이가 가변적
- 주소 형식: a.b.c.d/x (x는 주소의 서브넷 부분 비트 수)
호스트가 IP 주소를 받는 방법
1. 시스템 관리자가 파일에 직접 설정
- Windows: 제어판 -> 네트워크 -> 구성 -> TCP/IP -> 속성
- UNIX: /etc/rc.config
2. DHCP (Dynamic Host Configuration Protocol)
- 서버로부터 동적으로 주소를 받음
- 네트워크 연결 시 자동 설정 가능
DHCP 개요
- 호스트가 네트워크에 참여할 때 네트워크 서버로부터 IP 주소를 동적으로 얻을 수 있게 해줌
- 사용 중인 주소에 대한 임대 갱신 가능
- 주소 재사용 허용 (연결된 동안에만 주소 보유)
- 네트워크에 참여하려는 모바일 사용자 지원
DHCP는 할당된 IP 주소 외에도 다음 정보를 제공할 수 있음
- 클라이언트의 첫 번째 홉 라우터 주소
- DNS 서버의 이름과 IP 주소
- 네트워크 마스크 (주소의 네트워크 부분과 호스트 부분을 구분)
DHCP(Dynamic Host Configuration Protocol) 클라이언트-서버 시나리오를 단계별로 보여주고 있습니다.
이 그림은 DHCP(Dynamic Host Configuration Protocol) 클라이언트-서버 시나리오를 단계별로 보여주고 있습니다.
1. 도착하는 클라이언트(arriving client)는 DHCP 서버(223.1.2.5)에 DHCP Discover 메시지를 브로드캐스트합니다. 이 메시지는 4계층(UDP)의 소스 포트 68번, 목적지 포트 67번을 사용(정해진 포트)하며, 3계층에서는 0.0.0.0/브로드캐스트 주소(255.255.255.255)로 전송됩니다. 2계층에서는 자기 MAC 주소와 ff:ff:ff:ff의 브로드캐스트 MAC 주소를 사용합니다.
2. DHCP 서버는 DHCP Offer 메시지를 클라이언트에게 유니캐스트 or 브로드캐스트로 전송합니다. 이 메시지는 4계층에서 소스 포트 67번, 목적지 포트 68번을 사용하며, 3계층에서는 223.1.2.5/브로드캐스트 주소를 사용합니다. 또한, 임대 기간(lifetime) 정보를 포함하고 있습니다. DHCP를 위한 PORT 가 맞는지 확인하기 위해 4계층까지 올라가야 하는 오버헤드가 존재함. 조건이 맞다면, IP 주소를 할당하여 이를 호스트에게 보내준다.
3. 클라이언트는 DHCP Request 메시지를 다시 브로드캐스트하여 IP 주소를 요청합니다. 메시지 구성은 1단계와 유사합니다.
4. DHCP 서버는 DHCP ACK 메시지를 클라이언트에게 유니캐스트로 전송하여 IP 주소 할당을 확인합니다. 이 메시지에는 할당된 IP 주소(223.1.2.4)와 임대 기간 정보가 포함됩니다.
네트워크가 서브넷 부분 IP 주소를 받는 방법
- 제공 ISP의 주소 공간 중 할당된 부분을 받음
DHCP는 엑세스 포인트에서 동작 (응용 계층)하며, 사설 IP 주소(192.168.x.x)를 할당합니다. ISP는 사용자에게 공인 IP를 제공하고, 이를 엑세스 포인트에 할당합니다. 라우터는 공인 IP와 사설 IP(192.168.0.1)를 모두 가질 수 있습니다.
IP 주소는 계층적으로 할당됩니다. ISP는 서브넷 마스크를 사용하여 IP 주소 범위를 할당합니다. 예를 들어, 서브넷 마스크가 20비트인 경우, 할당된 IP 주소의 상위 20비트는 동일합니다. 브로드캐스트 시, 게이트웨이는 서브넷 마스크의 비트 수(예: 20비트)를 기준으로 패킷을 전달합니다. ISP의 라우터는 기관에 더 구체적인 라우트(예: 23비트)를 제공할 수 있습니다. 서브넷 마스크 비트 수가 혼동되는 경우, Longest Prefix Matching을 통해 가장 길게 매핑되는 경로로 패킷을 전송합니다.
NAT
1. NAT(Network Address Translation)는 IP 주소 낭비를 방지하기 위해 사용되는 기술입니다.
2. 공인 IP(public IP)는 라우터가 인지하는 정보입니다.
3. 사설 IP(private IP)는 내부에서 사용되며, 라우팅 테이블에 포함되지 않습니다.
4. 192.168.0.x/24는 내부 주소로, 254개의 호스트를 관리할 수 있습니다. (/24는 서브넷 마스크가 24비트임을 의미)
5. ISP는 기관에게 서브넷을 할당할 수 있습니다. 예를 들어, 서브넷 마스크가 23비트인 경우, 8개의 기관에게 IP 주소 범위를 나누어 줄 수 있습니다.
6. 모든 라우터는 경로를 찾아야 하며, 이를 위해 경로 정보를 전파합니다. 시간이 지나면 모든 라우터가 경로 정보를 알게 됩니다.
NAT를 사용하는 동기: 외부 세계에서 볼 때 로컬 네트워크는 하나의 IP 주소만 사용합니다. ISP로부터 많은 IP 주소 범위가 필요하지 않고, 모든 장치에 대해 하나의 IP 주소만 있으면 됩니다. 외부에 알리지 않고도 로컬 네트워크 내 장치의 주소를 변경할 수 있습니다. ISP를 변경해도 로컬 네트워크 내 장치의 주소를 변경할 필요가 없습니다. 로컬 네트워크 내 장치는 외부에서 직접 주소 지정되거나 보이지 않습니다(보안상 이점). 로컬 네트워크를 떠나는 모든 데이터그램은 동일한 단일 소스 NAT IP 주소(138.76.29.7)를 가지지만, 서로 다른 소스 포트 번호를 사용합니다. 이 네트워크 내에서 출발하거나 도착하는 데이터그램은 소스와 목적지로 192.168.0/24 주소를 가집니다(일반적인 경우).
NAT 라우터의 구현:
- 나가는 데이터그램: 모든 나가는 데이터그램의 (소스 IP 주소, 포트 번호)를 (NAT IP 주소, 새 포트 번호)로 대체합니다. 원격 클라이언트/서버는 (NAT IP 주소, 새 포트 번호)를 목적지 주소로 사용하여 응답합니다.
- 들어오는 데이터그램: 모든 들어오는 데이터그램의 목적지 필드에서 (NAT IP 주소, 새 포트 번호)를 NAT 테이블에 저장된 해당 (소스 IP 주소, 포트 번호)로 대체합니다.
- NAT 변환 테이블에 모든 (소스 IP 주소, 포트 번호)에서 (NAT IP 주소, 새 포트 번호)로의 변환 쌍을 기억합니다.
NAT(Network Address Translation) 프로세스는 다음과 같이 작동합니다:
1. 호스트 10.0.0.1이 128.119.40.186의 80번 포트로 데이터그램을 보냅니다.
- 이 데이터그램은 로컬 네트워크 내에서 사설 IP 주소(10.0.0.1)와 임의의 소스 포트 번호(3345)를 사용합니다.
2. NAT 라우터는 데이터그램의 소스 주소를 10.0.0.1:3345에서 138.76.29.7:5001로 변경합니다.
- 라우터는 NAT 변환 테이블을 업데이트하여 (10.0.0.1, 3345)와 (138.76.29.7, 5001) 간의 매핑을 저장합니다.
- 이제 외부 네트워크에서는 데이터그램이 공인 IP 주소 138.76.29.7에서 온 것처럼 보입니다.
3. 응답 데이터그램이 도착하면, 목적지 주소는 138.76.29.7:5001입니다.
- 이는 NAT 라우터가 이전에 변환한 주소와 포트 번호입니다.
4. NAT 라우터는 NAT 변환 테이블을 참조하여 목적지 주소를 138.76.29.7:5001에서 10.0.0.1:3345로 변경합니다.
- 이제 데이터그램은 로컬 네트워크 내의 원래 호스트(10.0.0.1)로 전달됩니다.
이 과정을 통해 NAT는 로컬 네트워크의 사설 IP 주소를 외부 네트워크에서 사용되는 공인 IP 주소로 변환합니다. 이를 통해 제한된 수의 공인 IP 주소를 사용하여 많은 수의 장치가 인터넷에 접속할 수 있게 되며, 로컬 네트워크의 주소 체계를 숨겨 보안을 향상시킵니다.
NAT 라우터가 변환 테이블에 (내부 IP 주소, 내부 포트 번호)와 (외부 IP 주소, 외부 포트 번호) 간의 매핑을 기록하는 이유는 다음과 같습니다:
NAT 통과 문제(NAT Traversal Problem)는 NAT 라우터 뒤에 위치한 서버와 외부 클라이언트 간의 통신을 설정하는 데 발생하는 어려움을 말합니다. 변환 테이블이 없다면, 라우터는 응답 패킷을 어디로 보내야 할지 알 수 없습니다.
문제 상황:
- 클라이언트가 주소 10.0.0.1을 가진 서버에 연결하려고 합니다.
- 그러나 서버 주소 10.0.0.1은 LAN에 로컬이므로, 클라이언트는 이를 목적지 주소로 사용할 수 없습니다.
- 외부에서 보이는 NAT 주소는 138.76.29.7 뿐입니다.
해결책 1: NAT를 정적으로 구성하여 주어진 포트에서 들어오는 연결 요청을 서버로 전달합니다.
- 예를 들어, (123.76.29.7, 포트 2500)으로 오는 연결 요청은 항상 10.0.0.1의 25000번 포트로 전달됩니다.
- 이 방법은 NAT 라우터에서 포트 포워딩 규칙을 수동으로 설정해야 하므로 유연성이 떨어집니다.
이 문제는 NAT가 외부 네트워크에서 들어오는 연결 요청을 로컬 네트워크의 특정 장치로 자동으로 전달할 수 없기 때문에 발생합니다. 따라서 NAT 통과를 위해서는 포트 포워딩과 같은 추가 설정이 필요합니다.
** DHCP와 NAT는 응용 프로그램임. ** o.x 나온다.
ICMP(Internet Control Message Protocol)는 호스트와 라우터 간에 네트워크 수준의 정보를 교환하는 데 사용됩니다. 주요 기능으로는 오류 보고(unreachable host, network, port, protocol)와 에코 요청/응답(ping에 사용)이 있습니다. ICMP 메시지는 IP 데이터그램 내에서 전송되며, 오류를 발생시킨 IP 데이터그램의 첫 8바이트와 함께 유형 및 코드 정보를 포함합니다. ICMP(Internet Control Message Protocol)은 호스트와 라우터가 네트워크 계층 정보를 통신하는 데 사용하는 프로토콜입니다. 보낸 애한테 무슨 문제 생겼는지 알려주는거임. 알려줄 때, 헤더가 왜 보냈냐 들어감. 내용물은 원래 문제가 된 패킷이 들어감. 왜?? 헤더 보면 어떤 패킷인지 알아야 하니까. IP 헤더가 같이 들어가. 문제 생긴 패킷 일부분 보내. 받은애는 그럼. 이 패킷에서 문제(ICMP 헤더라는)가 생겨서 어떤 패킷에서 문제가 생겼는지 아는 역할이다.
Traceroute는 ICMP를 활용하여 목적지까지의 경로를 추적합니다. 출발지에서 TTL(Time to Live) 값을 증가시키며 UDP 세그먼트를 보내고, 각 라우터에서 TTL이 만료되면 ICMP 타입 11 코드 0 메시지를 전송합니다. 이를 통해 각 라우터의 이름과 IP 주소를 얻을 수 있습니다. 목적지 호스트에 도달하면 ICMP 타입 3 코드 3 메시지(port unreachable)를 반환하고 추적을 중단합니다.
ICMP 메시지에는 다양한 유형과 코드가 있으며, 에코 응답(0, 0), 목적지 unreachable(3, 0~3), 소스 혼잡 제어(4, 0), 에코 요청(8, 0), 라우터 광고(9, 0), 라우터 발견(10, 0), TTL 만료(11, 0), 잘못된 IP 헤더(12, 0) 등이 포함됩니다.
IPv4와 IPv6 라우터가 혼재된 상태에서 네트워크가 어떻게 작동할까요?
터널링(Tunneling):
- 전환 과정에서 IPv4와 IPv6 라우터가 혼재된 네트워크에서는 터널링 기술이 사용됩니다.
- IPv6 데이터그램이 IPv4 데이터그램의 페이로드로 캡슐화되어 IPv4 라우터 간에 전송됩니다.
- 이를 통해 IPv6 패킷은 IPv4 인프라를 통해 전송될 수 있으며, 점진적인 전환이 가능해집니다.
1. IPv6 패킷을 IPv4 패킷으로 캡슐화할 때, IPv6 패킷은 IPv4 패킷의 내용물(payload)로 들어갑니다.
2. 캡슐화된 IPv4 패킷의 소스 주소는 이전 IPv6 라우터의 IPv4 주소이고, 목적지 주소는 다음 IPv6 라우터의 IPv4 주소입니다.
3. 캡슐화된 IPv4 패킷은 IPv4 네트워크를 통과하여 목적지 IPv6 라우터까지 전달됩니다. 이 과정에서 패킷은 직접 전달되거나, 중간에 다른 IPv4 라우터를 거쳐 전달될 수 있습니다.
4. 목적지 IPv6 라우터에 도착한 IPv4 패킷은 캡슐화가 해제되고, 내부의 IPv6 패킷이 꺼내어져 IPv6 네트워크에서 전달됩니다.
터널링 과정에서 중요한 점은 IPv6 패킷이 IPv4 네트워크를 통과할 수 있도록 캡슐화되어 전송된다는 것입니다. 중간에 IPv4 라우터를 거치거나, IPv6 라우터를 만나더라도 IPv4 패킷은 계속 전달될 수 있습니다.
'대학수업 > 네트워크' 카테고리의 다른 글
[네트워크] 라우팅 알고리즘 (OSI 3계층) (0) | 2024.06.12 |
---|---|
[Network] Congestion Control (0) | 2024.05.31 |
TCP (0) | 2024.05.24 |
[네트워크] DataLink layer (0) | 2024.04.21 |
[네트워크] Network Overview (0) | 2024.04.21 |