오랜만에 포스팅 하네요


요즘 중간 레포트 쓴답시고 시간을 못냈죠 ㅠ

이제 시험도 일주일 남아서 이번 포스팅 후엔 2주뒤에 할 수도 있겠군.

그땐 폭풍 포스팅 해야겠네 ㅋㅋㅋ


오늘 포스팅은 직접 전달, 간접전달에 대해서 알아보고, 후반부에서는 라우팅의 4가지(다음 홉,호스트,네트워크,디폴트)를 보고 갈 예정입니다!


이번 강의를 이해하면 인터넷에서 데이터가 어떻게 다니는지 알 수 있습니다.

옛날 포스팅에서 라우터가 IP주소를 물리주소로 변경되고 이런 설명을 했었죠. 그 이야기의 심화과정 입니다.

인터넷에서 최종 목적지까지 패킷이 전달되는 방법은 2개가 있습니다. 방법이 많으면 어렵겠지만 2개라서 쉽죠 ㅎ..ㅎ

그 2개는 직접 전달과 간접 전달입니다.

이것은 제가 마치, 옛날 학교에서 시험볼때를 생각하면 쉽습니다 ㅋ

시험을 다 본후, 맨 뒷자리에 앉아있는 학생들은 시험지를 다 걷어서 선생님에게 직접 전달을 해주죠.

하지만 저같은 경우는 간접 전달로 맨 뒤에 있는 학생에게 넘겨주고, 마지막엔 그 학생이 선생님에게 직접전달을 해주죠.

이 세상에 있는 모든 인터넷은 직접 주거나, 몇번의 간접전달 후 직접전달로 이루어집니다.

즉, 이 세상의 인터넷에서 패킷은 0번 이상의 간접 전달과 무조건 1번의 직접 전달이 있어야 합니다.

이것을 오토마타라는 개념을 배우면 좋을텐데 아쉽네요 ㅎㅎ

오토마타는 *ndroid 이런식으로 검색하면 n앞에 무슨 단어가 오든 상관 없다는 표기입니다.

오타마타의 표기법은 워낙 다양하고, 저도 잘 알지 못하기 때문에 추후에 공부한 후 포스팅할 예정입니다.


오토마타를 알아야지 컴파일러를 이해할 수 있고, 컴파일러를 이해하면 파서를 이해할 수 있죠.

컴파일러를 이해하면 파서를 이해할 수 있고, 파서를 이해하면 자연어 처리라든지 이런걸 쉽게 이해할 수 있다는데..

졸업까지 2년 반 남았죠.. 그 때까지 이 모든것과 알고리즘과 OS와 토익과...진짜 미치네요ㅎㅎㅎㅎㅎㅎ


하이튼 그건그렇고 본론으로 돌아갑시다.

직접전달



직접전달의 뜻은 패킷의 목적지가 전달자와 같은 네트워크에 있는 경우를 직접전달이라 합니다.

즉, 패킷을 전달하려는 사람과 목적지가 같은 곳이면 직접 전달입니다.

그럼 컴퓨터에서 직접 전달인지 어떻게 알 수 있을까요? 같은 네트워크에 있는지 어떻게 알아낼까요?

이전 포스팅에서 공부했던 슈퍼넷팅과 비슷합니다~

네트워크의 주소가 같으면 (시작주소가 같으면)같은 네트워크라고 생각합니다. 시작주소를 알아내기 위해선 마스크를 사용할 것이고. 이 마스크는 슈퍼넷팅 되어있다면 슈퍼넷 마스크 일 것이고, 서브넷팅 되어 있다면 서브넷 마스크. 둘 다 아니라면 디폴트 마스크겠죠.



직접 전달인지 여부에 대해서 송신자는 어떻게 생각하냐면, 목적지 주소에서 네트워크 주소를 추출하여( 목적지 IP주소에 네트워크 마스크를 해주면) 송신자의 네트워크 주소와 비교해서 같으면 직접전달이고 아니면 간접전달이 이루어 집니다. 직접 전달이면 송신자는 목적지의 물리주소를 찾게 됩니다.

위 그림에서 보면 IP의 주소, A에서 P로갈 때, 출발지 주소 10에서 라우터의 주소 20을 알아내고, 그 주소를 봉투에 담아서 전송했었죠.

