라우터 - 주요 기능

Violet_Evgadn·2023년 4월 27일
0

네트워크

목록 보기
24/37

경로표

이전에 라우터의 개념에 대해 잠깐 공부했으니 기본적인 개념은 알고 있을 것이다.

물론 이번 섹션에서 라우터의 동작 방식에 대해 자세히 배우겠지만 이를 알기 위해선 먼저 경로표에 대해 자세히 알고 있어야 하므로 라우터의 기본 개념을 알고 있다는 가정 하에 경로표에 대해 먼저 설명하도록 하겠다.

(만약 모른다면 아래 쓴 라우터 기본 개념만이라도 먼저 읽고 오자)

경로표(라우팅 테이블)

라우터 내부의 경로표와 스위칭 허브 내의 MAC 주소표는 "다음 중계 노드로 패킷을 전달한다"라는 큰 목적은 유사하지만 둘 사이에는 큰 차이가 존재한다.

라우터는 IP 기반 하드웨어이고 스위칭 허브는 이더넷 기반 하드웨어이므로 기반되는 네트워크 프로토콜이 다르다.

스위칭 허브는 MAC 헤더의 수신지 MAC 주소를 활용하여 패킷을 어디로 보낼지 확인하지만 라우터는 IP 헤더의 수신지 IP 주소를 통해 다음으로 패킷을 중계할 대상을 판단하므로 테이블에 저장하는 내용이 다를 수밖에 없다.

라우팅 테이블의 수신처 항목에는 패킷의 최종 목적지가 될 수 있는 수신처(서버 or PC) 정보가 저장되어 있다.

라우터가 라우팅 테이블의 수신처 정보를 어떻게 활용하는지 알기 위해선 "넷마스크" 항목에 대해 먼저 짚고 넘어가야 한다.

이전에 IP 주소를 공부할 때 이미 넷마스크에 대해서 배웠으며 라우팅 테이블에서도 넷마스크는 동일한 개념이다.

다시 간단히 설명하자면 넷마스크를 통해 IP 주소의 네트워크 번호 영역과 호스트 번호 영역을 구분할 수 있었다

라우터는 라우팅 테이블에서 IP 헤더의 수신지 IP 주소와 완전히 같은 값을 찾는 것이 아닌 네트워크 번호 영역이 같은 Row Data를 찾는다. 다른 말로 말하면 호스트 번호 영역에 어떤 값이 적혀 있는지 전혀 신경 쓰지 않는다.

이 때문에 일반적으로 경로표에는 네트워크 번호 영역의 값만 입력되어 있고 호스트 번호 영역은 모두 0으로 설정해 둔다.

즉, 라우터는 라우팅 테이블의 IP 주소와 넷마스크를 통해 도출한 네트워크 번호 영역과 패킷 IP 헤더에서 도출한 네트워크 번호 영역이 동일한 Row Data를 통해 다음 중계 대상을 찾는 방식으로 동작한다.

이전에 말했듯 네트워크 번호 영역의 값은 곧 기기가 속한 서브넷의 주소이다.

따라서 라우터는 무조건 기기가 속해 있는 서브넷 주소를 목적지로 하여 패킷을 송신한다고 생각할 수 있지만 실제로는 이보다 더욱 복잡하게 동작한다.

주소 집약

실제 라우터의 동작 방식을 알기 위해선 "주소 집약"이라는 개념을 필수적으로 알아야 한다.

주소 집약은 몇 개의 서브넷을 모아 한 개의 서브넷으로 간주한 뒤 서브넷을 묶은 서브넷의 IP주소를 경로표에 등록하는 개념이다.

이렇듯 서브넷을 묶은 서브넷이 수신처 항목에 저장될 수 있으므로 경로표의 수신처 항목에 등록된 IP가 꼭 수신지의 기기가 속한 서브넷 IP 주소라고 말할 수는 없는 것이다.

위 이미지와 같이 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24라는 IP주소를 가진 3개의 서브넷이 1개의 라우터에 접속되어 있는 상황을 가정해보자.

