[Network] Network Layer
- [ CS기초 ]/네트워크
- 2022. 3. 4.
Network layer
네트워크 계층은 전송계층에서 만들어진 세그먼트를 receiving 호스트로 전달한다. 송신 측에서는 세그먼트를 encapsulation하여 데이터그램을 만들고, 수신 측에서는 데이터그램을 decapsulation과정을 거쳐 세그먼트로 분리하여 상위 전송 계층으로 전달한다.
하위 계층인 링크 계층은 바로 옆의 라우터에 패킷을 전송하는 과정만 관리한다. 하지만 바로 옆 라우터의 정보만 안다고 해서 목적지까지 패킷을 최적화된 경로로 전송하는 것은 불가능하다. 따라서 네트워크 계층에서는 링크 계층과 다르게 바로 옆 라우터와의 통신이 아닌 전체적인 송수신 경로에 대한 관리가 이루어진다.
Forwarding, Routing
네트워크 계층에서 가장 중요한 두 개의 function이다. 포워딩은 라우터의 input으로 들어온 패킷을 적절한 라우터의 output으로 전달하는 것을 말하고, data plane에 의해서 관리된다. 라우팅은 패킷을 시작지점에서 종료지점까지 어떠한 경로를 통해서 전달할지 판단하는 것을 의미하고 control plane에 의해서 관리된다.
라우터에서는 routing algorithm을 통해서 각각의 모든 라우터의 table을 세팅하고, 알고리즘에 따라서 적절하게 forwarding이 이루어진다고 생각하면 된다.
Router의 구조
라우터는 라우팅을 담당, 관리하는 routing processor라는 소프트웨어와 포워딩을 담당하는 high-speed switching fabric이라는 하드웨어 형태에 input/output 포트가 연결되어 있는 구조를 가진다.
ㆍ라우팅 프로세서는 라우팅 테이블을 참조(table lookup)하여 목적지 주소에 매칭되는 인터페이스를 얻는다.
ㆍ입력 포트에서는 먼저 line termination에서 물리계층의 신호를 수신하여 프레임으로 만들고, 그 프레임은 data link processing에서는 링크 프로토콜에 의해 decapsulation이 이루어져 데이터그램으로 변환된다. 변환된 데이터그램은 forwarding table을 이용하여 포워딩할 출력 포트를 검색한다. 이 떄, 포워딩하는 과정보다 더 빠르게 switching fabric에 도착하면 queue에 저장되어 순서를 기다리게 된다.
ㆍ출력 포트에서는 입력포트의 과정을 반대로 수행한다. 데이터그램을 순서대로 프레임으로 encapsulation하고, 물리계층의 전기 신호로 변환한다. 출력 포트에서도 전송 속도보다 포워딩 속도가 더 빠를 경우, 입력 포트와 유사하게 queueing을 통해서 속도를 제어한다.
ㆍswitching fabric에서는 입력 포트로 들어오는 패킷을 적절한 출력 버퍼로 보내는 역할을 맡는데, 이 떄 라우터별로 다양한 스위칭 조작을 사용한다.
- memory기반 switching fabric
: 초기에는 CPU 제어에 의해서 스위칭이 이루어지는 메모리 기반 스위칭이 많이 이용되었는데, 데이터그램을 시스템 메모리에 복사하고 IP 헤더주소를 보고 목적지 주소가 있는 포트로 포워딩하는 방법을 사용하였다. 다만 이러한 방법은 메모리에 쓰는 과정을 필요로 하므로 메모리 대역폭에 의해서 속도가 제한되었기 때문에 시간이 오래 걸린다는 단점이 있었다.
- bus기반 switching fabric
: 메모리 방식의 스위칭은 메인 메모리를 거쳐야 되서 속도의 제약이 있었다면, bus를 이용한 스위칭은 입력포트로 들어온 데이터그램을 공유 bus를 이용하여 직접 전달하는 방법을 이용하기 때문에 bus의 대역폭만을 사용한다. 이러한 방법은 하나의 입출력 버퍼가 독점적으로 점유하기 때문에 동시 사용이 불가능하다는 단점이 있다.
- interconnection기반 switching
: bus기반 switching은 동시 사용에 제약이 있었기 때문에, 큰 규모의 데이터그램 처리에는 적합하지 않았다. 따라서 crossbar기반의 switching을 이용하여 여러 쌍의 통신이 동시에 이루어질 수 있도록 만들었다. 모든 입력과 출력 포트마다 스위치를 만들었기 때문에, (입력포트 개수)*(출력포트 개수)만큼의 스위치가 필요하기 때문에 비용적인 측면에서 손해를 보더라도, 동시에 여러 포워딩이 가능하다는 장점이 있다.
Routing Algorithm
라우터에서 라우팅 프로세서는 라우팅 알고리즘에 따라서 라우팅 테이블을 작성한다. 라우팅 알고리즘은 송신측에서 수신측까지 데이터를 전송할 때 라우터를 통과하는 최상의 경로를 선택하는 것이다. 여기서 최상이란 비용을 최소로 하고 혼잡도를 최소로 하여 가장 빠른 경로를 찾아내는 것을 의미한다.
이러한 라우팅 알고리즘은 크게 업데이트 주기에 따라서 static/dynamic, 그래프가 알고있는 범위에 따라서 global/decentralized로 분류할 수 있다. static은 이름 그대로 라우터가 한 번 경로를 설정하면 경로에 변화가 일어나지 않는 것, dynamic은 경로를 주기적으로 갱신하여 link cost의 변화에 대응하여 경로를 재설정 하는 것을 말한다. 그리고 global이란 것은 네트워크 전체에 대한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산하는 방식을 말하고, decentralized는 라우터들이 자신과 이웃한 노드들의 가중치 정보만 알 수 있어서 이웃 노드들과의 정보 교환만을 통해서 출발지와 목적지 사이의 최소 비용 경로를 계산하는 것을 의미한다.
일반적으로 정적 라우팅의 경우는 관리자가 직접 목적지 네트워크의 정보를 입력하는 것을 의미하기 때문에, best path를 위한 계산을 하지 않고 라우터 자체의 성능은 좋아진다. 하지만 관리자가 직접 네트워크 경로를 수동으로 지정해주어야 하므로 불편하고 경로에 문제가 생길 경우에도 관리자가 알아채지 못한다면 이상 경로로 계속 전송하게 되어 대규모 네트워크에서는 사용하기가 힘들다.
따라서 동적 라우팅 알고리즘 중에서 link-state algorithm, distance vector algorithm정도만 알고 있으면 될 듯
- link-state algorithm
global한 라우팅 알고리즘의 한 종류로, 일반적으로 dijkstra 알고리즘을 이용한다.
global한 라우팅 알고리즘이기 때문에 전체 경로들의 정보를 수집하여 경로를 최적화한다. 하지만 dijkstra 알고리즘을 이용하면 oscillation(진동)문제가 발생할 수 있다. (쉽게 이해하자면 한쪽으로 트래픽이 몰리면 다음에는 반대 경로로 변경하는 과정이 반복되는 것) 따라서 이웃한 많은 라우터들이 동시에 link-state 알고리즘을 수행하지 않도록 설정해주어야 한다.
- distance vector algorithm
decentralized한 라우팅 알고리즘으로, 인접한 노드간에만 정보를 전달한다.
let dx(y) = x-y 최소경로
then dx(y) = min{cost to neighbor v) + dv(y)}
인접한 노드한테 계속 거리정보를 받아서 최소값을 가지는 경로를 채택하는 방법이다. 이 방법은 인접한 노드의 트래픽정보만 알 수 있기 때문에, 트래픽에 변화가 발생하면 순차적으로 전체 경로에 변화가 발생한다. 따라서 변화가 발생하는 도중에는 바로 최신정보가 갱신되지 않으므로 비동기적이며, 비효율적인 전송이나 loop가 발생할 수도 있다. 따라서 일정 주기(일반적으로 30초)마다 경로정보를 갱신해서 비효율적인 작동을 최소화한다.
네트워크망은 실제로는 계층적 구조를 가지며, system단위로 구분된다. 그렇기 때문에 크게 라우팅은 intra-AS 라우팅, inter-AS라우팅으로 구분할 수 있다. inter-는 네트워크 시스템 단위간의 라우팅을 의미하고, intra-는 시스템 내에서의 라우팅을 말한다. 따라서 실제 포워딩 table을 작성할 때는 시스템 내에서는 intra, 시스템간에는 inter 라우팅이 작동하여 이러한 두개의 라우팅 알고리즘이 적절하게 사용된다.
'[ CS기초 ] > 네트워크' 카테고리의 다른 글
[Network] HTTP와 HTTPS, TLS (Transport Layer Security) (0) | 2022.04.08 |
---|---|
[Network] IP (Internet Protocol) (0) | 2022.03.06 |
[Network] UDP, TCP (0) | 2022.02.15 |
[Network] Transport Layer (0) | 2022.02.11 |
[Network] 웹과 HTTP (0) | 2022.02.08 |