아.. 안녕하세요

어제 밤 자러 갈 때, 앞으로 일이주동안은 포스팅 안해야지 마음먹고 떠났는데

또 이렇게 포스팅을 하네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

공부해야 하니까 ㅜㅜ


포스팅을 저녁먹고 여섯시부터 쓰기 시작합니다.


열시 이전에만 끝나길 기도하면서, 힘차게 공부해 봅시다!


라우팅 모듈과 라우팅 테이블의 위치



이전 포스팅에서 어떤 컴퓨터는 라우팅 테이블을 메모리에 올려서 관리한다고 했었죠. 사실 패킷이 들어오면 이 패킷을 가지고 라우팅 모듈속에서 패킷을 비교합니다.

A라는 컴퓨터가 추론해봤더니 Routing table에 N2로 가라고 나와 있다더라~ 라는 결과가 나왔습니다.

그러면 이 패킷을 그대로 내보내면서 Next-hop address를 보냅니다.


다시 말하면 이 세상의 컴퓨터는 직접전달과 간접전달로 이루어져 있다고 했습니다.

간접 전달이라면, 패킷이 들어오면 Routing table에서 검사 한 후, R2로 가라~~ 다른 라우터로 가라~~이런식으로 결과를 알려줬을겁니다.

직접 전달이라면, 패킷이 들어오면 같은 네트워크에 있기 때문에, Next-hope address에 목적지의 주소가 나오겠죠.

그러면서, 이전 어딘가 포스팅에서  " 하나의 세그먼트는 여러개의 데이터그램로 이루어져 있을 수 있습니다. " 라고 이야기 했습니다..

이것을 to fragmention module과정에서 일어나게 되는겁니다.

여기에서 Routing table에서 IP테이블을 배웠고, 여기에서 Next hope을 어떻게 찾느냐라는 방법도 공부했습니다.

Next hope을(경로를)찾는 방법은 , 이전 포스팅에서 배운 라우팅 지정 방법에 의거해서 찾습니다.

일단 우선순위를 알아야 하는데요, 첫째로 라우팅 테이블은 직접인지 아닌지를 검사합니다.

직접 전달이 아니라면(else if) 호스팅 지정 방식인지를 찾습니다.(네트워크 지정 전의 효율성을 포기하면서라도 전달해 줘야 하는 이유가 있으니까.)

그런 후 네트워크 지정 방식으로 전달해주며, 네트워크 지정도 없다면 디폴트 지정 방식으로 전달해줍니다.



라우팅 테이블

라우팅 테이블에 컬럼이 어떤것들이 있는지 외우려고 하면 힘들어집니다.

이것을 외우지 말고 이해해 봅시다.

라우팅 테이블은 3계층에서 패킷 하나가 도착했을 때, 패킷의 목적지 주소를 보고 라우팅 테이블을 쳐다봅니다.

라우팅 테이블을 쳐다보는 이유는 직접 전달인지, 간접 전달인지 판단하기 위해서 입니다. 만약 간접 테이블이라면 Next-hope을 찾기 위해서 입니다.

-여기에서 IPv4의 약점을 알 수 있는데요. 3계층에서 패킷이 도착할 때, 받는놈의 물리 주소만 보기 때문에 약점이죠! 그래서 스누핑이라는 기술이 생기는겁니다.

하이튼 여기에서 패킷을 이용하여 받는놈의 주소를 알고 있으면, 마스크를 이용해서 네트워크 주소를 알 수 있으며 네트워크 주소를 이용하여 같은 네트워크인지 다른 네트워크인지 알 수 있습니다. (간접전달 직접전달을 알 수 있음)

그러면 목적지로 가는 네트워크가 정해지면 직접전달일 시 바로 주면되고, 간접 전달일 시 Next-hope으로 보내줍니다. 그러면 Next hop의 정보가 있어야겠죠?

그 다음은 정보들은 Optional(Reference Count,Use , Interface)입니다

라우터는 팔이 여러개기 때문에 Interface로 표현합니다. 

Interface는 어떤 패킷이 들어와서 마스크를 해보니 어떤 조건을 만족하였고, 그 만족한 값에 대한 출구들의 정보가 interface에 저장되어 있죠.




그럼 테이블의 각 컬럼은 어떤 역할을 할까요ㅎㅎㅎ

마스크는 IP주소로부터 목적지 네트워크 주소 또는 서브네트워크 주소를 알 수 있습니다.

목적지 주소는 호스트 지정 라우팅일 경우 Host의 주소가 있을 것이고, 네트워크 지정 라우팅일 경우 네트워크의 주소가 나오겠죠?