주소 집약이라는 개념을 사용하지 않는다고 가정한다면 라우터 B는 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24 총 3개의 서브넷에 대한 경로 정보를 경로표에 저장해야 할 것이다.

그런데 위와 같은 상황에서 10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24에 패킷을 전달하기 위해선 공통적으로 라우터 A를 다음 중계 기기로 선택해야 한다.

다음 중계 기기가 라우터 A로써 동일한데 굳이 서브넷 주소가 다르다는 이유로 동일한 3개의 데이터로 메모리를 차지해야 할까? 이는 메모리 낭비이다.

따라서 3개의 서브넷 중 앞에서부터 공통되는 네트워크 번호 영역을 찾는 것이다.

10.10.1.0/24, 10.10.2.0/24, 10.10.3.0/24를 이진법으로 표현하면 아래와 같다.

0000101000001010 000000   0100000000 : 10.10.1.0/24
0000101000001010 000000   1000000000 : 10.10.2.0/24
0000101000001010 000000   1100000000 : 10.10.3.0/24

이진법으로 나타낸 3개 IP 주소를 애매한 데서 끊은 이유가 있는데, 바로 "공통되는 부분"을 묶은 것이다.

보다시피 3개의 IP 주소는 앞에서부터 총 22비트가 일치함을 알 수 있다. 이를 다르게 말하자면 앞 22비트를 네트워크 주소영역으로 생각하고 뒤에 10비트를 호스트 주소 영역이라 생각한다면 서브넷을 마치 기기처럼 간주하며 가상의 서브넷으로 묶을 수 있다는 의미이다.

10.10.0.0/22라는 가상의 서브넷으로 3개의 서브넷을 묶어도 되겠지만 IP 주소는 8비트씩 끊어 총 4개의 마디로 쓰기 때문에 편의상 8의 배수인 10.10.0.0/16으로 서브넷을 묶는 가상의 서브넷 IP 주소를 설정했다.

주소 집약을 통해 묶으면 3개의 서브넷에 대한 경로 정보를 각각 저장하지 않고 가상의 부모 서브넷(10.10.0.0/16)을 라우터 B의 라우팅 테이블에 저장하면 된다.

그리고 가상 서브넷에 속한 서브넷에 접근하기 위해선 라우터 A에 패킷을 전달하면 된다고 라우터 B의 라우팅 테이블에 기록해 둔다면 완성되는 것이다.

만약 10.10.2.0/24에 패킷을 보내고 싶을 경우 먼저 라우터 B에 패킷이 도착할 것이고, 라우터 B는 10.10.0.0/16이라는 가상의 서브넷에 패킷을 보내야 한다고 판단할 것이며 라우터 A에 패킷을 송신할 것이다.

라우터 A에 패킷이 도착하면 라우터 A의 라우팅 테이블에는 3개의 실제 서브넷에 대한 경로가 저장되어 있으므로 그중 10.10.2.0/24에 대한 정보를 찾아 패킷을 보내면 되는 것이다.

라우팅 테이블은 주소 집약으로 서브넷을 묶어 등록하는 것과는 반대되는 개념으로 한 개의 서브넷을 세분화하여 경로표에 등록시킬 수도 있다.

주소 집약과는 다르게 이 부분은 아마 필수적이라고 생각할 것이다.

왜냐하면 결국 패킷의 최종 목적지(수신지)는 PC나 서버가 될 텐데 이들은 서브넷에 속해 있을 뿐 서브넷 그 자체가 아니기 때문이다.

서브넷에 속해 있는 실제 기기에 패킷을 보내기 위해선 라우팅 테이블에는 서브넷의 주소뿐만이 아닌 세분화 한 서브넷의 주소 또한 저장할 수 있어야 하는 것이다.

방법은 매우 간단한데, 넷마스크의 1의 길이를 늘이면 되는 것이다.

넷마스크의 1이 길어진다는 것은 곧 호스트 주소 영역이 적어진다는 것이고 나중엔 넷마스크의 1이 32bit를 차지하여 255.255.255.255가 된다면 그때 IP 주소가 곧 패킷의 최종 목적지 후보가 될 수 있는 IP 주소가 될 것이다.

