응답 경로와 기본 경로
100분 안팎
학습 목표
요청은 도착하지만 응답이 돌아오지 않는 누락 경로를 재현하고 고칩니다.
개념
왕복 경로는 두 개의 독립적인 결정입니다
학생 요청이 서버까지 갔는데 화면에서 응답이 보이지 않는 상황을 재현합니다. 서버는 받은 경로를 기억해 그대로 뒤집어 보내는 것이 아니라 응답 목적지에 대한 자기 라우팅 표를 조회합니다. 서버에 학생 대역 경로가 빠져 있으면 요청 도착과 응답 송신의 조건이 달라집니다. 이 레슨은 정상 상태를 먼저 확인하고 응답 경로 하나만 삭제해 영향 범위를 비교합니다.
서버에는 기본 경로를 남기지 않습니다
이 실험에서 server1은 학생·교직원·게스트 /24별 정적 경로만 가집니다. 이전 단계 setup이 넣은 기본 경로는 activate.sh에서 삭제합니다. 기본 경로를 그대로 둔 채 학생 /24 경로만 지우면 그 넓은 후보로 응답이 돌아가 결함이 가려집니다. 경로 삭제 실험 전 route show로 대체 후보가 없는지 확인합니다. 기본 경로는 자동 우회라는 성질 때문에 정상 운영에서는 편리하지만 원인 분리 실험에서는 변수가 됩니다.
학생 요청 방향은 그대로 유지합니다
s1의 기본 게이트웨이와 r1의 v30 직접 연결 경로는 바꾸지 않습니다. server1에서 10.20.10.0/24 정적 경로만 지웁니다. 이렇게 하면 학생 요청을 서버로 전달하는 선택은 남아 있고 서버에서 학생 주소를 목적지로 조회할 때 경로가 없어집니다. 여러 장비의 기본 경로를 동시에 지우면 어느 변화가 왕복을 막았는지 판단하기 어렵습니다. 실험마다 바꾼 객체와 값을 한 줄로 적습니다.
route get으로 응답 선택을 읽습니다
server1에서 ip route get 10.20.10.11을 실행하면 응답 목적지에 대한 선택을 확인할 수 있습니다. 경로가 없는 상태에서는 실패 상태와 Network is unreachable 같은 오류를 기록합니다. 이 명령은 경로 조회이며 실제 ping 응답 송신의 캡처는 아닙니다. 요청 도착 자체를 관측하려면 실습 인터페이스 tcpdump 등 별도의 증거가 필요합니다. 제공 자동 검사는 요청 방향 경로 유지와 응답 조회 실패 및 왕복 실패를 결합하며 캡처 완료를 주장하지 않습니다.
영향이 없는 교직원을 대조군으로 씁니다
삭제한 것은 학생 10.20.10.0/24 경로뿐입니다. server1의 교직원 10.20.20.0/24는 유지되므로 t1에서 서버로의 ICMP 왕복은 계속 성공해야 합니다. 학생 실패와 교직원 성공을 함께 보면 서버 전체 다운이나 라우터 전달 전체 비활성이라는 가설과 구별할 수 있습니다. 대조군까지 실패한다면 실험 전제를 다시 점검합니다. 서버 주소, 링크 상태, v20·v30 및 전달 스위치를 읽습니다.
기본 경로는 외부 인터넷의 보장이 아닙니다
0.0.0.0/0은 더 구체적인 IPv4 후보가 없을 때 사용하는 경로입니다. 학생 단말에는 .1 기본 게이트웨이가 있지만 r1에는 외부 기본 경로가 없습니다. 따라서 학생 기본 경로가 존재한다는 사실만으로 인터넷 연결이 생기지 않습니다. 이 프로젝트는 가상 학교망이며 실제 외부망을 연결하지 않습니다. 가상 WAN과 NAT는 다음 단계에서 별도의 네임스페이스로 확장할 예정이므로 호스트의 관리 경로를 빌려 연결하지 않습니다.
응답 경로 복구는 같은 조건으로 확인합니다
10.20.10.0/24 via 10.20.30.1 dev eth0를 서버에 다시 추가합니다. route show와 route get으로 올바른 목적지·다음 홉을 확인하고 처음과 같은 학생 ping을 재실행합니다. 복구 명령의 종료 코드 0은 설정 요청이 받아들여졌다는 증거이며 실제 왕복 성공은 별도 관측입니다. 기준 상태, 결함 상태, 복구 상태를 같은 대상과 횟수로 비교해야 성공 기준이 중간에 바뀌지 않습니다.
ping 실패와 도구 실패를 분리합니다
제공 검사는 Linux ping을 제한 횟수와 시간으로 실행하며 종료 코드 0을 성공, 1을 응답 실패로 구분합니다. 다른 종료 상태는 도구 오류로 중단해 의도한 차단이나 결함으로 승인하지 않습니다. 명령을 못 찾거나 권한이 부족한 결과로 응답 경로 결함을 증명할 수 없습니다. 출력에 Destination Host Unreachable 또는 timeout이 보이면 그 메시지의 출발지와 당시 경로 표를 함께 확인하며 원인을 단정하지 않습니다.
비대칭 경로도 가능하지만 이번 망은 단순합니다
실제 망에서 요청과 응답이 다른 라우터를 지날 수 있으며 상태 기반 정책과 경로 선택이 상호 작용할 수 있습니다. 이번 실습은 r1 하나의 네 VLAN으로 조건을 제한해 응답 누락 하나를 재현합니다. 비대칭이라는 용어로 모든 실패를 설명하지 않고 어느 장비에서 어떤 목적지 경로가 빠졌는지 말합니다. traceroute의 별표만으로 응답 누락 위치를 확정하지 않는 이유와 관측 도구의 자세한 한계는 연결한 서재에서 더 읽습니다.
실험 기록에 관측하지 않은 말을 쓰지 않습니다
Linux 실행 전 steps의 출력은 비워 두고 예상 결과와 확인 명령을 제공합니다. 맥 문서 검사가 통과해도 실제 ICMP가 성공했다고 보고하지 않습니다. Linux 담당자가 실행하면 삭제 전 성공, 삭제 후 학생 실패·교직원 성공, 복구 후 학생 성공 로그와 route get 원문을 제출합니다. 수동 상태를 cleanup.sh로 정리하고 check.sh 재현까지 완료하면 다음 모듈에 알려진 정상 기준을 넘길 수 있습니다. 실행 환경과 확인 날짜를 기록하는 것도 결과를 해석하는 조건입니다.
한 번의 실패를 결론으로 만들지 않습니다
학생 ping이 실패하면 먼저 삭제한 경로가 정말 서버 표에서 없어졌는지 확인합니다. 다음으로 학생의 기본 경로와 라우터의 서버 직접 연결 경로가 유지되는지 확인합니다. 교직원 대조 시험도 실패하면 학생 응답 경로 하나라는 실험 전제와 다른 변화가 있는 것입니다. 시험 명령과 종료 상태를 저장하고 기준 상태로 돌아간 뒤 다시 진행합니다. 이 과정은 실패한 결과를 숨기려는 재시도가 아니라 실험 조건이 의도한 한 변수로 제한됐는지 검토하는 절차입니다.
따라하기
경로 문서 결함을 고칩니다
starter의 server1 학생 응답 next_hop을 10.20.30.1로 수정한 뒤 실행합니다.
python3 test_routing.py기준 상태를 구성하고 읽습니다
Linux VM에서 실행하며 표를 routes.csv와 비교합니다. 관측 출력은 직접 저장합니다.
sudo bash setup.sh
sudo ip -n bcnet-r1 route show
sudo ip -n bcnet-server1 route show왕복과 결함 복구를 검사합니다
학생·교직원 서버 연결과 서버 학생 경로 삭제 실패·복구 성공을 검사합니다. route get은 수신 캡처가 아닙니다.
sudo python3 verify_network.py공간을 정리하고 전체 재현합니다
수동 공간을 정리한 뒤 새 공간에서 전체 검사와 호스트 보존을 확인합니다.
sudo bash cleanup.sh
sudo bash check.sh확인 문제
실습
routes.csv의 잘못된 서버 학생 다음 홉을 수정합니다. python3 test_routing.py로 문서 검사 후 Linux VM에서 sudo bash check.sh를 실행합니다. 검사 범위는 기존 VLAN 계약, 11개 경로 행과 실제 표, 학생·교직원 서버 왕복, /32 우선, 학생 응답 경로 삭제 후 실패·교직원 성공과 복구, 공간 정리 및 호스트 전후 동일입니다. README의 수동 명령으로 단계별 원문을 기록합니다. 커널 실습은 external 확인 대기입니다.
실행 명령
sudo bash check.sh
기대 결과
문서 5건 통과, 커널 경로 일치, 서버 ICMP 왕복 및 응답 경로 결함·복구 확인, 호스트 보존. Linux 실행 확인 대기.
모범 답안
모범 답안 내려받기더 읽기
면접 질문
- 같은 서브넷과 다른 서브넷으로 통신하는 흐름을 설명합니다.