다음 홉 주소는 패킷이 전달되어야 하는 라우터의 주소입니다.

Reference Count은 몇 번이나 사용했나 라는 값입니다. 이것은 자주 사용하는 부분을 알 수 있게끔 저장하는것 입니다.

Use는 사용자의 패킷이 몇번이나 전달했는지 값을 저장하는 컬럼 입니다.

Interface는 어떤 인터페이스로 나가라! 하는 값 입니다. (중요하죠)



그럼 여기에서 플래그를 설명 안했는데 그 이유는 플래그를 먼저 설명할려고..ㅎ

Flag는 Bit연산하기 위해서 사용합니다.

라우팅 테이블에서의 플래그.

플래그는 ibt operation이기 때문에 C언어로 작성할 때 char 변수 하나로 많이 사용합니다.

플래그에서의 U(UP)은 살있다 라는 뜻 입니다. 즉 라우터가 살아있다는 뜻으로, 라우터가 정상 작동을 하고 있다는 뜻이겠죠? 그럼 그 반대로는 D라는 flag가 있습니다.

D 라는것은 라우터가 죽었다, 라우터가 종료되었다 라는 뜻 입니다

G는 Gateway라는 뜻입니다. 목적지가 다른 네트워크에 있다면 간접전달을 하라는 뜻 입니다.(Next hope을 이용하여 라우터를 통하여 패킷을 보내라는 뜻이죠.)
H는 Host-Specific입니다. 즉 호스트 지정이라는건데, 라우팅 테이블은 대부분 네트워크 지정 주소이지만 이 필드는 호스트가 지정했기 때문에 우선권을 갖습니다.


라우팅 모듈이 진행되는 알고리즘입니다.


어떤 패킷이 라우팅으로 들어왔을때, 라우팅 테이블에는 여러 entry가 존재할텐데, 각각 하나씩 반복해서 마스크를 씌워봅니다. 만약 마스크를 씌웠는데 테이블 목적지 주소가 해당하는 라우팅 테이블에 존재한다면, G플래그가 있는지 검사합니다. G플래그가 있다는 것은, Gateway를 통과하여(간접 전달) 이동하기 위하여, Next-hope에 명시되어 있는 주소로 이동합니다.

하지만 G플래그가 없다는 것은, 직접전달입니다.(만약 U태그도 없다면 라우팅이 꺼져있거나 고장났거나 뭐 그런 상태겠죠?)

그럼 직접 전달을 해주고 종료하게 됩니다. 


자. 다음 그림을 분해해 봅시다.

일단 가장 상단-> 하단으로 갑시다.

처음 Site 193.14.5.0을 보면 하나의 네트워크라는것을 볼 수 있습니다.

시작주소가 193.14.5.0 이고, 네트워크 속에서 두개로 나뉘어서 각각의 시작주소가 193.14.5.160 그리고 193.14.5.192 인 것을 확인할 수 있는데요.

이것은 서브넷팅 된 것 입니다. ( 외부에서 볼 때는 193.13.5.0인 하나의 네트워크로 인식하겠죠?)

그리고 193.으로 시작하기 떄문에 C클래스 입니다. Default Mask는 11111111 11111111 11111111 00000000 입니다.

근데 내부적으로 서브넷팅이 일어났고, 각각의 시작주소는 193.14.5.160 / 193.14.5.192 입니다.

그럼 서브넷 마스크를 구할 수 있어야 하죠.

두 주소의 끝 주소를 비교해보면, 160/192 입니다. 두 주소의 차이는 32가 차이나죠. 그렇다는건, 한 블럭당 32개의 hostid가 있다는 뜻이고, 32비트는 2^5 이니, 3bit가 서브넷 된 것을 알 수 있습니다.

3bit가 서브넷 됬다는것은, 총 8개의 네트워크로 쪼개졌다는 것이겠죠 ㅎㅎ

그렇다는건 subnet mask는 255.255.255.224입니다.

그 아래의 193.14.5.165(m2)는 193.14.5.160으로 통하는 interface입니다. m2라는 값은 리눅스/유닉스 계열에서 사용하는 interface 명이고, MS계열에서는 193.14.5.165를 사용합니다 그렇기 때문에 그림에서 두 interface이름을 명시해 준 것이죠.

R2는 Default router로 , 직접 전달->호스트 지정-> 네트워크지정까지 찾아본 후 없으면, 0,0,0,0이랑 AND(&)해서 0,0,0,0이 나온다면(항상 참이겠죠) 상위개념의 Gateway로 이동하게 됩니다. - 여기에서 상위개념의 Gateway라고 했지만, 사실 Gateway는 콘솔이나 터미널에서 변경가능합니다-
그 아래를 보자~~~