이처럼 경로표에는 서브넷 IP 주소뿐 아닌 다양한 형태의 IP 주소가 저장될 수 있지만 라우터는 경로표의 수신처와 넷마스크 항목 데이터를 활용하여 수신처 IP 주소와 네트워크 번호가 일치하는지 아닌지만 확인하고 나머지 요소는 큰 관심을 가지지 않으므로 정상적으로 동작하게 된다.

경로표 항목 상세 설명

수신지와 넷마스크에 대해 자세히 배웠으니 나머지 항목에 대해서도 자세히 알아보자.

경로표의 "게이트웨이"는 패킷을 중계할 다음 중계 기기의 IP 주소를 나타낸다.

만약 0.0.0.0/0과 네트워크 주소가 동일하다면 패킷을 192.0.2.1의 IP 주소를 가진 라우터에 보내는 것이다.

(여기서 0.0.0.0/0이면 네트워크 주소가 없지 않나?라고 생각했다면 정말 네트워크 공부를 확실히 하고 있는 것이다. 실제로 그 말이 맞으며, 이에 대해선 아래에서 자세히 다룰 것이다)

"인터페이스"는 게이트웨이에 적혀 있는 IP 주소로 패킷을 보내기 위해서 어떤 포트로 패킷을 송신해야 할지 기입해 놓은 것이다.

즉, 0.0.0.0/0에 패킷을 보내기 위해선 e1, e2, e3 포트 중 e1 포트로 패킷을 송신해야 한다는 것이다.

"메트릭"은 수신처 IP 주소에 기록되어 있는 목적지가 얼마나 가까운지 나타내는 값으로 수가 적을수록 목적지가 가까이에 있다는 의미이다.

그렇다면 게이트웨이 항목에 "-" 표시가 있는 것은 어떤 의미일까? 목적지로 패킷을 보낼 수 없다는 의미일까?

PC의 LAN 어댑터를 공부할 때는 라우팅 테이블의 인터페이스 항목 데이터와 게이트웨이 항목 데이터가 동일할 경우 수신처 IP 주소가 곧 패킷을 건네줄 상대였다.

하지만 라우터에선 게이트웨이 항목이 공란일 경우 수신지에 적혀 있는 IP 주소가 곧 패킷의 수신지(최종 목적지)라는 것을 의미한다.

즉, e3 포트로 패킷을 내보낼 경우 192.168.1.10이라는 IP 주소를 가진 서버(혹은 PC)에 패킷 송신을 완료할 수 있다는 것이다.

이 내용들을 모두 이해한 뒤 위 라우팅 테이블을 그림으로 표기한다면 아래 이미지와 같은 상황일 것이다.

경로표 특수 상황(기본 게이트웨이 & 기본 경로)

경로표에는 몇 가지 특수 상황이 존재한다.

먼저 경로표에 네트워크 번호가 일치하는 복수의 후보가 발견되는 경우이다.

위에 경로표 예시를 보면 192.168.10/32 기기는 192.168.1.1/24 서브넷 내부에 존재하는 상황이므로 24 비트까지는 동일한 네트워크 번호를 가지고 있다.

이 경우 네트워크 번호가 일치하는 모든 데이터를 활용하는 것이 아니라 일치하는 데이터 중 네트워크 번호의 비트 수가 가장 긴 것을 찾아 활용하는데 이를 "최장 일치"라고 한다.

네트워크 번호가 가장 길다는 것은 넷마스크 1의 개수가 가장 많은 것을 찾는 것이다.

네트워크 번호 수가 길다는 것은 호스트 번호의 비트 수가 짧다는 의미이다.

그리고 호스트 번호의 비트 수가 짧다는 것은 서브넷 내부에 접속한 기기가 적다는 것을 의미하며 서브넷이 작다는 것과 같은 의미이다.

