네트워크 계층에서 가장 중요한 작업은 패킷의 이동경로를 정하는 작업, 즉 라우팅 기능을 적절하게 진행하는 것이다.
경로를 선택함에 있어서 중요한 점은 혼잡제어와 패킷의 분할/병합이 필요하다.
라우팅
라우팅은 라우팅 테이블을 가지고 경로를 결정하는 과정이다.
라우팅 테이블은 네트워크 상황에 따라 달라질 수도(동적 라우팅) 고정될 수도(정적 라우팅) 있다.
혼잡제어
혼잡제어는 경로에 패킷 수가 과도하게 집중되면 발생하는 혼잡을 제어하는 것이다.
먼저 흐름제어와 혼잡제어를 구분해보자.
혼잡제어는 서브넷을 포함한 전반적인 네트워크의 전송능력을 다룬다.
흐름제어는 두 호스트 사이의 점대점 전송속도를 컨트롤 하는 것이다.
혼잡의 원인으로는 지나치게 많은 패킷의 유입이 있다. 패킷이 오버하게 오면 라우터가 이 내용을 패스하기 위해 내부 버퍼에 패킷을 저장하고, 이 과정에서 내부 버퍼의 용량이 부족해지면 패킷 분실이 일어난다. 분실이 일어나면 송신호스트에서 Timeout기능을 이용해 재전송을 보내고 선로 내부의 패킷수가 더욱 늘어나게 되어 악순환이 반복된다.
그렇다고 라우터의 내부 버퍼를 무턱대고 늘릴 수 있는 것은 아니다.
라우터 내부 버퍼의 크기가 늘어나면 패킷 전송 지연 시간이 늘어난다. 이는 재전송을 유발하고 패킷수가 늘어나 근본적인 해결방법이 될 수 없다.
위의 상황을 정리하면 혼잡은 주로 버스트 현상으로 인한 재전송 과정에서 일어난다.
재전송이 일어나는 경우
- 패킷 순서가 뒤바뀔 때 수신 호스트가 이를 버리는 경우
- 응답 알고리즘의 효율이 좋지 않은 경우
- 적절치 못한 라우팅 알고리즘
- 패킷 생존시간이 지나치게 길 경우
버스트 현상
선로 전체가 아닌 특정 지점에 패킷들이 몰리는 경우로 네트워크가 예측가능한 전송률로 패킷을 보내면 문제 해결.
이를 우리는 트래픽 성형이라 부른다.
유입 패킷의 분포 특성을 미리 정해서 혼잡도 예측을 더욱 쉽게 하는 것.
만일 분포 특성보다 트래픽이 더 많이 몰리게 된다면 패킷 처리를 거부할 수 있는데 이 알고리즘을 리키버킷이라고 한다.
위의 깔때기 모양이 리키 버킷 알고리즘을 아주 잘 설명해준다.
깔때기는 약속된 양보다 조금 많은 트래픽을 어느정도 버퍼에 저장해 수용 가능한 것을 의미한다.
밑으로 갈수록 좁아지는 주둥이는 많은 트래픽이 몰려도 일정 트래픽으로 안정적으로 전송한다는 것을 의미한다.
혼잡제거
가상회선에서는 혼잡이 사라질 때까지 연결설정을 허용하지 않거나 사용대역을 미리 할당하는 자원예약으로 해결할 수 있다.
라우터가 능동적으로 ECN패킷을 이용해 혼잡을 제거해 나갈 수도 있다.
라우터가 자신의 출력선로의 부하를 측정하고 한계치 초과시 주의 플래그를 켜놓는다.
주의 표시가 된 출력선로로 송신호스트의 패킷이 나가고자 할 때, 패킷의 source address로 ECN 패킷을 회신한다.
ECN 패킷을 받은 송신호스트는 선로에 혼잡이 발생한 것을 인지하고 전송량을 일정비율씩 낮춰가는 과정을 ECN 패킷을 받지 않을 때까지 반복한다.
이 과정에서 ECN 패킷이 여러 라우터에서 발생할 가능성이 생기는데 최초 ECN 패킷 전송라우터가 ECN-echo 같은
지표로 경로상 라우터들이 패킷을 생성하는 것을 억제할 수 있다.
패킷의 분할/병합
패킷의 분할과 병합은 주로 데이터그램 전송방식에서 사용한다.
전송시스템에서 분할된 패킷을 전송하거나 라우터에서 분할과 병합을 반복하는 방식으로 패킷을 전송한다.
데이터그램은 고정경로가 존재하지 않고 독립적인 경로로 패킷들이 운반된다.
때문에 라우팅 과정이 패킷별로 공평해야하고 평균지연시간, 네트워크 성능에 미치는 정도, 홉 수 최소화 등의 사항을 고려해야 한다.
독립적인 경로이기 때문에 네트워크 구성이 변경될 가능성이 매우 높다.
보통 라우팅은 정적 라우팅과 동적 라우팅을 사용한다.
정적 라우팅
라우팅 테이블이 한 번 결정되면 네트워크 구성이 바뀌지 않는 이상 변경되지 않는다.
간단한 라우팅에는 효과적이나 복잡한 네트워크 내부의 혼잡도를 반영하기 어렵다.
동적 라우팅
라우팅 테이블이 네트워크 내부의 상황에 따라 정기적으로 변경된다.
최적의 경로 선택이 가능하나 라우터의 기능이 복잡해진다는 단점이 있다.
라우터끼리 네트워크 상태와 라우팅 테이블을 공유함으로써 경로 정보를 공유하는데 라우터 초기화 과정에서 이웃 라우터의 경로 정보를 파악하는 것이 우선이다.
경로 정보 파악은 Hello 패킷과 Echo 패킷을 이용한다.
Hello 패킷은 라우터의 경로정보를 얻기 위해 전송하는 패킷이다.
Echo 패킷은 라우터 사이의 전송 지연 시간 측정을 위해 전송하는 패킷이다.
라우터 사이에 패킷 전송을 통한 데이터 교환은 전송지연 발생 가능성이 매우 크다.
즉, 라우터들이 가지고 있는 경로정보가 일치하지 않을 가능성도 크다는 뜻.
라우터는 여러가지 데이터 교환 방식을 이용해 효율적인 라우팅 정보를 교환하고 있다.
소스 라우팅
송신 호스트가 모든 라우팅 정보를 책임진다. 패킷의 헤더에 라우팅 테이블 정보를 적어 놓으면 라우터가 이 정보를 보고 패킷을 전달한다.
라우팅 테이블 관리를 라우터가 따로 신경쓸 필요가 없다.
분산 라우팅
경로상에 있는 라우터들이 효율적인 경로 선택 과정에 참여한다. 데이터그램 방식에서 자주 사용하며 호스트의 수가 많을 수록 효과적이다.
중앙 라우팅
RCC라는 특별 호스트가 라우팅 테이블을 총 관리한다. 송신호스트가 RCC에게서 라우팅 테이블을 받아오면 그 이후 과정은 소스 라우팅과 동일하다.
계층 라우팅
분산 라우팅과 중앙 라우팅을 합친 것으로 전체 네트워크 구조를 계층적으로 구성한다.
라우팅 프로토콜
동적 라우팅에서 라우터들이 경로정보를 라우팅 프로토콜을 이용해 주고 받는다.
라우팅 프로토콜은 여러가지 종류가 있다.
최단경로 라우팅
목적지 호스트까지 최소한의 홉 수로 이동하는 프로토콜
거리 벡터 라우팅
자신과 직접 연결된 라우터간 패킷 전송 거리 정보 교환을 하는 방식이다. 이를 위해선 링크벡터, 거리벡터, 다음 홉 벡터의 개념이 필요하다.
링크 벡터 : L(x) = [Net1 = port 1, Net2 = port 2 --- .]
라우터 x가 네트워크 k와 연결된 포트정보를 모아놓은 것이다.
L(R) = [Net 1 = port # 1, Net 2 = port # 2]
링크벡터는 자신의 이웃 라우터가 누구인지 판단하기 위해 사용한다.
거리 벡터 : D(x) = [d1, d2, d3, ...]
라우터 x 에서 개별 네트워크 k 까지의 거리를 나타낸다. 거리벡터의 원소는 전체 네트워크 수만큼 존재한다.
다음 홉 벡터 : 패킷을 정송하는 경로에 있는 다음 홉에 대한 정보. 원소는 전체 네트워크 수만큼 존재한다.
내부 라우팅 프로토콜
내부 라우팅 프로토콜은 AS 내부에서 효율적 전송을 목적으로 한다. 따라서 전송 효율성에 포커스를 두는 프로토콜
RIP
거리 벡터 방식을 사용한다. 이웃 라우터가 제공하는 거리벡터 정보가 빠른 시간안에 모두 도착할 필요가 있다.
하지만 UDP를 사용하기에 신뢰성을 보장받지 못한다.
따라서 일정 절차를 통해 순차적으로 정보를 저장한다.
- 새로운 목적지 주소의 경로이면 테이블에 저장
- 기존 경로보다 지연시간이 적으면 테이블에 저장
- 임의의 라우터로부터 거리벡터가 들어왔고, 테이블에 그 라우터를 다음 홉으로 하는 정보가 있으면 새로운 정보로 수정한다.
링크상태 라우팅 프로토콜
플러딩 방식을 사용해 정보를 전달한다.
플러딩 = 라우터가 자신에게 입력된 패킷을 출력 가능한 모든 경로로 출력하는 것
이에 같은 패킷이 무수히 생성될 수 있는데 이를 방지하기 위해 라우터가 한 번 받은 패킷은 삭제해야 한다.
거리벡터 라우팅 방식은 각 라우터의 교환 정보량이 많아서 라우터에 무리가 생길 수 있다.
링크상태 라우팅 방식은 연결된 상태에 변화가 있을 때에만 정보를 전달하므로 라우팅에 가해지는 부하가 적다.
OSPF라는 TCP/IP 기반 프로토콜이 존재한다.
외부 라우팅 프로토콜
외부 라우팅 프로토콜은 AS 외부에서 해당 네트워크에 접속 가능 여부를 확인하는 프로토콜이다.
내부 라우팅 프로토콜과 다르게 해당 네트워크가 존재하는가에 포커스를 둔다.
경로벡터 프로토콜
해당 라우터에서 해당 네트워크가 존재하는지에 포커스를 둔다.
BGP : 서로 다른 AS에서 작동하는 게이트웨이 라우터가 정보를 교환할 수 있도록 도와주는 외부 라우팅 프로토콜
IP 프로토콜
인터넷에서 패킷 전달 프로토콜로 사용되는 IP 프로토콜은 4가지 특성이 있다.
- 비연결형 서비스
- 패킷의 분할/병합
- 헤더 체크섬만 제공
- Best Effort한 전송 ( 100% 신뢰성 전송이 아니다.)
여기서 2번을 좀 더 살펴보자면, 하위계층인 TCP는 패킷의 분할이 쉽지 않다. 따라서 IP를 이용해 전송경로의 라우터가 패킷의 분할/병합을 진행한다. 이 과정에서 양 호스트의 LAN이 다를 수 있으므로 헤더를 바꿔 껴주어야 한다.
DHCP
고정 IP주소가 아닌 유동 IP 주소를 할당시 사용한다.
DHCP 서버가 관리하는 Pool에 ip주소를 저장하고 관리하는 방식.
먼저 클라이언트가 DestinationAddress를 255.255.255.255로 설정해 서브넷에 방송으로 DHCP 연결요청을 보낸다.
서브넷에 존재하는 서버가 이 요청을 듣고 ( 연결 요청은 DHCP 메시지란 특별한 헤더 내부에 존재하기에 서버가 인지할 수 있다. ) 연결 요청에 대한 응답 요청을 자신의 SourceAddress와 함께 방송한다. ( 클라이언트는 현재 IP주소가 없는 상태이기 때문! )
그러고 난 뒤에 클라이언트가 자신의 SourceAddress에 자신이 원하는 IP주소를 적어서 DHCP서버에 전송한다.
서버는 이에 대한 확인 응답을 한다.
위 과정을 통해 클라이언트는 IP를 유동적으로 할당받고 반납할 수 있는 것이다.
2021-11-26
'Computer Science > Computer Network' 카테고리의 다른 글
TCP 프로토콜 (0) | 2021.12.05 |
---|---|
네트워크 계층 (0) | 2021.11.30 |
데이터 링크 계층 (0) | 2021.11.24 |
MAC 계층 (0) | 2021.11.18 |
데이터 전송의 기초 (0) | 2021.11.17 |