111.0.0.0은 A클래스죠.(A클래스 0~127) 192.16.7.0과 194.17.21.0은 C클래스 입니다.


그럼 윗 그림을 보고 아랫그림을 보져.


다음 그림처럼, 보통 직접전달을 먼저 작성한 후 간접전달을 작성합니다.

이 테이블은 R1에 대한 라우팅 테이블입니다.

먼저, R1에 대하여 직접 연결되어 있는 네트워크를 지정해야 합니다.

그 네트워크 주소는 193.14.5.160 / 193.14.5.192 / 111.0.0.0 입니다. 근데 패킷이 들어올때 마스크를 알아야지 목적지를 알 수 있죠.

위에서 구했다 싶이, 193.14.5.160의 디폴트 마스크는 255.255.255.224입니다. 193.14.5.192도 똑같은 255.255.255.224죠.

그리고 111.25.19.20은 A클래스고 서브넷이나 슈퍼넷이 안되어 있으니 255.0.0.0 입니다. 이 세개는 직접 전달이기 떄문에 Next hop이 없습니다.

그리고 간접 전달이 아니기 때문에 G Flag도 없습니다. 그리고 호스트 주소 지정이 아니기 때문에 H인 Flag도 없습니다.

그 다음 interface를 보니 표에서 m0/m1/m2가 있습니다. 이런식으로 직접 전달 표가 완성이 됬습니다.

다음 표에 있는 내용과 같죠? 


가 다음 호스트 지정 주소가 있는지 확인해 봤는데, 있네요 ㅋㅋ

255.255.255.255로 마스크 해서 194.17.21.16이 나온다면, 그림에서는 다른 라우터를 한번 더 거쳐야 할 것입니다. 근데, 255.255.255.255로 비교하면 원래 비교했던 값이 튀어나오는데, 그 값이 다른 특정 호스트라면, 호스트 지정 방식으로 Next Hop을 111.20.18.14로 보내주겠다는 뜻 입니다.(Flag도 H죠?)

이제 간접전달을 그려보겠습니다.

255.255.255.0랑 마스크 해서 192.16.70 / 194.17.21.0 이 나온다면, 각각의 111.20.18.14/111.30.31.18로 보내줍니다.


근데 여기서 질문이 있을 수 있어요.

111.20.18.14로 보낸 다음에는 어떻게 보내요? 라고 ..? 엄청 기초적인 질문이 나올 수 있는데

그럼 패킷을 111.20.18.14로 패킷을 전송한 다음, 그 라우터를 기준으로 다시 라우팅 테이블을 작성하면 되겠죠?


그럼 여기에서 예제를 몇개 풀어보고 가죠.

1. 라우터 R1이 목적지 192.16.7.14로 가는 패킷 500개를 수신.

1.1 직접 전달 확인

    - 192.16.7.14 & 255.0.0.0            - > 192.0.0.0 ( 목적지 주소인 111.0.0.0과 부합안됨)

    - 192.16.7.14 & 255.255.255.224   - > 192.16.7.0( 목적지 주소인 193.14.5.160 / 193.14.5.192 두개 다 부합안됨 )

--> 직접 전달 실패 그 다음단계인 호스트 지정 전달을 확인함.

1.2 호스트 지정 확인

    - 192.16.7.14 & 255.255.255.255 - > 192.16.7.14 ( 표에 있는 194.17.21.16 과 부합안됨.)

--> 효율성을 어기고라도 보내는 패킷이 아님. 그렇다면, 다음으로 네트워크 전달이 맞는지 확인해야함.

1.3 네트워크 지정 전달 확인

    - 192.16.7.14 & 255.255.255.0    -  > 192.16.7.0 부합 ( 표의 destination address와 부합함.)

--> 네트워크 지정 전달도 부합하지 않았다면 디폴트 지정인 111.30.31.18로 전송했을텐데, 네트워크 지정에서 일치함으로써 인터페이스m0(MS표기법으론 111.15.17.32)으로 전달. U(사용필드) 500 증가


여기에서 패킷 500개가 들어왔는데, 이 패킷을 일일이 다 비교합니다. (라우터는 모든 패킷을 저장할 수 없잖아요! 하루에도 몇십~몇백만의 패킷을 처리하는데!)

그리고 그 패킷은 다 똑같은 목적지를 갖고 있는게 아니라, 다른 목적지를 갖는 패킷이 들어올 수도 있기 때문에 일일이 비교하는것이 좋습니다.