패킷을 중계하는 입장에서 작은 서브넷에서 다음 목적지를 찾는 것이 훨씬 수월하고 최대한 짧은 경로로 목적지에 패킷을 송신할 수 있을 것이므로 최장 일치 방식을 채택한 것이다.

두 번째로 네트워크 번호의 길이가 같은 것이 여러 개 존재하는 경우이다.

일치하는 네트워크 번호의 길이가 같기 때문에 최장 일치 방식을 활용하지 못한다.

왜 이런 상황을 허락했는지 이해가 안 될 수 있지만 라우터의 고장이나 케이블의 단선 등을 고려하여 우회로를 두기 위하여 이런 방식을 허용했다.

이 경우 경로표의 메트릭 항목 값으로 판단한다.

메트릭 값이 작을수록 더욱 지름길로 갈 수 있다는 의미이며 이는 더욱 빠르게 목적지에 다다를 수 있다는 의미이므로 메트릭 값이 작은 쪽을 중계 대상으로 선택한다.

마지막으로 위 2개와 완전히 반대되는 상황으로써 네트워크 번호가 일치하는 행이 하나도 없는 경우이다.

라우터는 기본적으로 기본 게이트웨이와 기본 경로가 설정되어 있기 때문에 거의 일어나지 않는 상황이긴 하지만 일어날 위험성은 존재한다.

이 경우 라우터는 패킷을 폐기하고 ICMP 메시지로 송신처에 이 사실을 통지한다.

동일한 상황에서 스위칭 허브와는 다르게 동작함을 볼 수 있는데 스위칭 허브의 경우 MAC 주소표에 해당하는 행이 없을 경우 브로드캐스트 주소를 활용해 수신 포트를 제외한 모든 송신 포트에 패킷을 보냈다.

이런 차이가 생기는 것은 네트워크 기기가 가정하고 있는 네트워크의 규모 때문이다.

스위칭 허브는 많아야 수천 대인 크지 않은 네트워크를 가정하여 만든 네트워크 기기이다.

작은 네트워크이기 때문에 연결된 모든 케이블에 패킷을 보내더라도 네트워크에 문제를 발생시킬 만큼 많은 패킷이 발생하지는 않는다.

하지만 라우터가 가정하는 네트워크는 매우 큰데, 사실상 전 세계에 있는 인터넷을 가정하고 만들어진 네트워크 기기이다.

인터넷은 계속하며 발전하고 확장되고 있기 때문에 라우터의 네트워크는 계속해서 확대되는 중인 것이다.

이런 상황에서 다음 중계 대상을 몰라 모든 라우터에 패킷을 뿌릴 경우 네트워크에 영향을 줄 만큼 대량의 패킷이 뿌려지게 될 것이며 이는 네트워크 혼잡을 가져다줄 수 있다.

따라서 이러한 네트워크 혼잡을 피하기 위해 중계 대상이 분명하지 않을 경우 패킷을 폐기하고 송신처에 이를 알리는 것이다.

라우터가 가정하는 네트워크는 크기 때문에 모든 라우터 정보를 중계 대상으로 등록하는 것엔 무리가 있고, 그렇다고 모든 라우터 정보를 저장하지 않는다면 패킷을 제대로 송신하지 못하는 경우가 많아질 것이다.

따라서 경로표에서는 이런 문제를 해결하기 위하여 "기본 게이트웨이"와 "기본 경로"라는 것을 활용한다.

경로표에는 항상 "0.0.0.0/0"으로 넷마스크와 IP 주소가 할당된 것이 있다.

넷마스크가 0.0.0.0이라는 것은 네트워크 번호 영역이 없다는 의미 한다.

따라서 네트워크 번호 영역을 비교하는 동작을 실행할 수 없고 존재하는 모든 수신지 IP 주소와 네트워크 번호가 일치한다고 간주한다.

최장 일치 규칙에 의거하여 0.0.0.0/0의 데이터를 사용한다는 것은 다른 행에는 수신지 IP 주소와 일치하는 네트워크 번호를 가진 값이 라우팅 테이블에 없다는 의미이다.