마지막에 Router2에서 보니까 P/95는 같은 네트워크라 직접적으로 전달을 했습니다.

직접 연결 되어 있으면 목적지의 물리주소를 알아내야 합니다.(IP주소로부터 물리주소를 찾음-ARP 이라고도 부름. 이것은 이전 포스팅에서 친구의 이름을 전화번호부에서 찾는 두 방법을 말했었죠! )

물리주소를 알아내는 방법으로는 두가지 방법이 있습니다. 내부 메모리의 테이블을 찾는 방법이 있고, 외부에 물어보는 방법(ARP)이 있습니다.

내부 메모리에서 찾는건 불가능합니다.( 우리가 사용하고 있는 wifi는 항상 다를것이고, 발급받은 IP주소도 다를것 이기 때문입니다.)

그래서 외부에 물어보는 방법을 많이 사용합니다.

하지만 이 부분은 중간고사가 끝난 이후 포스팅할 예정이므로, 여기에선 "  IP주소를 알아내면 물리주소를 알아낼 수 있다! "라고만 생각하고 넘어가면 됩니다.


간접전달.

간접전달은 윗 그림에도 나와있습니다. 보내는놈과 받는놈이 다른 네트워크에 있으면 간접 전달을 합니다.( 라우터를 찾습니다 - 아래에서 설명합니다. )

이것은 마치, 시험지를 걷어갈 때, 간접전달을 계속 하고, 마지막으로 직접 전달해주는것과 같죠.

패킷은 최종 목적지와 같은 물리적인 네트워크의 라우터에 도달할 때 까지를 간접전달이라 합니다. (여러 라우터를 경유하죠.)

이것은 위 그림에서 Sender가 P/95에게 전달하려고 봤더니, 같은 네트워크상에 없기 때문에 Router1에게 전달해 줍니다. 그리고 Router도 자신의 연결되어 있는 네트워크 중에 목적지와 직접 연결되어 있지 않아서 Router2에게 전달을 해줍니다. 그리고 Router2는 목적지와 같은 네트워크에 포함되어 있으므로 간접전달은 종료됩니다.

그럼 발송할 때 마다 라우터의 주소를 찾아냈는데, 라우터의 물리주소를 어떻게 알아냈을까요?

그럼 라우터의 IP주소를 알아내야지 라우터의 물리주소를 알아낼 수 있을겁니다. 이것은 라우팅 테이블을 이용하여 찾죠.

목적지 IP주소를 주면, 라우팅 테이블에서 라우터의 IP주소를 알 수 있습니다. 그리고 IP주소를 알아내면 내부 메모리 또는 ARP를 이용하여 물리주소를 알아낼 수 있습니다. -이런식으로 인터넷에서 반복적으로 전달이 되죠.



라우팅


라우팅은 데이터그램(3계층)을 위한 경로(다음 홉을)를 찾는 과정을 라우팅이라 합니다. - 이것은 강남역에서 신촌역으로 가는 방법을 설명했던 적이 있죠.

그러면 이 라우팅을 위해서 만든 테이블을 라우팅 테이블이라 합니다. 시스템 소프트웨어에는 전부 테이블로 되어 있습니다 이것도 테이블이라 부르죠.

라우팅 테이블만 있다면, 최종 IP주소만을 사용해서 전체 경로를 결정할 수 있습니다.

그런데, 문제가 생깁니다. 모든 IP주소에 대해서 모든 경로를 라우팅 테이블에 저장하게 되면, 라우팅 테이블의 크기가 너무 커집니다.

즉 이 문제는 요즘 서울 지하철이 정류장만 백개 가까이 되죠(더 많나?) 하지만 이 정류장 중, 임의의 정류장 2개의 최단경로를 다 찾아주는 경로를 저장한다면? 대충 계산한다면 공간 복잡도는 O(n²)입니다. ( 지하철 갯수를 n이라 가정. )근데 n²이기만 하면 되지만, 강남역에서 신촌역까지 갈 때 경유하는 모든 지하철도 저장을 한다면 테이블의 크기는 엄청나게 커지겠죠.

근데 " 지하철의 갯수가 얼마나 많다고 다 저장하면 되지 " 라는 생각을 갖을 수 있으나.. 전 세계에서 사용하는 IP의 갯수는 겁나 많습니다..^^;;

