티스토리 뷰
4.3 인터넷 프로토콜(IP): IPv4, 주소 지정, IPv6 등
현재 사용 중인 IP는 두 가지 버전 IPv4와 IPv6이 있다.
4.3.1 IPv4 데이터그램 형식
- 버전 번호
- 4비트
- 데이터그램의 IP 프로토콜 버전을 명시
- 라우터는 버전 번호를 확인하여 데이터그램의 나머지 부분을 어떻게 해석할지 결정
- 헤더 길이
- 네비트로 IP 데이터그램에서 실제 페이로드가 시작하는 곳을 결정
- IPv4 데이터그램은 헤더에 가변 길이와 옵션을 포함하므로
- 대부분 IPv4 데이터그램은 옵션을 포함하지 않으므로 대체로 IPv4 데이터그램 헤더는 20바이트이다.
- 네비트로 IP 데이터그램에서 실제 페이로드가 시작하는 곳을 결정
- 서비스 타입(TOS)
- 서로 다른 유형의 IP 데이터그램을 구별
- 데이터그램 길이
- 바이트로 계산한 IP 데이터그램(헤더와 데이터)의 전체 길이
- 식별자, 플래그, 단편화 오프셋:
- IP 단편화와 관계 있음.(뒤에서 살펴봄)
- TTL(Time-to-live)
- 네트워크에서 데이터그램이 무한히 순환하지 않도록 함.
- 프로토콜
- 데이터 부분이 전달될 목적지의 전송 계층의 특정 프로토콜을 명시함.
- 예) 값 6은 데이터부분을 TCP로, 값 17은 UDP로 데이터를 전달하라는 의미
- 프로토콜 번호는 네트워크 계층과 전송 계층을 묶는 역할을 한다.
- 데이터 부분이 전달될 목적지의 전송 계층의 특정 프로토콜을 명시함.
- 헤더 체크섬
- 라우터가 수신한 IP 데이터그램의 비트 오류를 탐지하는데 도움을 줌.
- 출발지와 목적지 IP 주소
- 출발지가 데이터그램을 생성할 때, 자신의 IP 주소를 출발지 IP 주소 필드에 삽입하고 목적지 IP 주소를 목적지 IP 주소 필드에 삽입한다.
- 옵션
- 옵션 헤더는 IP 헤더를 확장
- 헤더 옵셥은 거의 사용되지 않음.
- 모든 데이터그램 헤더 옵션 필드에 정보를 포함하지 않는 방법으로 오버헤드를 해결하기 위해
- 데이터(페이로드)
- 전송 계층 세그먼트(TCP나 UDP)를 포함하지만 ICMP 메시지와 같은 다른 유형의 데이터를 담기도 함.
4.3.2 IPv4 데이터그램 단편화
MTU(maximum transmission unit)
- 링크 계층 프레임이 전달할 수 있는 최대 데이터 양
각 IP 데이터그램은 한 라우터에서 다른 라우터로 전송하기 위해 링크 계층 프레임 내에 캡슐화되므로 링크 계층 프로토콜의 MTU는 IP 데이터그램 길이에 엄격한 제한을 둔다.
- IP 데이터그램의 크기 제약은 문제가 되지 않는다.
😮 문제는
송신자와 목적지 간의 경로를 따르는 각 링크가 다른 링크 계층 프로토콜을 사용할 수 있고
각 프로토콜이 서로 다른 MTU를 가질 수 있다는 점이다.
🙂 해결책은
IP 데이터그램의 페이로드를 두 개 이상의 더 작은 IP 데이터그램으로 분할하고
각각의 더 작아진 IP 데이터그램을 별도의 링크 계층 프레임으로 캡슐화하여 출력 링크로 보내는 것이다.
이러한 작은 데이터그램 각각을 조각(fragment, 단편)이라고 한다.
조각들은 목적지 전송 계층에 도달하기 전에 재결합되어야 한다.
- 네트워크 코어를 간단하게 유지하는 원칙을 고수하기 위해 IPv4 설계자는 네트워크 라우터가 아닌 종단 시스템에서 데이터그램 재결합을 하도록 결정했다.
목적지 호스트가 같은 출발지로부터 일련의 데이터그램을 수신하면
데이터그램이 원본 데이터그램의 조각인지 판단해야 한다.
데이터그램의 조각이라 판단되면
마지막 조각을 수신할 때 원본 데이터그램을 만들기 위해 조각을 결합하는 방법을 결정해야 한다.
목적지 호스트가 이러한 재결합을 수행할 수 있도록 IPv4 설계자는 식별자, 플래그, 단편화 오프셋 필드를 IP 데이터그램 헤더에 찍어 넣었다.
식별자
데이터그램을 만들 때, 송신 호스트는 출발지 주소, 목적지 주소 + 식별자 번호를 데이터그램에 포함시킨다.
- 일반적으로 송신 호스트는 보내는 각 데이터그램마다 식별자 번호를 증가시킨다.
- 라우터가 데이터그램을 단편화시킬 필요가 있을 때, 단편화된 결과인 데이터그램(조각)은 출발지 주소, 목적지 주소, 원본 데이터그램의 식별자 정보를 포함한다.
- 어느 원본의 데이터그램 조각인지 결정하기 위해 데이터그램의 식별자 번호를 검사한다.
플래그
IP는 신뢰할 수 없는 서비스를 제공하므로 하나 이상의 조각이 도착하지 못할 수 있다.
- 목적지 호스트가 원본 데이터그램의 마지막 조각을 수신했음을 확신하기 위해
- 마지막 데이터그램 조각의 플래그 비트는 0으로,
다른 모든 조각의 플래그 비트는 1로 설정된다.
단편화 오프셋
- 오프셋 필드는 조각이 분실되었는지 결정하기 위해, 원본 데이터그램 내에 조각의 위치를 명시하기 위해 사용된다.
4.3.3 IPv4 주소체계
호스트는 일반적으로 네트워크와 연결되는 하나의 링크를 가진다.
호스트와 물리적 링크 사이의 경계를 인터페이스라고 부른다.
- 라우터의 작업은 한 링크로부터 데이터그램을 수신하여 다른 링크로 전달하는 것이므로 라우터는 2개 이상의 연결된 링크가 필요하다.
- 라우터와 이런 링크 사이의 경계 또한 인터페이스라 하는데 각 링크마다 하나의 인터페이스를 가지고 하나의 라우터는 여러 개의 인터페이스를 가진다.
- 모든 호스트와 라우터는 IP 데이터그램을 송수신할 수 있으므로 IP는 각 호스트와 라우터 인터페이스가 IP 주소를 갖도록 요구한다. 따라서 기술 면에서 IP 주소는 인터페이스를 포함하는 호스트 라우터보다는 인터페이스와 관련이 있다.
IP 주소
- 32비트(4바이트)
- 2의 32승 개의 주소가 사용 가능
- 일반적으로 십진 표기법 사용
- 주소의 각 바이트를 십진수로 표현하고 주소의 다른 바이트와 점(.)으로 구분
- 예) IP 주소: 193.32.216.9
- 이진수: 11000001 00100000 11011000 00001001
인터페이스의 IP 주소 일부는 연결된 "서브넷"이 결정할 것이다.
- IP 용어로 세 호스트들의 인터페이스들과 하나의 라우터 인터페이스로 연결된 네트워크는 서브넷(subnet)을 구성한다고 말한다.
- 서브넷은 인터넷 인터넷 문서에서 IP 네트워크 또는 간단히 네트워크라고 한다.
서브넷 마스크(subnet mask)
223.1.1.0/24
- /24는 서브넷 마스크
- 32비트 주소의 왼쪽 24비트가 서브넷 주소라는 것을 가리킨다.
✖️네트워크 223.1.1.0/24에 새로 부착할 호스트에는 223.1.1.xxx 형식의 주소가 필요할 것이다.
인터넷 주소 할당 방식
- CIDR(Classless Interdomain Routing)
- 32비트 IP 주소를 두 부분으로 나누고, 이것은 다시 점으로 된 십진수 형태의 a.b.c.d/x를 가지며, 여기서 x는 주소 첫 부분의 비트 수이다.
- x는 IP 주소의 네트워크 부분을 구성한다.
- 프리픽스(prefix) 또는 네트워크 프리픽스라고 부른다.
- 32-x 비트들은 기관 내부에 같은 네트워크 프리픽스를 갖는 모든 장비들을 구별한다고 보면 된다.
- 클래스 주소체계(classful addressing)
- CIDR이 채택되기 전에는 IP 주소의 네트워크 부분을 8, 16, 24비트로 제한했고 8, 16, 24비트 서브넷 주소를 갖는 서브넷을 각각 A, B, C 클래스 네트워크로 분류한 주소체계
- 하지만 C 클래스 /24의 경우 많은 조직을 위해서는 턱없이 부족하고
- B 클래스 서브넷은 너무 커 공간을 빨리 고갈시키고 주소 할당에 있어 형편없는 효율성을 초래한다.
- CIDR이 채택되기 전에는 IP 주소의 네트워크 부분을 8, 16, 24비트로 제한했고 8, 16, 24비트 서브넷 주소를 갖는 서브넷을 각각 A, B, C 클래스 네트워크로 분류한 주소체계
255.255.255.255
- 호스트가 목적지 주소가 255.255.255.255인 데이터그램을 보내면. 이 메시지는 같은 서브넷에 있는 모든 호스트에게 전달된다.
IP 주소체계를 상세히 공부했으니 호스트와 서브넷이 처음에 어떻게 자신의 주소를 인식하는지를 알 필요가 있다.
주소 블록 획득
- 기관의 서브넷에서 사용하기 위한 IP 주소 블록을 얻기 위해, 네트워크 관리자는 먼저 이미 할당 받은 주소의 큰 블록에서 주소를 제공하는 ISP와 접촉해야 한다.
- ISP도 주소 블록을 얻기 위한 방법이 있어야 한다.
- ICANN
- IP 주소 공간을 관리하고 ISP와 다른 조직에 주소 블록을 할당하는 최상위 국제기관
- IP 주소 할당과 DNS 루트 서버관리
- ICANN
호스트 주소 획득: 동적 호스트 구성 프로토콜
- DHCP
- 호스트 ip 주소의 할당뿐만 아니라, 서브넷 마스크, 첫 번째 홉 라우터 주소나 로컬 DNS 서버 주소 같은 추가 정보를 얻게 해준다.
- DHCP의 능력
- 네트워크에서 자동으로 호스트와 연결
- DHCP는 호스트가 빈번하게 접속하고 떠나는 가정 인터넷 접속 네트워크, 엔터프라이즈 네트워크, 무선 LAN에서도 폭넓게 사용한다.
- DHCP는 클라이언트/서버 프로토콜이다.
새로운 호스트가 도착할 경우 위의 그림에서 설정된 네트워크상에서 수행될 DHCP 프로토콜 4단계의 과정을 보여준다.
- DHCP 서버 발견(DHCP server discovery):
- 먼저 새롭게 도착한 호스트는 상호 동작될 DHCP를 발견한다.
- 호스트는 자신이 접속될 네트워크 Ip 주소, 네트워크 DHCP 서버의 주소도 모르므로 DHCP 클라이언트는 DHCP 발견 메시지를 포함하는 IP 데이터그램을 생성하는데, 이 메시지 내의 목적지 IP 주소를 브로드캐스팅 IP 주소 255.255.255.255로 설정하고 출발지 IP 주소는 0.0.0.0으로 설정한다.
- DHCP 클라이언트는 링크 계층으로 IP 데이터그램을 보내며 이 프레임은 서브넷에 연결된 모든 노드로 브로드캐스팅된다.
- DHCP 서버 제공:
- DHCP 발견 메시지를 받은 DHCP 서버는 DHCP 제공 메시지를 클라이언트로 응답한다.
- 이때에도 다시 IP 브로드캐스트 주소 255.255.255.255를 사용하여 서브넷의 모든 노드로 이 메시지를 브로드캐스트한다.
- 서브넷에는 여러 DHCP 서버가 존재하기 때문에 클라이언트는 여러 DHCP 제공 메시지로부터 가장 최적의 위치에 DHCP 서버를 선택한다.
- 각각의 서버 제공 메시지는 수신된 발견 메시지의 트랜잭션 ID, 클라이언트에 제공된 IP 주소, 네트워크 마스크 그리고 IP 주소 임대 기간(IP 주소가 유효한 시간)을 포함한다.
- 서버를 위해 설정하는 임대 시간은 일반적으로 몇 시간 또는 며칠이다.
- DHCP 요청(DHCP request):
- 새롭게 도착한 클라이언트는 하나 또는 그 이상의 서버 제공자 중에서 선택할 것이고 선택된 제공자에게 파라미터 설정으로 되돌아오는 DHCP 요청 메시지로 응답할 것이다.
- DHCP ACK:
- 서버는 DHCP 요청 메시지에 대해 요청된 파라미터를 확인하는 DHCP ACK 메시지로 응답한다.
클라이언트가 DHCP ACK 메시지를 받으면, 상호 동작은 종료되고 클라이언트는 DHCP 할당 IP 주소를 임대 기간 동안 사용할 수 있다.
4.3.4 네트워크 주소 변환(NAT)
사설 주소를 갖는 권역
- 네트워크 주소들이 그 네트워크의 내부에 있는 장비에게만 의미가 있는 그런 네트워크를 의미한다.
🤨
그러나 그 홈 네트워크를 벗어나 글로벌 인터넷으로 가는 패킷 전달은 이 주소들을 사용할 수 없다.
왜냐하면 이 주소들의 블록을 사용하는 수십만 개의 네트워크가 있기 때문이다.
❓❔❓
사설 주소가 주어진 네트워크에서만 의미가 있다면,
패킷의 유일한 주소가 필요한 글로벌 인터넷과의 송수신에서는 어떻게 처리할 수 있을까?
WAN에서 같은 목적지 IP 주소를 갖는 NAT 라우터에 모든 데이터그램이 도착하면, 라우터가 주어진 데이터그램을 전달하는 내부 호스트를 알 수 있는 방법은 무엇인가?
NAT 라우터에서 NAT 변환 테이블(NAT translation table)을 사용하고, 그 테이블에 IP 주소와 포트 번호를 포함하는 것이다.
'CS > 컴퓨터네트워크' 카테고리의 다른 글
[Computer Network] 5. 네트워크 계층: 제어 평면 (0) | 2022.12.05 |
---|---|
[Computer Network] 4.3 인터넷 프로토콜(IP): IPv6, 4.4 일반적인 포워딩 및 소프트웨어 기반 네트워크(SDN) (0) | 2022.11.17 |
[Computer Network] 4.1 네트워크 계층 개요, 4.2 라우터 내부에는 무엇이 있을까? (0) | 2022.11.08 |
[Computer Network] 3. 트랜스포트 계층 (0) | 2022.10.20 |
[Computer Network] 2.7 소켓 프로그래밍: 네트워크 애플리케이션 생성 (0) | 2022.10.13 |