이렇게 아무 행도 찾지 못했을 경우 패킷을 중계하는 경로를 "기본 경로"라고 하며 기본 경로에 등록된 라우터를 "기본 게이트웨이"라고 한다.

이는 위에서 설명한 0.0.0.0/0일 경우 네트워크 영역이 없는 것이 아니냐는 질문에 훌륭한 대답이 될 것 같다.

경로표 정보 등록/갱신

MAC 주소표와 경로표는 테이블의 항목뿐만이 아니라 데이터를 등록하는 방식 또한 다르다.

라우터는 경로표에 데이터를 등록하거나 갱신하는 과정을 패킷 중계 동작과 완전히 분리시켜 놨다.

즉, 패킷을 중계하는 과정에선 경로표의 내용에 아무런 수정을 가할 수 없다.

이는 패킷을 수신할 때 상대의 MAC 주소 및 수신 포트를 저장해 놨다 해당 기기에 신호를 송신할 때 MAC 주소표에 데이터를 등록하는 스위칭 허브와는 완전히 다른 방식이다.

라우터의 경로표에 정보를 등록하는 방법은 2가지가 존재한다.

먼저 사람이 수동으로 정보를 등록하거나 갱신하는 것이다. 이 또한 (고급 기기가 아니라면) 수동으로 정보를 등록/갱신할 수 없는 허브와는 다르다.

이를 "Static Protocol"이라고도 부른다.

두 번째는 라우팅 프로토콜이라는 구조를 사용하여 라우터끼리 경로 정보를 교환하며 라우터가 스스로 경로표 데이터를 등록/갱신하는 방법이다.

라우팅 프로토콜에는 RIP, OSPF, BGP라는 복수의 프로토콜이 존재한다.

이를 "Dynamic Protocol"이라고도 부른다.

라우팅 프로토콜은 나중에 자세히 배울 테니 지금은 이런 것이 있다 정도로만 이해하고 넘어가자.


라우터

라우터 기본 개념

PC나 서버의 LAN 어댑터에서 리피터 허브나 스위칭 허브로 패킷을 송신하면 허브는 중계 노드인 "라우터"라는 기기에 패킷을 보낸다.

라우터는 패킷을 최종 목적지(수신지)로 보내기 위한 중계 기기라는 점은 허브와 동일하지만 허브는 이더넷 규칙을 바탕으로 개발된 네트워크 기기이고 라우터는 IP 규칙을 바탕으로 개발된 네트워크 기기이므로 둘 사이엔 매우 큰 차이가 존재한다.

라우터의 내부 구조는 크게 보면 "중계 부분"과 "포트 부분" 2개로 구성되어 있다.

중계 부분에서는 패킷의 다음 중계 대상을 판단하며 포트 부분에서는 실제로 패킷을 송/수신한다.

PC 구조와 비교해 보자면 중계 부분은 프로토콜 스택의 IP 담당, 포트 부분은 LAN 어댑터 역할을 수행하는 것이다.

컴퓨터는 이더넷에 접속할 수 있게 해주는 LAN 어댑터 대신 무선 LAN 전용 어댑터를 사용해 무선 LAN에 접속하도록 만들 수 있는데 라우터도 동일하다.

라우터의 포트 부분에 무선 LAN용 하드웨어를 장착한다면 해당 포트로 무선 LAN 통신 기술을 지원할 수 있고 ADSL이나 FTTH 같은 광대역 회선 전용 하드웨어를 장착한다면 해당 포트로 광대역 회선 통신 기술을 지원할 수 있다.

즉, 위 이미지처럼 포트 부분에 다양한 종류의 통신 기술 전용 하드웨어를 장착하여 다양한 통신 기술 규칙에 의해 만들어진 패킷을 수신할 수 있으며 동시에 다양한 통신 기술 규칙으로 패킷을 송신할 수 있는 것이다.

라우터의 내부 구조를 알면 동작 방식도 쉽게 이해할 수 있다.

먼저 포트 부분에서 패킷을 수신할 것이다.