그럼 어떻게 연결을 해야 할까요?

이를 해결하기 위해, (테이블 크기를 줄이기 위해) 새로운 4가지의 기술이 등장했습니다. 

그 기술들은 다음과 같이 있습니다.

1. 다음 홉 라우팅

2. 네트워크 지정 라우팅

3. 호스트 지정 라우팅

4. 디폴트 지정 라우팅


가장 흔하게 사용하는것이, 다음 홉 라우팅을 사용합니다. ( 이건 옛날에 설명했던, 강남역에서 신촌역으로 갈 때, 교대역으로 가서 다시 물어보세요~ 하는 방법입니다.)

전체 경로의 대한 정보를 주는것 보단, 다음 홉의 정보를 주고, 다음 홉에서 다시 다음홉의 정보를 주는것 입니다.

그렇다면 다음 홉 라우팅을 함으로써, 라우팅 테이블에 강남-> 신촌역까지 갈 때 경유하는 경로를 생략할 수 있습니다.

다읍 홉 라우팅이 나오기 전의 원래 개념은 위의 그림에서의 A컴퓨터는 P라는 컴퓨터로 갈 때, A컴퓨터는 자신의 라우팅 테이블에 P로 갈 때 라우터1를 거쳐서 라우터2로 거쳐서 P로 가라! 이런식으로 저장되어 있겠죠. 즉 이건, 전 세계의 100대의 컴퓨터에게 전달이 되려면 100개의 행이 있어야 한다는 뜻 입니다.

그렇다는건 , 정리해보죠.

A는 P로 갈 때 Router1를 거쳐서 Router2를 거치고 P로 가라 

Router1은 P로갈 때 Router2를 거치고 P로 가라. 이런식으로 저장되어 있을 것 이고

마지막으론 Router는 직접 전달이 되어라 이렇게 라우팅 테이블에 저장되어 있겠죠.

하지만, 이것들도 전 세계의 네트워크라고 생각하면 .. 전달될 컴퓨터들을 한정지어서 저장할 순 없는 노릇이죠.

하지만 다음 홉을 쓰면, A는 HostP로 가고 싶으면, Router1에 가서 물어봐라, 그리고 Router1가 P1로 가고 싶으면, Router2로 가서 다시 물어봐라, Router2는 직접 도착해라! 이런식으로 저장하게 되는것이죠! (라우팅 테이블의 컬럼의 숫자가 줄어들겠네요!?)

