1. IP(Internet Protocol)
- 네트워크 계층의 핵심 프로토콜
- 전송계층에서 TCP 혹은 UDP 헤더를 붙여 만들어진 패킷에 IP 헤더를 붙여 IP 패킷을 생성
- 패킷은 헤더에 명시된 IP 주소를 기반으로 목적지로 전송된다.
- IP 자체는 비연결형 프로토콜이며 신뢰성있는 전송을 보장하지 않는다.(이는 전송계층에서 담당)
2. IP 헤더(IPv6)
- Version
- 현재 사용하는 IP의 버전
- IHL(IP Header Length)
- IP 헤더의 길이(데이터 포함 X)
- TOS(Type of Service)
- 서비스의 우선순위를 표시하기 위한 영역
- Total Length
- 데이터를 포함한 IP패킷 전체의 길이
- Identification / Flags / Fragment Offset
-
- 라우터의 전송가능한 최대 패킷 크기(MTU)가 IP 패킷보다 작아 패킷이 쪼개질 경우
쪼개진 패킷을 다시 재조립하기 위해 필요한 정보를 저장하기 위한 영역 - Identification(16bit) : 어느 패킷의 프래그먼트인지 나타내기 위한 영역
- Flags(3bit) : 패킷 분할 정보를 나타내기 위한 영역. 예를들어 마지막 비트는 뒤에 다른 프래그먼트가
더 있는지 표시되기 위해 사용된다. - Offset(15bit) : 각 프래그먼트의 원본 데이터에서의 인덱스를 나타내는 영역
- 라우터의 전송가능한 최대 패킷 크기(MTU)가 IP 패킷보다 작아 패킷이 쪼개질 경우
- TTL(Time To Live)
- 초기 설정한 값에서 포워딩을 거칠 때마다 1씩 감소
- 패킷에 수명을 주어 무한루프에 빠진 패킷 등이 일정 횟수의 포워딩을 거치면 사라지도록 함
- Protocol(Upper Layer)
- 상위 계층에서 사용될 프로토콜을 명시(TCP/UDP 등)
- Header Checksum
- ip 헤더의 체크섬을 저장 - 최소한의 에러검출
- Source/Destination IP Address
- 출발지, 목적지 IP주소
- Options
- 추가적인 처리 옵션을 정의하기 위한 영역
- 없을 수도 있으며 최대 40바이트까지 사용 가능
3. IP 주소
- 8비트로 표현되는 정수 4개(32비트)로 표현되는 주소체계
=> IPv6의 경우 총 128비트로 주소를 표현한다. 즉, 2 ^ 128 개의 독립적인 주소를 표현할 수 있다.
- IP 주소는 엄밀히 말해 특정 호스트를 가리키는 주소가 아닌 네트워크 인터페이스를 가리키는 주소
=> 라우터와 같이 다수의 인터페이스를 가지는(다수의 IP주소를 가지는) 장비도 존재한다.
- IP의 분배
- 단순히 IP 하나하나를 호스트에게 배분하는 방식을 사용할 경우 포워딩 테이블의 크기가 너무 커지며
포워딩에 걸리는 시간도 너무 길어진다. - IP 계층화
- Network ID 부분과 Host ID 부분을 분리
- ex) 12.34.158.0/24
- 상위 24비트(12.34.158) 까지는 네트워크 ID
- 나머지 8비트(0) 까지는 호스트 ID
- 같은 네트워크에 속하는 호스트들을 동일한 IP prefix로 묶을 수 있게 된다
=> 포워딩 테이블을 보다 간단하게 표현하여 효율적인 포워딩을 가능하게 한다. - 새 호스트에 IP주소를 할당하는 작업도 간단해짐
- 과거에는 네트워크 ID를 부여받는 기관의 규모에 따라 네트워크 ID 비트수를 조정
- A클래스 - 상위 8비트를 네트워크 ID로 사용
- B클래스 - 상위 16비트를 네트워크 ID로 사용
- C클래스 - 상위 24비트를 네트워크 ID로 사용
- 현재는 서브네팅을 사용하여 유동적으로 prefix를 조절
- 서브넷 마스크(Subnet Mask)
- 네트워크 ID가 어디까지인지 컴퓨터가 이해할 수 있도록 표현하는 방식
- ex) 125.23.87.0 이라는 네트워크 ID를 부여받았을 때, 각각 30개의 호스트를 가지는
8개의 서브넷으로 분리하려면 네트워크 ID인 24비트까지의 서브넷마스크는 모두 1,
그 이하로는 8개의 서브넷을 사용하기 위해 3개의 비트를 1로, 나머지를 0으로 하면
0인 부분이 5비트가 되어 32개의 주소를 나타낼 수 있게된다. - 만약 125.23.87.0 에 서브넷마스크가 255.255.255.192라면
- 서브넷의 갯수는 최대 4개이다.
- 각 서브넷의 호스트 범위는 0~63, 64~127, 128~191, 192~255 가 된다.
- 이 중 세 번째 서브넷인 128~191 에서 대표주소는 125.23.87.128이며
브로드캐스트 주소는 125.23.87.191이 된다.
- 네트워크 ID가 어디까지인지 컴퓨터가 이해할 수 있도록 표현하는 방식
- 단순히 IP 하나하나를 호스트에게 배분하는 방식을 사용할 경우 포워딩 테이블의 크기가 너무 커지며
- NAT(Network Address Translation)
- 20년 전에도 이미 IPv4가 지원하는 2 ^ 32 개의 주소만으론 부족할 것으로 예상하여
IPv6를 만들었지만 정작 현재까지도 사용중인것은 여전히 IPv4 이다 - IPv6로의 이전을 위해서는 기존에 사용하던 모든 네트워크 장비를 교체해야하는데,
이는 아직까지는 현실적으로 어려움이 따름 - 결과적으로 IPv4를 그대로 사용하면서도 표현 가능한 주소의 갯수를 늘리기 위해
NAT(Network Address Translation)를 사용 - NAT의 방식
- 로컬 네트워크에서 그 네트워크 내부에서만 유일성을 가지는 IP 주소를 분배
- 네트워크 내부 호스트가 외부 호스트에게 데이터를 전송할 경우 내부 호스트의 IP주소를
전 세계적으로도 유일한 게이트웨이 주소로 변경해주고 외부에서 내부의 호스트에게
데이터를 전송할 경우 내부 IP주소로 변환하여 내부 호스트에게 전달해준다. - 기본적으로는 출발지 IP주소(게이트웨이 주소)와 도착지 IP주소를 통해 내부 IP를 특정하지만
이 방식으로는 다수의 내부 호스트가 같은 목적지와 통신할 경우 구분이 불가능해진다.
이를 해결하기 위해 추가적으로 포트를 구성하여 패킷을 구분하는 PAT 혹은 NAPT 방식을 사용한다.
- NAT 테이블에 기록되는 것은 내부에서 패킷을 전송할 때이기 때문에 클라이언트로써는
문제가 없지만 상대의 요청을 기다려야하는 서버로서는 정상적으로 동작하기 어렵다.
NAT 테이블에 직접 변환정보를 기재하여 서버로서 동작할 수 있게 하는 방법도 있지만
일반 사용자가 할 수 있는 작업은 아니다. - NAT의 또다른 문제는 계층화된 네트워크 구조를 어기고있다는 점이다. 네트워크 계층에서 동작하는
장비인 NAT 라우터가 IP 패킷의 데이터부분(TCP헤더의 포트)을 인지하고 수정까지 하는 규칙위반을
하고있다. (대부분의 사용자는 서버 역할을 할 경우가 없기 때문에 문제를 크게 인지하지 못한다.)
- 로컬 네트워크에서 그 네트워크 내부에서만 유일성을 가지는 IP 주소를 분배
- 20년 전에도 이미 IPv4가 지원하는 2 ^ 32 개의 주소만으론 부족할 것으로 예상하여
- DHCP(Dynamic Host Configuration Protocol)
- DHCP 서버가 네트워크에 연결된 호스트에게 자동으로 IP주소를 대여해주는 방식
- 절차
- DHCP 클라이언트는 네트워크에 연결하기 위해 네트워크 내에서 브로드캐스트(255.255.255.255)로
DHCP 서버에게 IP 주소를 요청하는 패킷을 전송(discover) - DHCP 서버는 요청에 대한 응답으로 대여해줄 IP 주소를 담은 패킷을 전송(offer)
- DHCP 클라이언트는 요청에 응답해준 DHCP 서버중 하나를 선택하여 해당 서버를 선택했음을 알리는
패킷을 브로드캐스트로 전송한다.(request) 이 때, 브로드캐스트를 사용하는 이유는 선택받지 못한
DHCP 서버가 자신의 요청을 더이상 신경 쓸 필요가 없도록 해주기 위해서이다. - 선택받은 DHCP 서버는 request 패킷에 대해 ack 패킷을 보내고 프로토콜이 완료된다.
이후부터 클라이언트측은 대여받은 IP를 통해 통신이 가능해진다.
- DHCP 클라이언트는 네트워크에 연결하기 위해 네트워크 내에서 브로드캐스트(255.255.255.255)로
- 이 과정을 통해 네트워크에 연결된 호스트는 자신과 연결된 DNS 서버와
게이트웨이 라우터의 IP주소를 알게되고 이를 기반으로 포워딩 테이블을 생성하게 된다.
3. 라우터(Router)
- 네트워크 계층의 핵심 장비
- IP 패킷들은 출발지와 목적지 사이를 연결하는 다수의 라우터를 거쳐 전송된다.
- 포워딩(Forwarding)
- 라우터의 가장 기본적인 기능
- 라우터가 가진 포워딩 테이블에 따라 목적지 주소에 매칭되는 방향으로 패킷을 전송
- 목적지 주소 하나하나에 매칭되는 방향을 따로 관리하는 것을 비효율적
=> 엔트리를 주소의 범위 형태로 구성하여 목적지 주소와 가장 많이 일치하는 엔트리와 매칭
- 라우팅(Routing)
- 포워딩을 위한 포워딩 테이블을 생성하는 작업
- 목적지 주소까지의 모든 경로 중 최적의 경로를 탐색
- 라우팅 결과 만들어진 포워딩 테이블은 라우터의 입력 포트에 각각 저장되며 라우터에
도착한 패킷들의 포워딩은 이를 이용하여 각 포트에서 병렬적으로 수행된다.
4. 라우팅 알고리즘
- 연결 상태(Link State) 알고리즘
- 라우터간의 연결 상태정보를 모든 라우터에 전달하여 최단경로를 탐색하는 알고리즘
- 데이크스트라(Dijkstra)의 최단경로 알고리즘 사용
- 라우팅 정보 변경될 경우에만 변경정보를 브로드캐스팅으로 전달
- 최단경로를 구하기 위해 전체 링크의 상태를 알고있어야하기 때문에 추가적인 메모리가 필요
- OSPF, IS-IS 등의 프로토콜이 이 알고리즘을 사용
- 대규모 네트워크에 적합
- 거리 벡터(Distance Vector) 알고리즘
- 최단경로 탐색을 재귀적으로 수행
=> 브로드캐스팅이 아닌 이웃한 라우터와의 통신만으로 네트워크의 상태를 파악 - 벨만 포드(Bellman-Ford Algorithm)의 최단경로 알고리즘 사용
- 라우팅 정보 변경의 전달이 주기적으로 이루어짐
- 즉각적으로 발생하지 않기 때문에 잘못된 정보로 경로를 계산하게 될 수 있음
- 변화가 없어도 주기적으로 통신이 발생하기에 트래픽을 낭비
- count to infinity 문제
- 인접한 노드의 목적지까지의 거리를 토대로 목적지까지의 최단경로를 계산
- 그런데 인접한 노드의 최단경로에 자기자신이 포함될경우 문제가 발생(역류)
- 인접한 노드 x에 의존하는 최단경로값을 노드 x에 넘겨줄 때는 무한값을
넘겨주는 것으로 역류를 미연에 방지할 수 있음
- RIP, IGRP 등의 프로토콜이 이 알고리즘을 사용
- 소규모 네트워크에 적합
- 최단경로 탐색을 재귀적으로 수행
5. AS(Autonomous System) - 자율시스템
- 통일된 라우팅 프로토콜을 사용하고 동일한 관리자에 의해 관리되는 독립된 네트워크 영역
- 해당 네트워크에 속한 라우터와 서브 네트워크들의 집합
- 넓게 보면 ISP(Internet Service Provider)를 말하기도 한다.
- 필요성
- 전 세계의 라우터를 대상으로 라우팅 알고리즘을 실행하기에는 그 수가 너무 많음
- 계층화를 통해 라우팅의 규모를 분할 - 보다 효율적인 라우팅
- 라우팅 알고리즘을 AS별로 독립적으로 적용
- AS 단위의 보안 유지
- 고장 및 오류를 AS단위로 관리 가능
- AS 라우팅 프로토콜
- IGP(Interior Gateway Protocol)
- AS 내부의 라우터간의 라우팅
- RIP, IGRP, EIGRP, OSPF, IS-IS 등 일반적으로 말하는 라우팅 알고리즘은 IGP를 의미
- EGP(Exterior Gateway Protocol)
- 서로 다른 AS 간의 라우팅
- BGP(Border Gateway Protocol)
- 서로 다른 AS간에 라우팅 경로를 설정하기 위해 AS 외곽의 라우터끼리 IP주소 정보를 교환
- AS 내부의 독립정 정책을 사용하는 IGP와 달리 조직간에 합의된 정책을 따른다.
- IGP(Interior Gateway Protocol)
'CS > 네트워크' 카테고리의 다른 글
#9 Wireless Network & Mobile Network (0) | 2021.11.30 |
---|---|
#8 Link Layer(Data Link Layer + Physical Layer) (0) | 2021.11.25 |
#6 Transport Layer (0) | 2021.11.16 |
#5 Application Layer 2 - HTTP (0) | 2021.11.01 |
#4 Socket Programming (0) | 2021.10.29 |