이때 패킷 송신 측에서 어떤 통신 기술 규칙에 맞춰 패킷을 보냈는지에 따라 해당 통신 기술 전용 포트 부분으로 패킷을 수신할 것이다.

포트 부분의 하드웨어가 패킷을 수신하면 이를 라우터 내에 있는 중계 부분으로 보낸다.

중계 부분에서는 받은 패킷의 IP 헤더에 기록되어 있는 수신처 IP 주소를 라우팅 테이블(경로표)과 비교해 가며 패킷을 다음으로 중계할 중계 노드(혹은 수신지)가 어디인지 판단한다.

패킷을 중계할 다음 중계 대상이 정해졌다면 해당 기기에 패킷을 보낼 수 있는 포트 부분으로 패킷을 보낸다.

포트 부분은 받은 패킷을 하드웨어 규칙에 따라 감싼 다음 패킷 송신 동작을 실행할 것이다.

받은 데이터를 다음 중계 대상으로 전송만 하는 스위칭 허브와는 다르게 라우터는 내부에서 다음 중계 대상을 판단한 뒤 다음 중계 대상으로 패킷을 보내는 패킷의 송신처 및 수신처 역할을 수행하는 것이다.

라우터의 패킷 수신

라우터의 포트 부분이 어떤 네트워크 프로토콜 전용 하드웨어인지에 따라 패킷 수신 방법이 살짝씩 다르겠지만 우리는 지금까지 이더넷을 중심으로 공부해 왔으므로 이더넷 전용 하드웨어로 패킷을 받아 이더넷 회선으로 패킷을 보내는 상황으로 생각하자.

라우터의 이더넷 전용 포트에서 패킷을 수신하는 동작은 PC의 LAN 어댑터와 거의 동일하다.

신호가 포트 부분의 커넥터에 도착하면 PHY(MAU) 회로와 MAC 회로를 거쳐 신호가 디지털 데이터로 변환된다.

FCS를 통해 패킷 변경 여부를 검사하며 MAC 헤더의 수신처 MAC 주소가 자신의 MAC 주소와 동일한지 확인한다.

만약 검사 결과에 문제가 없다면 라우터는 기존 패킷의 MAC 헤더를 폐기한다.

패킷의 MAC 헤더는 "어디에서 어디로 어떤 규칙에 의거하여 패킷을 송신한다"라는 정보를 담은 제어 정보이다.

패킷을 받은 라우터는 MAC 헤더의 수신지에서 송신지로 역할이 바뀔 것이며 패킷의 다음 수신지에 따라 목적지와 네트워크 프로토콜도 변경될 수 있다.

따라서 이전 MAC 헤더의 값은 현재 라우터엔 전혀 의미가 없으므로 폐기한다.

이후 라우터는 IP 헤더에 저장되어 있는 수신지 IP 주소를 보고 패킷 중계 동작, 정확히는 다음에 패킷을 중계할 중계 노드를 찾는 과정으로 들어간다.

경로표에서 다음 중계 노드 및 송신 포트에 대한 정보를 찾았다면 이를 토대로 송신 포트에 패킷을 보낸다.

이때 라우터가 실제로 패킷을 송신하기 전 2가지 사전 작업을 수행하는데 바로 "패킷 유효 기간 확인"과 "Fragmentation"이다.

패킷 유효 기간

IP 헤더 필드 값 중 TTL(Time To Live; 생존기간)이라는 제어 정보가 존재한다.

이 값은 라우터를 경유할 때마다 1씩 감소하는데 패킷은 이 제어 정보를 통해 패킷의 생존 기간을 나타낸다.

만약 TTL이 0이 될 경우 패킷의 생존 기간이 만료된 것으로 간주하여 패킷을 폐기한다.

패킷에 유효 기간을 설정한 이유는 패킷이 동일한 장소를 계속 순환하는 사태를 막기 위함이다.

만약 경로표에 중계 대상에 대한 정보가 정확히 등록되어 있고 네트워크 상 아무 문제가 없다면 패킷이 동일한 지역을 순환하는 문제는 발생하지 않을 것이다.

