본문 바로가기
학교 수업/컴퓨터 네트워크

Network layer :: 2. 라우터 내부에는 무엇이 있을까?

by Godgil 2020. 6. 11.

자, 앞부분에서 네트워크 레이어의 근본적인 역할은 바로 송신 호스트에서 수신 호스트로 패킷을 전달하는거야. 이 역할을 수행하기 위해 두가지 기능이 있는데, 그게 바로 포워딩 라우팅이라고 했어.

 

자 라우터에 패킷이 도착 했어.

그러면 라우터는 패킷의 IP 헤더를 보고 어디로 내 보낼지 결정할거야.

그러면 헤더를 보고 어떻게 결정을 할까?

 

IP 헤더에는 목적지 IP 주소에 해당하는 정보가 담겨 있어, 이 목적지 IP 주소와, 라우터가 가지고있는 forwarding table을 비교해서 Longest Prefix Match를 통해서 보내.

 

위의 표처럼 생긴게 포워딩 테이블이야. 그냥 가장 길게 매칭되는 곳으로 보내는거지

예를 들어 11001000  00010111  00010100  11000111이 목적지 IP주소로 왔다.

그러면 위의 표시처럼 가장 길게 매칭되는게 0번이야. 그래서 그냥 0번으로 내보내는거야. 

이게 바로 목적지 기반 전달이야. 그냥 목적지만 보고 전달을 하는거지.

 

쉽게 생각해서 택배를 생각 하면 될거야, 택배가 허브에서 모일거고, 부산광역시 해운대구 ... 이런식으로 주소가 적혀 있을텐데, 허브에서는 그냥 부산까지만 보고 부산을 처리하는 곳으로 넘기면 되는거지. 

 

자 이렇게 어디로 내 보낼지 결정을 했으면 신호가 흘러 갈거야

신호가 흘러가는 방법이 계속해서 발전 해 왔어.

 

초기 모델은 가장 단순한 모델이야.

 

 

1. 메모리를 통한 교환

그냥 이 라우터의 인풋포트로 들어온 패킷을 메모리에 저장하고, 

이 메모리가 다시 출력포트에 패킷을 전달하는 구조야.

근데 이 메모리를 통한 교환이 단점이 있어, 메모리 버스 구조를 사용하기 때문에, 한번에 한 패킷밖에 처리를 못하고, 메모리의 성능에 따라서 속도가 제한이 될거야. 컴퓨터 구조를 배웠으면 좀 알 텐데, 메모리를 통해 저장되고, 다시 메모리를 통해 쓰기 때문에 패킷이 버스를 두번 가로지르는 형태가 된단 말이지.

 

이걸 좀 극복하고자 해서 나온게

 

2. 버스를 통한 교환

이걸 라우팅 프로세서의 개입이 없이, 공유 버스를 통해서 직접 그냥 출력 포트로 전송을 하는 형태야.

 근데 이 역시도 단점이 있어.

앞서 설명했지만, 버스 구조는 한 패킷이 사용중이면 다른 패킷은 사용하지 못해.

따라서 패킷 교환 속도가 버스 속도에 의해 영향을 받는거지

 

그래서 아, 이것도 좀 부족하다. 해서 나온게

 

3. 크로스바 구조

간단해, 버스가 다니는 길을 여러개 겹쳐 놓은거야

이렇게 되면 여러 패킷을 동시에 전달 할 수 있는거지.

 

 

자 그러면 인풋포트 아웃풋 포트 막 내가 말 했는데, 이게 라우터 내부 구조야.

 

이 그림이 라우터 내부 구조를 도식화 해 놓은거야

 

인풋 포트로 패킷이 들어오면, 

IP 헤더를 읽어서 포워딩 테이블에 따라 어디로 갈지 판단 해 줄거고,

판단이 되면 이 데이터그램을 아웃풋 포트로 넘겨준다.

 

이런구조야.

근데 이게 그냥 바로바로 딜레이 없이 진행 되면 좋겠지만, 실제는 그렇지 않다 이거지.

 

IP헤더를 읽고 포워딩 테이블에 따라 어디로 넘겨줄지 판단하는 라우팅 프로세싱은 보통 밀리초 단위로 진행되고

데이터그램을 아웃풋 포트로 넘겨주는 Switching fabric(스위치 구조)는 보통 나노초 단위로 진행된다고 해.

 

입력 포트에서도 큐잉이 일어나고, 출력 포트에서도 큐잉이 일어나.

 

입력 포트에서 큐잉은 왜 생길까?

당연히 라우터가 IP 헤더를 읽어서 내보내는 시간보다 더 빨리 패킷이 들어오면 생기겠지.

 

마찬가지로 출력 포트에서도 

라우터가 내보내는 시간보다, 더 빨리 라우터에서 나오는 속도가 패킷을 내보내는 속도보다 빠르면 큐잉이 될거야.

 

이렇게 막 큐잉이 되다보면 딜레이가 길어지고, 손실이 생기고 하는거야

 

 

자 잠깐 더 나가기 전에,

Head of the line blocking개념을 설명하고 싶어.

이게 뭐냐면 빨간색 패킷이 경쟁을 했어.

똑같은 output port로 나가야하는데 스위치 페브릭(내보내는 역할)이 한곳에 하나밖에 못나가니까 서로 경쟁을 하는거야. 

 

빨간색 패킷 둘이서 경쟁을 해서, 경쟁에 이기면 나갈수 있지만, 지면 다음 기회에 나가야 해.

그런데, 기본적으로 패킷 스위칭 형태로 패킷이 들어온단 말이야.

하나의 특정한 플로우만 돌아가는게 아니라 서로 다른 패킷들이 계속 흘러 들어 올거란거야.

 

세번째 라인의 빨간색 뒤에 초록색이 대기하고 있어, 다른 출구로 나가야 하는데

전혀 상관 없는 빨간색 패킷이 경쟁에서 지는 바람에 뒤에 있는 패킷은 싹다 막혀 있는거지

 

그래서 input port보다는 output에서 나갈 기회를 노리고 있다가 이걸 놓쳐서 손실이 발생하는게 흔한 경우라고 해.

 

자 위처럼, 기회가 와서 내 보낼 때, 누구를 내 보낼까 결정하는것이 패킷 스캐줄링이야.

 

먼저온 패킷을 먼저 보낼 수도 있고, 가중치를 두고 보낼수도 있고 하는거야

 

또, 패킷들이 대기해야하는 큐가 꽉 찰 수도 있단 말이지.

 

큐가 꽉 차면 어느 패킷을 버릴건가에 해당하는 것도 중요해.

제일 늦게 온 패킷을 버려야하지 않겠냐고 생각하겠지만 이건 또 공평성에 문제가 생길 수 있거든

내가 막 패킷을 10000개씩 보내고 있으면 다른 사람의 패킷이 계속 버려지겠지.

 

그래서 제일 먼저 온 패킷을 버릴 수도 있고, 막 랜덤하게 잡아서 버릴 수도 있는데,

 

실제로는 랜덤하게 잡어서 버린다고 해. 교수님이 그러셨어.

 

댓글