서론
제목처럼 정말 쉽고 재미있는 과제였다. 사실 평가를 하면서 보니 네트워크에 대한 지식이 조금 있어서 쉬웠던 것 같기는 한데, 네트워크에 대한 지식이 전무한 사람도 2~3일 정도 공부하면 통과할 수 있을 거라고 생각한다.
평가를 하면서 느낀 게 네트워크를 모르는 사람에게는 아예 문제 자체가 무슨 의미인지 모를 수도 있다. 그래서 이 글에서는 네트워크를 처음 듣는 초등학생도 이해할 수 있도록 설명할 계획이지만 잘될지는 아직 모르겠다. 쉽게 설명하기 위해 노력하다 보니 실제와 조금 다른 부분이 있을 수도 있습니다(ex. 스위치의 역할을 공유기라고 생각하면 된다고 한다거나)
평가내용을 보면 알겠지만 15분짜리 평가지만 네트워크에 대한 기본 지식을 같이 이야기해야 하기 때문에 한 시간 정도 잡는 게 더 알맞다고 생각한다. 또한, 평가 난이도가 운에 따라 크게 달라지게 된다. 이번 학기에 네트워크 과제를 들었거나 해서 이미 지식이 있는 사람들이 많이 잡히면 쉬워지고, 네트워크를 처음 듣는 사람이 오면 난이도가 급상승한다.
물론 피평가자 입장에선 당연히 다 알아야 하니까 운으로 대충 통과할 수 있는 과제는 아니라고 생각한다. 네트워크에 대한 지식이 없는 평가자를 만나면 설명을 못해서 fail일 테고, 지식이 있는 사람을 만나면 모르는 게 걸려서 fail 일 테니까...라고 생각하면 그 정도로 운이 작용하는 건 아닌 것 같기도 합니다.
이론 정리
말 그대로 네트워크에 대한 연습을 하는 과제이다 보니 네트워크에 대한 기본적인 내용은 알아야 한다.
우선 네트워크란 무엇일까?
네트워크란 말 그대로 그물을 짜는 작업을 의미하는데, 기기들끼리 서로 통신하기 위한 망이 그물처럼 짜여있어서 이런 이름이 붙었다.
단순하게 선 하나로 데이터를 보내는 게 아무래도 값싸다 보니 처음에는 이렇게 그물 형태로 동작하지는 않았다. 필요에 의해 깔은 한두 가닥의 선으로 데이터가 오고 갔다.
그러다 보니 한 군데에서 문제가 발생하면 모든 통신이 먹통이 되기도 하였는데, 민간 시설이라면 며칠 문 닫고 수리하면 됐지만 군사용도의 시설에서 문제가 발생하면 이게 큰 문제가 될 수도 있어서 미국에서 인터넷의 조상인 아파넷이 개발되었다.
한 선에서 문제가 생겨도 정보를 전달할 수 있도록 만들다 보니 점점 그물 형태로 진화했고 그걸 현대에 네트워크. 즉, 통신망(通信網)이라고 부른다.
밑에서 따로 해설을 하겠지만 6번 문제를 가져와서 이걸 기준으로 설명을 하면, 우측 하단에 장치가 단말기이다. 영어로는 terminal인데, 터미널의 원래 뜻은 말단이나 종점이라는 뜻으로 데이터가 거쳐가는 통로가 아닌 데이터를 사용하고 생성하는 가장 끝에 있는 기계라는 뜻이다. (종점기나 말단기는 어감이 이상해서 단말기로 번역한 게 아닐까?)
정작 현대에는 '터미널'이라고 하면 맥의 iTerm처럼 커맨드-라인 인터페이스를 뜻하다 보니 네트워크에서는 End-point라고 표현한다. 마찬가지로 마지막 지점이라는 뜻이다.
이러한 특정 기기를 식별하기 위해 장치마다 주소를 부여했는데 이걸 ip라고 부른다. 32비트를 8비트씩 쪼개서 4개의 영역으로 나눠서 약 43억 개의 장비를 식별할 수 있게 만들어두고 초기에는 여유가 넘치니 대충 분배해서 사용했는데, 나중에 이 ip가 모자라게 되자 네트워크 주소를 낭비 없이 효율적으로 사용할 수 있게 서브넷 마스크라는 걸 만들었다.
서브넷 마스크란 ip주소를 네트워크 주소와 호스트 주소로 나누는 것으로, 32비트의 앞에서부터 1을 채워서 사용하고, 255.255.255.0 혹은 /24로 표현한다. 네트워크 주소는 하나의 로컬 네트워크를 정의하는 부분이며, 호스트 주소는 로컬 네트워크 내의 단말기를 지칭한다.
즉, 하나의 스위치를 사용하는 로컬 네트워크에서는 같은 서브넷 마스크와 같은 네트워크 주소(서브넷)를 사용해야 하면서, 로컬 네트워크 내의 장치끼리는 다른 호스트 주소를 사용해야 한다.
돌아와서, 단말기라는 표현을 우리는 '이동전화 단말기 자급제' 나 '카드 단말기' 같은 데서 사용한다. 이를 이용해 위의 그림을 변형해서 다시 보자
내가 편의점에서 오로나민 씨를 사고 비씨카드로 결제를 하면 네트워크에서 길을 찾아서 카드사에 카드 정보를 보내고, 결제에 문제가 없는 것을 확인하고 카드 단말기에 결제 완료 확인을 보내도록 작업을 할 것이다. 이렇게 마지막에 데이터를 만들어서 보내고 받아서 사용하는 장치를 단말기라고 부른다.
카드 단말기 바로 위에는 스위치가 있는데 쉽게 설명하면 집에 있는 인터넷 공유기를 생각하면 된다. '스위치는 MAC address를 기준으로 데이터를 나누고, 공유기는 ip를 기준으로 나누면서 DHCP 프로토콜을 통해 하위 장비에 ip를 부여하고 NAT 기능을 통해 사설 ip를 공인 ip로 변경하여...' 어쩌고 하는 설명은 쉽게 설명할 자신이 없어서 넘길 테니, 그냥 저게 공유기인데 내가 직접 ip를 할당해야 하는 귀찮은 공유기라고 생각하고 추가로 궁금한 부분은 '공유기와 스위치'라고 검색해보자
그리고 공유기와 카드회사 중간에 데이터가 길을 찾는 과정에서 사용되는 장치가 길(route)을 찾는 사람이라는 뜻의 루터이다. 한국이나 미국에서 루터라고 읽으면 아무도 못 알아듣기 때문에 라우터라고 읽어야 한다.(같은 이유로 길을 찾는 과정은 루팅이 아니라 라우팅이다)
이 라우터에는 크게 두 가지 정보가 들어있는데, 라우터가 보유하고 있는 하위 네트워크와 특정 ip로 가기 위해 거쳐야 하는 다른 라우터의 정보를 가지고 있는 라우팅 테이블이 있다.
라우터는 데이터를 받으면 해당 데이터(패킷)의 내용을 조사하여 데이터의 아이피를 보고 내 네트워크인지, 그게 아니면 어느 라우터로 보내야 하는지를 라우팅 테이블에서 찾아서 보낸다. 어느 라우터로 보낼지 정하는 방법은 정적 라우팅과 동적 라우팅이 있다.
정적 라우팅은 데이터가 전달되는 경로를 직접 정해서 데이터를 보내는 것으로 보안성이 좋고 더 빠르지만, 라우터가 많아지고 중간에 장애가 발생하면 대처하기가 어려워진다. 이 과제에서는 라우팅 테이블을 직접 설정하는 정적 라우팅만을 사용한다.
동적 라우팅은 라우팅 프로토콜을 사용하여(ex. https://namu.wiki/w/OSPF) 최적의 경로를 설정하는 방법이다. 단점은 프로토콜에 따라 다르지만 대체로 정적 라우팅의 반대이다.
그래서 한 라우터 안의 다른 네트워크끼리는 무조건 다른 네트워크 주소를 사용해야 한다. 예를 들면 '경부선을 타고 내려가라'라는 말을 들었는데 경부선이라는 이름을 가진 도로가 여럿이면 어디로 가야 하는지를 알 수 없듯이 한 라우터 안에서 같은 네트워크 주소를 지닌 경로가 여럿이면 패킷이 갈 길을 잃어버리게 된다.
위에서의 내용을 두줄로 요약하면 아래와 같으며 이 과제에서는 이 내용만 알아도 절반 이상은 풀 수 있다.
1. 한 라우터의 다른 경로는 다른 네트워크 주소를 사용해야 한다.
2. 한 경로의 네트워크 주소는 모두 동일하며, 호스트 주소는 모두 달라야 한다.
문제별 해설
서브젝트에서는 1번부터 10번까지 10개의 문제를 풀고 get my config를 클릭하여 나온 json 파일을 깃 레포지토리에 제출하도록 되어있으며, 평가 중에는 6~10번의 문제 중 세 개의 문제를 랜덤 하게 풀고 평가자에게 설명하도록 되어있다.
1번 문제는 단순하게 두대의 컴퓨터를 두 번 연결하면 된다.
모든 문제는 노노그램처럼 고정되어있는 값들을 이용하는걸 먼저 해야 한다.
이 문제는 연결해야 하는 서브넷 마스크를 참조하면서 네트워크 주소(이름)와 브로드캐스트 주소, 그리고 상대 컴퓨터의 주소가 아닌 주소를 입력하면 된다.
클라이언트 A는 서브넷 마스크를 참조하면 104.96.23.0~104.96.23.255의 범위에서 네트워크 주소 104.96.23.0과 브로드캐스트 주소 104.96.23.255 , 상대 컴퓨터의 주소 104.96.23.12를 제외한 나머지 값 중 하나를 골라 넣으면 된다.
마찬가지로 클라이언트 C는 211.191.0.0~ 211.191.255.255의 범위에서 211.191.0.0 , 211.191.255.255 , 211.191.37.75를 제외한 나머지 값 중 하나를 골라 넣으면 된다.
2번 문제는 서브넷 마스크에 대한 이해와 로컬 호스트에 대해 알고 있는지를 묻는 문제이다.
현재 상황이 로컬 네트워크이므로 서브넷 마스크는 반드시 동일해야 한다. 따라서 B1의 서브넷 마스크 끝을 224로 바꿔준다.
그런 다음 1번 문제처럼 B1의 아이피와 같은 대역 안의 아이피를 넣어주면 된다.
즉 현재 B1의 아이피 대역은 192.168.137.192~192.168.137.224 이므로 A1은 끝이 192, 224, 222 가 아닌 아이피를 정해주면 된다.(앞으로는 제외해야 하는 아이피 생략)
C는 127.0.0.0~127.255.255.255 은 자기 자신을 가리키는 IP로 로컬 영역에서 사용할 수 없다.
이런 식으로 사용할 수 없는 아이피가 총 4개가 있는데 여기서 나온 루프백 IP (127.0.0.1) , 그리고 사설 IP(가상 IP)로 지정되어있는
- 10.0.0.0 ~ 10.255.255.255
- 172.16.0.0 ~ 172.31.255.255
- 192.168.0.0 ~ 192.168.255.255
이렇게는 3+1개를 피해서 아이피로 정해줘야 한다.
/30은 앞에서부터 30개가 1이고 맨 뒤 두 자리만 호스트 주소로 사용할 수 있다 라는 의미로 255.255.255.252와 동일한 의미이다. (https://namu.wiki/w/CIDR 참조)
따라서 두 개의 아이피를 다 맨 앞과 맨 뒤를 적절히 변환해주면 된다.
3번 문제는 같은 로컬 네트워크이므로 서브넷 마스크와 ip가 하나씩 잠겨있기 때문에 그거에 맞춰서 바꿔주면 된다.
앞서 한 것과 동일하게 서브넷 마스크를 255.255.255.128 혹은 /25로 바꿔주고, 104.198.142.1~104.198.142.127 중에 겹치지 않게 골라서 넣어주면 된다.
4번 문제는 라우터의 인터페이스끼리는 네트워크 주소(서브넷 마스크와의 AND 부분)가 달라야 하기 때문에, 라우터끼리는 네트워크 주소가 다르면서 스위치 안에서는 네트워크 주소가 같도록 설정하면 된다.
R1과 R2와 R3는 다르면서, R1과 A1과 B1이 동일하게 설정해야 하는데 A1 컴퓨터(클라이언트 A)의 IP가 잠겨있으므로 그걸 기준으로 생각해서 변경하면 된다.
다만 /24를 기준으로 볼 때 원래대로라면 96.192.114.1~96.192.114.254를 할당할 수 있겠지만 96.192.114.0~96.192.114.128과 96.192.114.192~96.192.114.255는 R2와 R3 라우터에서 사용 중이므로 사용할 수 없다.
따라서 세 개의 로컬 네트워크에는 96.192.114.129~96.192.114.191의 값을 나눠서 넣어주면 된다.
5번 문제는 라우팅 테이블이 여기에서 처음 등장한다. A와 B의 ip와 서브넷 마스크에 대한 풀이는 앞과 동일하며 로컬 네트워크가 달라야 하는 부분은 앞에서 설명하였다.
클라이언트에 붙은 루트에 왼쪽에는 목적지, 오른쪽에는 경로가 되는 라우터의 주소를 입력해주면 된다.
어떤 값이던지 한 라우터로 보내야 한다면 목적지 부분에 defalut 나 0.0.0.0/0을 입력해줘도 동일하게 동작한다.
6번 문제는 컴퓨터를 기준으로 하나씩 따라가면서 고치면 그렇게 어렵지는 않다. 다만 별생각 없이 먼저 보이는 인터넷을 기준으로 보면 굉장히 헷갈리게 된다. 하나씩 따라가면 그렇게 어렵지는 않다.
인터넷에서 값을 입력할 때에는 반드시 목적지를 적어줘야 한다. 라우터에 들어갔을 때 어디로 돌아가야 하는지를 알려줘야 하기 때문에 defalut나 0.0.0.0/0을 사용할 수 없다. 네트워크 주소만 동일하면 되기 때문에 여러 가지 정답이 있는데 71.251.123.227/32 나 71.251.123.128/25로 설정하면 된다. 71.251.123.0/24 도 되긴 하지만 다른 라우터가 없기 때문에 가능한 것으로 정상적인 경우는 아니다.
반대로 나가는 루트에는 목적지를 8.8.8.8/16으로 적어도 되고 0.0.0.0/0으로 적어줘도 상관은 없다.
7번 문제에서는 R11-A1, R12-R21, R22-C1 이 서로는 다르면서 각자는 같게 네트워크 주소를 구성하면 된다.
R1 라우터의 아이피가 고정되어 있으면서 앞의 세 개가 같기 때문에 서브넷 마스크를 /25 이상으로 설정하여 네트워크 주소를 분리해준다.
아래 두 개는 마음 가는 대로 편하게 바꿔주고 라우팅 테이블에 라우터의 ip들을 경로로 지정해주면 된다.
8번 문제에서는 인터넷에서 돌아오는 목적지의 ip주소가 /26으로 되어있다. 마지막 단말기 C1과 D1의 ip 주소가 149.176.63.1~149.176.63.63 이어야 한다는 뜻이다.
R12, R13-R21, R23-D1, R22-C1로 나눠서 네트워크를 구성하면 되기 때문에 255.255.255.240 (/28)로 구성을 하면 4개로 나눠서 아이피를 할당할 수 있다.
따라서 아이피가 고정된 R13과 그에 따라 아이피 끝자리가 49~63인 R21 은 확정이고, 아이피가 고정인 R12를 제외한
17~31, 33~47를 R23-D1, R22-C1 네트워크에 할당해주면 된다.
9번 문제는 뭔가 많아 보이지만 여기까지 잘 공부했으면 이 문제도 크게 어렵지 않다. 이것도 뭐가 한 묶음이고 뭐가 달라야 하는지와 고정값으로 뭘 줬는지를 바탕으로 정리할 수 있다.
위에서 한번 설명했지만 이 문제에서 기본값으로 제시된 192.168.~ 과 10.~ 은 사설 ip로 해당 값을 인터넷 연결에 사용하면 제대로 수신받을 수가 없으므로 해당 ip는 그대로 사용하지 말고 변경해줘야 한다. (https://namu.wiki/w/사설_IP)
왼쪽 위부터 묶음끼리 정리를 해보면 아래와 같다.
A1 - B1 - R11
R12
R13 - R21
R23 - D1
R22 - C1
그리고 고정값을 힌트로 값을 정리한 다음 문제를 보면서 하나씩 풀면 어렵지 않게 풀 수 있다.
Goal 1 : meson need to communicate with ion (A1과 B1을 연결하시오)
Goal 2 : cation need to communicate with gluon(C1과 D1을 연결하시오)
Goal 3 : meson need to communicate with Internet(A1과 인터넷을 연결하시오)
Goal 6 : cation need to communicate with Internet(C1과 인터넷을 연결하시오)
Goal 4 :meson need to communicate with gluon(A1과 D1을 연결하시오)
Goal 5 :ion need to communicate with cation(B1과 C1을 연결하시오)
10번 문제는 마찬가지로 고정값을 힌트로 먼저 정리한 후에 문제를 보면서 나머지를 채워 넣으면 어렵지 않게 풀 수 있다. 힌트가 많기 때문에 오히려 9번보다 쉽다.
다만 R22-H31을 연결할 때 왜인지 안된다면 같은 ip/넷마스크를 다른 데서 사용하지는 않는지 확인하면 좋다. 127보다 낮은 숫자를 끝자리에 입력하면 스위치 S1의 로컬 네트워크와 동일해서 인터넷에서 들어오는 패킷이 R1에서 헤매게 돼서 안된다.
결론
쓸 때는 별 생각이 없었는데, 다 쓰고 나서 보니 치트 시트의 느낌이 나긴 한다. 다만 평가에서 다른 자료를 참조할 수 없게 되어있기 때문에, 이 글을 보면서 평가를 받진 않을 테니 치팅은 걸릴 거라고 생각해서 내용을 지우거나 정리하진 않았다.
'이 글을 통째로 외워서 통과하는 사람이 있으면 그게 공부를 한 거지...' 하는 마음으로 적었으니, 평가 도중에는 이 글을 안 보셨으면 좋겠습니다...!
감사합니다.
도움이 된 사이트 목록
https://www.youtube.com/watch?v=gOMljj6K2V0
https://onepinetwopine.tistory.com/433
https://velog.io/tags/netpractice-42
'프로그래밍' 카테고리의 다른 글
[42서울] CPP Module 00 - c++ 과제의 시작 (0) | 2022.07.28 |
---|---|
[42서울] cub3D는 아름다워(Cub 3d è bella) (0) | 2022.07.23 |
[42서울] 미니쉘(minishell) 파싱, 그 후회와 참회의 기록. (0) | 2022.06.19 |
[42서울] 철학자(Philosophers)에게 밥을 먹이자 (0) | 2022.05.13 |
[42서울] pipex 심플 가이드 (2) | 2022.04.26 |