하지만 네트워크는 언제 어떤 일이 일어날지 모르므로 경로표에 등록된 정보에 오류가 있을 수도 있고 기기 고장이나 통신선 단절 등의 문제로 우회로로 전환되는 과정에서 경로가 혼란에 빠져 순환 문제가 발생할 수 있다.

송신처에서 패킷을 송신하기 전 TTL에 64 또는 128을 설정하여 패킷을 송신하면 이런 문제를 감지할 수 있다.

현재 인터넷에서 지구 반대편까지 패킷을 전송할 때도 경유하는 라우터 수가 많아야 수십 개 정도이다.

즉, 64 또는 128의 TTL 값이 모두 소모되었다는 것은 네트워크 상 어떤 문제가 발생했다는 의미로 받아들여도 문제없는 것이다.

Fragmentation(단편화; 조각 나누기)

위에서 말했듯 라우터의 포트 부분은 다양한 네트워크 프로토콜 전용 하드웨어로 구성되어 있다.

문제는 네트워크 프로토콜마다 패킷의 최대길이인 MTU가 다르기 때문에 송신 포트의 MTU보다 패킷의 MTU가 클 수 있다는 것이다.

조금 쉽게 이해하자면 지하차도(포트)는 1M 크기의 차까지 통과시킬 수 있는데 지하차도를 지나가려 하는 트럭(패킷)이 2M인 상황인 것이다.

이런 상황은 패킷 수신 과정에선 일어나지 않는데 패킷을 수신할 때는 패킷이 전송되는 네트워크 규칙을 가진 포트에서 수신할 것이고 패킷은 이전 라우터 포트에서 해당 네트워크 규칙으로 변환된 뒤 포트를 통과해 지나갔을 것이므로 당연히 통과가 가능할 것이다.

조금 쉽게 이해하자면 1차 지하차도 출구(이전 라우터의 송신 포트)와 2차 지하차도 입구(현재 라우터의 수신 포트)가 나란히 있는데 두 지하차도 모두 1M 크기의 차까지 통과시킬 수 있다.(즉, 두 포트가 같은 네트워크 프로토콜을 사용한다)

이때 1차 지하차도를 어떤 트럭(패킷)이 정상적으로 통과했다면 2차 지하차도 또한 정상적으로 통과할 수 있는 것이다.

어쨌든 네트워크 프로토콜마다 MTU가 다르기 때문에 특정 네트워크 프로토콜로 패킷을 보내기엔 패킷의 크기가 너무 큰 경우가 발생할 수 있다.

또한 MTU가 동일하더라도 어떤 네트워크 프로토콜은 추가해야 하는 제어 정보 때문에 헤더의 길이가 길어져 결과적으로 패킷의 크기가 MTU보다 커지는 상황도 존재한다.

대표적으로 ADSL이나 FTTH 같은 광대역 액세스 회선에서 PPPoE 프로토콜을 이용하는 경우가 있다.

이런 상황에서 수행하는 것이 IP 프로토콜에 규정된 Fragmentation(단편화) 방법이다.

단편화는 패킷을 분할하여 분할한 패킷의 길이를 MTU보다 작게 만든 다음 짧게 만든 패킷을 송신하는 방법이다.

먼저 단편화를 수행하기 전 출력 포트의 MTU를 조사하여 중계하는 패킷을 그대로 송신할 수 있는지 확인한다.

만약 패킷의 길이가 MTU 보다 클 경우 포트가 패킷을 송신할 수 있을 만큼 패킷을 분할해야 한다.

하지만 단편화를 진행하기 전 IP 헤더 Fragmentation Flags의 두 번째 비트, DF bit라는 제어 정보를 확인해야 한다.

DF는 Don't Fragment의 약자로써 Fragmentation을 수행하지 못한다는 의미를 가진 제어 정보이다.

만약 DF bit가 1로 설정되어 있을 경우 목적지 컴퓨터가 단편화된 데이터 조각을 다시 모을 능력이 없으므로 단편화를 수행하지 말라는 의미이다.