그래서 미리 발견된 것을 효율적으로 사용하기 위해서 3계층 스위치를 사용하는겁니다.


그럼 예제 2번!

2. 라우터 R1이 목적지 193.14.5.176으로 가는 패킷 100개 수신

2.1 직접 전달인지 확인하죠!

    - 193.14.5.176 & 255.0.0.0            -> 193.0.0.0 ( 목적지 주소인 111.0.0.0과 부합 안됨.)

    - 193.14.5.176 & 255.255.255.224  ->  193.14.5.160과 부합한다.

--> 여기에서는 라우팅 테이블의 2번째 entry에 부합했기 때문에 직접전달이 이루어진다. m2 interface로 전달됩니다. U(사용필드) 100 증가


마지막 3번!

3. 라우터 R1이 목적지 200.34.12.34로 가는 패킷 20개 수신

3.1 직접 전달 확인

    - 200.34.12.34 & 255.0.0.0             -> 200.0.0.0 ( 목적지 주소인 111.0.0.0과 부합 안됨)

    - 200.34.12.34 & 255.255.255.224   ->  200.34.12.32 ( 목적지 주소인 193.14.5.160/193.14.5.192 둘 다 부합안됨.)

-- > 목적지 200.34.12.34로 가는 패킷은 라우터 R1이랑 직접 연결되어있지 않다라는 결론이 나오면서, 호스트 지정 주소를 검사하게 됩니다.

3.2 호스트 지정 전달 확인

    - 200.34.12.34 & 255.255.255.255   -> 200.34.12.34 ( 목적지 주소인 194.17.21.16과 부합되지 않음.)

--> 효율성을 깨고라도 보내려고 하는 패킷이 아니다. 그러므로 다음단계인 네트워크 지정 주소 확인을 해야한다.

3.3 네트워크 지정 전달 확인

    - 200.34.12.34 & 255.255.255.0       -> 200.34.12.0 ( 목적지 주소인 192.16.7.0 / 194.17.21.0과 부합되지 않음.)

--> 네트워크 지정 전달 까지 부합하지 않으므로, 해당 라우터는 해당하는 패킷을 처리할 수 없으므로 디폴트 지정 전달 확인과 비교한다.

3.4 디폴트 지정 전달 확인

     - 200.34.12.34 & 0.0.0.0               ->0.0.0.0  ( 목적지 주소인 0.0.0.0과 부합함.)

--> 0.0.0.0과 AND(&)해서 목적지 주소인 0.0.0.0이 나왔으므로, 해당하는 Next Hope(111.30.31.18)로 전송합니다. 

--> 즉, 해당하는 패킷은 보다 상위 개념의 Gateway가 처리하도록 보내주는 것이죠. m0인터페이스에게 전달합니다. U(사용필드) 20 증가


이와같이 라우팅 테이블은 기계가 자동적으로 만들어줍니다. 하지만 사람도 그림만 보더라도 어떤 라우팅 테이블이 만들어질 수 있는지 알아야 기술자이며 전공자로 인정받을 수 있습니다. 그리고 기계가 잘못 만들었어도 잘못 만들었는지 알 수 있습니다.

그럼 다음 그림을 보고 라우팅 R1을 기준으로 라우팅 테이블을 만들어 봅시다.


일단 R1 기준으로 직접전달이 무엇이 있는지 확인해야 합니다.

이 포스팅을 읽으시는 분들은 "R1이 직접 전달할 수 있는 패킷은 2개군"이라고 생각할 수 있습니다.

저도 그렇게 생각했거든요ㅎㅎ 

근데 R3에게 보내는것은, R3의 입장에서 보면 R3만의 라우팅 테이블이 따로 있을 것이고, R3은 그 라우팅 테이블을 기준으로 직접전달과 간접 전달이 있을것입니다. 그렇기 때문에, R3에게 보내는것은 R1입장에서 간접전달로 인식하게 됩니다.

그렇다는건 직접전달할 수 있는 패킷은 134.18.0.0쪽으로 보내는 패킷인데, 134.18.0.0은 B클래스 입니다. 또한 디폴트 마스크는 11111111.11111111.00000000.00000000(255.255.0.0)이죠.

그렇다면 여기까지 알아낸 정보들을 표로 작성해 보겠습니다.


이런식으로 나오겠죠.


그럼 직접전달을 다 그려줬으니 이제 호스트 지정 전달 주소를 확인해 보겠습니다.

근데 그림으로만 봐서는 호스팅 지정 전달 주소가 있는지 없는지 사람으로썬 확인할 수 없습니다.(제가 관리자여서 직접 호스트 전달을 설정했다면 몰라도 ㅋㅋ)