하지만 이렇게 줄였어도, 강남에서 신촌, 혹은 강남에서 특정한 역까지 가는 경우의 수는 많습니다. 이것도 줄여야 하는데 어떻게 줄일까요?ㅠㅠㅠ(조금 뒤에 설명


네트워크 지정 라우팅



사실상 이해하기 위한 그림을 그리면서, 모든 정보를 내포하고 있게끔 그렷죠ㅎㅎ.. 정말 오래걸리네요ㅋㅋㅋ 그림 보면 이해가 되나요?

네트워크 지정 라우팅은 기존의 모든 주소를 저장하는 테이블 Routing Table A를 (이놈의 공간복잡도는 N2이죠.) 네트워크 갯수만큼 줄인 Routing TableB로 만든 것 입니다.

그렇다는건, 클래스 기반 주소에서 클래스B는 약 6만 5천개의 의 Host를 갖고 있지만, 이것들을 6만 5천개의 행으로 저장하는 것이 아니라, 1개의 열로 저장한다는 것을 의미합니다. 그러므로 routing entry가 줄겠죠! 

사실 이것때문에 네트워크 주소를 둔 것입니다 그리고 블럭을 준 것이죵ㅋ. ( 라우팅 테이블에 저장하기 위하여 대표주소를 정한 것!)

그럼 여기에서 이러한 궁금증이 생길 수 있습니다.

" 그렇다면, 네트워크 지정 라우팅을 함으로써, 컴퓨터 A,B,C,D 로 갈 수 있는 경로를 N2라는 네트워크로 저장했는데, 그렇다면 N2에서는 어느 컴퓨터로 갈지 어떻게 알지??? "

이러한 질문은 4개의 호스트에 대한 정보를 하나로 묶었는데, 그럼 S가 A로 보낼때 N2에게 보낸다는것인데, 그럼 N2에서 A로 어떻게 보내는거죠? 이런뜻으로도 질문을 할 수 있겠죠.

하지만 이러한 질문은 질문조차 틀렸습니다.

A,B,C,D에 대한 라우팅 테이블이 지워지고 N2로 가라는 네트워크 지정 라우팅 테이블은 S 컴퓨터에 저장되어 있습니다. 

그럼 S라는 컴퓨터는 A에게 가라! 라는 명령이 들어온다면 R1에게 보낼 것 입니다.

그러면 R1이라는 라우터는 자신의 네트워크에 A라는 컴퓨터가 있기 때문에 직접 전달을 하겠죠?

그럼 A라로 가라는 정보는 어디에 있을까요?

정답은 S가 보낸 패킷(데이터그램 - 3계층에서 보낸 정보)의 봉투(헤더)에 보면 목적지 IP가 작성되어 있습니다.

그렇기 때문에 Host 컴퓨터 S가 R1에게 보내면, R1은 그 봉투를 열어보고 그 봉투에 있는 목적지 IP가 자신의 IP인지 확인합니다.( 목적지 IP는 가장 맨 앞에 있다고 헀죠!)

그러면 R1는 패킷(데이터그램)을 열어서 헤더를 확인해 보니 N2에 있는 A라는 컴퓨터로 가는것 임을 인식하게 됩니다. 그리고 인식하고 보니 A라는 컴퓨터는 자신의 네트워크에 있는것을 인식하고 직접 전달하게 됩니다. (직접 전달할 시, R1은 N2를 알고 있으니, A의 물리주소를 내놔! 라고 하겠죠?)



호스트 지정 라우팅



네트워크 지정 라우팅의 반대 개념입니다. 아무것도 적용되지 않은 Routing Table의 개념은 공간복잡도가 O(N²)죠. 이것을 줄이기 위해서 네트워크 지정 라우팅을 사용한 것이구요. 하지만 그럼에도 불구하고, 호스트 지정 라우팅이 필요합니다.  왜냐하면 네트워크 지정 라우팅을 함으로써 엄청나게 효율적으로 공간을 줄일 수 있었습니다. 하지만 호스트 지정 라우팅은 다른 목적을 위해 효율성을 희생 시켜서 사용합니다.

이것은 시스템을 설계하면서 고려해야 할 부분입니다. 개발할 시 시간과 공간 복잡도를 항상 효율적으로 있게끔 개발을 해야합니다. 하지만 여기에서 멈추는 것이 아니라, 이런 효율성들은 다른 것들을 위해서 희생도 될 수 있다고 생각해야 합니다. 어떤 경유는 비 효율적이지만 한다는 뜻과 같죠.

관리자가 특정 경로로 패킷을 전달하는것을 ( 모든 네트워크는 효율적으로 패킷을 전달하지만 이 경우는 예외적으로 ) 어떤 특정 호스트 하나만 다른 경로로 가기를 원할 때 사용합니다.

이건 보안이 적용된 대화에서 사용할 수 있습니다. 만약 한국 대통령이 미국 대통령과 비밀 통화를 한다면 이것은 보안적으로 연결이 되어야 겠죠. 그렇다는건 이 연결은 같은 네트워크상에 있더라도 다른 네트워크와 같은 경로로 연결이 되어 있는것이 아니라 다른 경로로 연결이 되어 있다는 것을 뜻합니다.

예를들면, 제가 처음 여자친구에게 좋아하는 마음을 표현할 때, 전화를 하고, 편지를 주고받고 할 것입니다. 전화를 주고받을때도 다른 사람들이 제 통화를 안듣고 싶어 하기를 원하고 편지를 줄 때도 다른사람들은 보지 못하게 편지봉투에 넣어서 건네주죠. 하지만 여자친구가 아닌 다른 사람들에게 전달할 말이 있거나 할 때는, 그냥 종이에 써서 벽에 붙혀놓는다던가, 사람들이 있든 없든 아무곳에서 대화른 나눈다던가 하죠. ( 벽에 붙혀놓는 것이 네트워크 지정 라우팅 입니다.)

이와 같이 "여자친구와 통신하는 방법(벽에 붙히면 많은 사람들이 볼 수 있지만, 굳이 편지봉투에 넣어서 한명만 보게 하는 것)"과 "여자친구가 아닌 타인들이랑 통신하는 방법"의 차이가 호스트 지정 라우팅 입니다.

즉 이것은 경로를 지정할 수도 있습니다. 예를들면, 네트워크 상에서 특정한 라우터를 거쳐서 가게끔 테스트 해본다든지 경로를 정할 때 말입니다!(여자친구에게 도착하는걸 정하는 것 처럼)

위 그림을 통해서 보면, HostA에서 HostB로 갈 때에 가장 짧은 경로는 R3에게 갈 것이지만,( 네트워크 지정 라우팅이라면 R3으로 보내겠죠 ) 호스트 지정 라우팅을 사용한다면 R1을 거쳐서 R2로 보내고, R2에서 HostB로 보낼 수 있습니다. 이런건 R1을 테스트 할 때도 많이 사용하죠.



디폴트 라우팅




(그림 그릴때마다 넘나 힘드렁..뉴뉴 ㅠㅠ 솔까 여기까지 읽었으면 댓글좀 달아줘요ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

디폴트 라우팅이 다른 라우팅 들과 비교하면 제일 막강합니다! 이것이 있기 때문에 전 세계의 네트워크가 형성될 수 있는것이죠.

라우팅 테이블은 어느 네트워크로 갈려면 어디로 가라 아니면 저쪽으로 가라~ 이런식으로 지정을 합니다. 하지만 전 세계에 있는 모든 컴퓨터에 대한 정보를 다음 홉 지정 라우팅, 네트워크 지정 라우팅이나 호스트 지정 라우팅을 지정하여서 저장할 순 없습니다.

그럴 때 사용하는 것이 디폴트 라우팅입니다.

디폴트 라우팅은 내가 말한거에 대하여 해당하는 정보가 없으면 ~~로 보내라! 라는 거죠~ㅎㅎ

내가 알고 있는 정보는 알고 있기 때문에 그 네트워크를 찾으면 되지만, 그 네트워크를 모르면, 다른 사람에게 위임하는 것 입니다.

만약 학교라 생각하면, 학교에서 어느 선배/후배 혹은 동기의 번호를 모른다면 과사에 방문하여 조교선배한테 " ~~에게 이 정보를 대신 전달해 주세요! "라고 말 하면 조교행님은 그 정보를 대신 전해줍니다.  이해 가시나요? 

음.. 이해 안되는 사람들을 위해서 위의 그림으로 예를 들어봅시다.

우리나라의 네트워크에 KT가 있다고 가정해보자( 해외로 나갈때를 가정 -실제로 해외로 나갈때 혜전을 통해서 나가죠.)

우리가 미국에 있는 구글.com에 접속하려고 하면, 우리 컴퓨터에 구글로 갈 수 있는 정보가 없습니다. 보통 라우팅 테이블에서 디폴트로 등록되어 있는 정보는 같은 기관(네트워크)에 있는 정보밖에 모릅니다. 저희가 KT소속이라 하면, 저희는 일본,미국에 대한 정보를 모르는것은 당연한 것이겠죠?

그래서 구글.com으로 접속할때 저희 컴퓨터는 Default로 패킷을 컴퓨터 과학 네트워크로 보냅니다. 컴퓨터 과학 네트워크도 구글에 대한 정보가 없기 때문에 공과대학 네트워크로 전해집니다. 하지만 또 공과대학 네트워크에서는 단국대 네트워크로 정보를 보낼 것 이고, 이런식으로 쭉쭉 전달되서 최종적으로 구글에 도달하게 될 수 있는겁니다.

정리하자면  내가 어떤 컴퓨터인데, 내가 어떤 목적지 IP를 알아서 보내려고 했는데, 그 정보가 Routing table에 있으면 그 정보를 보고 전송하면 되지만, 만약 알아냈던 IP주소에 대한 정보가 Routing table에 없다면 전부 Default 네트워크로 보냅니다. 이런식으로 찾아간다면 전 세계에 있는 어떤곳이든 찾아갈 수 있습니다. Defualt IP의 값은 0.0.0.0입니다.

여기서 추론좀 해보져.

0.0.0.0은 부트스트랩시간에 사용하는 주소라 공부했습니다.

하지만 여기서 사용하는 0.0.0.0은 다릅니다. 부트스트랩 시간에 사용하는 0.0.0.0은 목적지 주소로 사용할 수 없었지만 여기에서는 네트워크 마스크가 0.0.0.0입니다.

여기에서 네트워크 마스크가 0.0.0.0이면, 어떤 값이 들어오든 AND(&)하면 0.0.0.0이 나옵니다. 

즉, 자신과 연결된 default gateway로 전송하죠.(자신과 연결된 default router로 보내는것)

갑자기 생각난건데, 0.0.0.0를 생각해보니 그럼 모두가 1인(255 .255 .255 .255)도 잠깐 복습하고 가죠.

모두가 1인것은 제한된 브로드캐스크라고 생각할 수 있지만, 이전 포스팅에서 배운 255.255.255.255은  IP/32인 마스크가 전부 1놈을 말하는거죠. 이것의 의미는 이 블럭의 IP주소는 1개밖에 없다라는 뜻이겠죠? 한개가 있다는 것은 네트워크 주소가 아니라 호스트의 주소라는 것이겠네요!


정적 라우팅과 동적 라우팅.

뭐 타이틀은 이렇게 걸어놨지만 생각해보면 벌거 없죠. CGI를 이해하고 있으면 그냥 지나치셔도 되는겁니다.

방금 전 처럼, 다음홉, 네트워크 , 호스트, 디폴트 이런방법들을 사용해서 테이블 크기를 줄였습니다.

이렇게 만들어진 테이블은 정적으로 만들 수 있고, 동적으로도 만들 수 있습니다.

컴퓨터에 있는 모든 정보는 정적이거나 동적입니다. 제가 갖고 있는 핸드폰의 연락처도 정적입니다.(사람이 개입한것)

그러면 사람이 개입하지 않아도 정보가 바뀌는것이 동적이죠.

이렇게 말 하면 감이 안오니 예시를 들어보겠습니다.

저희가 은행에 있으면 환율 정보나 주식정보가 실시간으로 변하는 것을 볼 수 있습니다.

하지만 이런것은 제가 개입하지 않아도 정보가 계속해서 변환하는것.

또한 네이버나 다음과 같은 어떤 포털사이트에서 로그인을 하면 로그인 부분이 제 정보창으로 변환되는것도 예시를 둘 수 있겠네요.

이런것들이 동적페이지라고 부르기도 합니다. ( 근데 이걸 서버단에서 동작하기 때문에 속도가 조금 늦어집니다.)

그래서 나온게 액티브 문서라는게 있죠~ 제 포스팅중 웹 1.1스펙에 대한 글을 보시면 설명이 있습니다.

그래서 컴퓨터의 모든 정보는 정적이나 동적으로 나뉘는 것 입니다.

여기서 정적 라우팅은 라우팅 테이블에 있는 모든 정보를 관리자가 직접 입력하게 해주는 것 입니다.

목적지별로 라우팅 테이블에 입력해 줍니다.( 이런거는 인터넷에 다른 수정이 발생하면, ...똥망 - 그래서 주로 실험실에서 사용하죠. )



동적 라우팅은 이것들을 라우터에 적용시켜서, 전 세계에 있는 모든 라우터들이 쌍방향 통신할 수 있게 해두는겁니다.

이것은 제가 아프리카에 있는 라우터와 통신하는데, 아프리카에 있는 라우터와 통신하던 경로에 있는 라우터가 죽게되면, 그 옆에 있는 라우터가 소문을 내기 시작합니다. " ~~로 가는 경로의 ~~라우터가 죽었대~~ " 이러면서 말이죠.

그래서 저희가 인식을 하고 경로를 찾아갈 수 있게끔 되는겁니다.

여기서 쓰는 프로토콜이 RIP,OSPF,BGP,다이젝스 알고리즘 같은것들이 있죠.

지금은 대부분 동적 라우팅으로 연결되어 있습니다.

그렇기 때문에 전 세계에 있는 어떤 라우터가 Shutdown이 되더라도 저희는 아무런 영향을 받지 않고 인터넷을 사용할 수 있게 되는것이죠.




정의 인용 및 참고한 서적 : TCP/IP프로토콜 제4판(Behrouz A. Forouzan) - MccGraw-Hill Korea 출판사.

+ Recent posts