또한 현재 패킷이 이미 다른 라우터에서 단편화되었던 조각 데이터일 경우에도 다시 단편화시킬 수 없다.

패킷 한 개는 한 번만 단편화 가능하다는 의미이다.

만약 분할 할 수 없는 패킷으로 판명 난다면 패킷을 폐기한 뒤 ICMP 메시지를 송신처로 보내 문제가 발생했음을 알린다.

분할 가능한 패킷이라면 데이터의 맨 앞부분부터 모든 패킷 조각이 MTU보다 동일하거나 작아지도록 분할한다.

이때 데이터는 (TCP 헤더 + 실제 데이터)를 하나의 데이터로 간주하여 분할한다.

단편화가 끝났다면 IP 헤더에 단편화가 되었다는 것과 특정 데이터 조각이 단편화된 데이터 조각 중 몇 번째 데이터인지를 나타낸다.

단편화에 대한 IP 헤더 필드는 크게 3가지가 존재한다.

먼저 Fragmentation Flag 중 세 번째 비트인 MF bit(More Fragment)이다.

만약 현재 데이터가 단편화된 데이터 조각 중 마지막일 경우 0, 아닐 경우 1 값을 세팅한다.

두 번째로 Fragmentation Offset이다.

이는 단편화된 데이터 조각이 최초 분열 조각으로부터 어떤 곳에 붙여야 하는지 위치를 나타내준다.

단편화된 조각이 순서를 지키며 도착한다고 보장할 수 없으므로 이 값이 꼭 설정되어야 한다.

마지막으로 Fragment Identifier이다.

단편화된 조각들은 모두 동일한 Fragment Identifier를 가지고 있으며 패킷을 수신하는 수신지에서는 Fragment Identifier가 같은 패킷들을 모아 원래 패킷으로 복구시키는 로직을 가지고 있다.

이렇게 단편화 후 IP 헤더 추가 값 설정이 끝났다면 실제 패킷을 송신하는 과정에 들어간다.

라우터 송신 동작

라우터가 패킷의 다음 중계 노드도 찾아줬고 중계 노드로 패킷을 송신할 포트 번호도 찾아줬으며 송신 전 수행해야 할 TTL 확인 및 단편화도 완료했다면 실제로 패킷을 송신하기만 하면 된다.

라우터의 출력 포트는 설정되어 있는 네트워크 규칙에 맞춰 신호를 변환한 뒤 패킷을 송신한다.

이 과정을 자세히 하려면 통신 회선을 이해해야 하는데 통신 회선은 매우 복잡한 개념이므로 나중에 설명하겠다.

일단 지금은 이더넷 규칙으로 패킷을 송신한다고 가정하자.

다음 중계 노드의 IP 주소가 결정되어 있는 상태이므로 라우터에 존재하는 ARP 캐시에서 해당 IP 주소에 대한 정보가 있는지 확인하고 만약 없다면 ARP를 통해 다음 중계 노드의 MAC 주소를 조사한 뒤 이 값을 수신처 MAC 주소로 설정한다.

또한 송신처 MAC 주소로 패킷을 송신할 라우터 포트에 할당되어 있는 MAC 주소 값을 설정하고 현재 포트의 네트워크 규칙(지금은 이더넷이므로 0800)에 맞는 이더 타입 값을 설정한다.

이젠 정해져 있는 네트워크 규칙에 맞도록 패킷을 전기 신호로 변환한 뒤 송신하면 라우터의 송신 동작이 종료된다.

이때 허브에서 신호를 송신하는 것과 동일한 과정을 거치기 때문에 설명은 생략하겠다.

패킷이 송신되면 스위칭 허브를 경유하여 다음 라우터에 도달할 것이며, 이 라우터는 다다음 라우터에 패킷을 전달하는 과정을 반복하며 패킷은 최종 목적지(수신지)까지 이동할 것이다.

좋아요공감
공유하기통계게시글 관리

profile
혹시 틀린 내용이 있다면 언제든 말씀해주세요!

0개의 댓글