그렇기 떄문에 네트워크 지정 전달 주소를 확인해 봅시다.

해당 그림에서는 3개의 네트워크가 있는데, 그 중 134.18.0.0은 직접 전달을 해줄 수 있습니다.

그렇다면, 간접 전달해 줄 수 있는 네트워크는 2개가 되겠죠.

그 네트워크의 주소는 각각 129.8.0.0(B클래스)/220.3.6.0(C클래스) 입니다. 

B클래스의 디폴트 마스크는 255.255.0.0

C클래스의 디폴트 마스크는 255.255.255.0 이죠. 또한, 둘 다 패킷을 전달해 주려면 222.13.16.40패킷으로 전달을 해줘야 합니다.

그리고 간접전달이기 떄문에 플래그에 G가 추가가 되겠고 Interface는 M1을 통하여 나갑니다.

이것을 바탕으로 간접전달까지 그림을 그려보도록 하죠.



여기까지가 간접 전달까지의 테이블을 작성한거죠.

그럼 마지막으로 디폴트 지정 전달로 보내는 것만 해주면 되겠죠.

디폴트 지정 마스크는 0.0.0.0이고, 도착지 주소는 0.0.0.0이 나오면 됩니다. 그리고 그림으로 봐서 Rest of the Internet으로 전송하기 위해서는 134.18.0.0네트워크를 거쳐서 134.18.5.2의 라우터를 거쳐서 가야합니다.

그럼 그것을 마지막으로 표로 그려보도록 하죠.



다음과 같이 라우팅 테이블이 완성되었습니다.

이해 되셨나요?ㅋㅋ



다음 그림. 그냥 혼자 보고 이해할 수 있죠?


(2),(3)은 서브넷팅 된 겁니다. 근데 이 주소는 클래스기반 주소인지 아니면 클래스가 없는 주소체계인지 모릅니다.

하지만 클래스 기반 주소체계라 가정하면 (2)-80.4.5.0 과 (3)-80.4.6.0은 두개다 주소면서도, 3바이트 끝쪽의 1바이트만 차이가 납니다. 

그리고 마지막바이트가 0인것으로 봐서, 255.255.255.0/24인 걸로 인식이 되는데 정확한 것은 알 수 없습니다.

사실 여기에서 라우팅 테이블은 Next Hop에 201.4.10.3 or 200.8.44.12 이런식으로 두개의 값이 적용되어 있진 않습니다. 저희가 보기 편하게끔 이렇게 작성해 놓은것이죠.

경유하는 네트워크와 지나치는 홉의 갯수가 같더라도 많은 경우의 수가 있습니다. R2라우터를 통해서 가면 1024byte당 1원을 내야 되는데 R3에게 보내면 공짜다! 이러면 R3에게 보내기도 하고 하는거죠. 이런것 때문에 or로 작성했습니다.

그리고 그림에서 Default 지정 주소 전달에서 Next hop의 주소는 나와있지 않기 때문에 알 수 없어서 물음표로 작성됬습니다.


아.. 마지막으로 하나만 더 하고 그만해야지 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ너무힘듬

쓰고 자야짓

이제는 표를 보고 그림을 그려봅시다. 실제로 이것을 더 많이 씁니다.

어디 회사같은곳에서 문제가 있으면, 라우팅 테이블을 보고나서 그림을 많이 그리죠. 보통 네트워크에 문제가 있을때도 표를 보고 많이 해결하곤 하죠.


라우터 R1이 의 라우팅 테이블이라고 하면, 라우팅R1은 직접 연결된 네트워크는 3개입니다.


그럼 이런 그림이 나오겠죠? 라우터 R1은 3개의 네트워크와 직접 연결되어 있고.

이제 표를 다시 보니, 호스트 지정 주소는 없고 간접 주소 지정은 2개가 있네요.

간접 주소 지정2개를 추가해서 그려보도록 하겠습니다.





이런식으로 그려지겠죠!??!?! 


여기에서 R2,R3의 각각의 라우터는 다른 네트워크랑 어떤 IP로 연결이 되어 있는지 모릅니다.

그건 즉, R2,3이 직접 연결, WAN연결 점-대-점 연결 여부를 라우팅 테이블로는 알 수 없습니다.

여기에 디폴트까지 추가해서 그려보도록 하겠습니다 




결과적으로 모든 그림이 그려지면 이렇게 되겠죠.



다음 포스팅은 내일이나 할께용

모두 즐거운 주말 보내십쇼



굿빠~~

+ Recent posts