{"id":35010127,"url":"https://github.com/inticoy/net-practice","last_synced_at":"2026-05-21T00:32:10.536Z","repository":{"id":178523268,"uuid":"647155012","full_name":"inticoy/net-practice","owner":"inticoy","description":null,"archived":false,"fork":false,"pushed_at":"2023-11-28T07:37:16.000Z","size":4483,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2023-11-28T08:37:38.465Z","etag":null,"topics":["42seoul","network","tcp-ip"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/inticoy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-05-30T07:15:38.000Z","updated_at":"2023-11-28T07:37:57.000Z","dependencies_parsed_at":"2023-11-28T08:45:50.331Z","dependency_job_id":null,"html_url":"https://github.com/inticoy/net-practice","commit_stats":null,"previous_names":["inticoy/net-practice"],"tags_count":0,"template":null,"template_full_name":null,"purl":"pkg:github/inticoy/net-practice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inticoy%2Fnet-practice","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inticoy%2Fnet-practice/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inticoy%2Fnet-practice/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inticoy%2Fnet-practice/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inticoy","download_url":"https://codeload.github.com/inticoy/net-practice/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inticoy%2Fnet-practice/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33282185,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T15:12:43.734Z","status":"ssl_error","status_checked_at":"2026-05-20T15:12:42.300Z","response_time":356,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["42seoul","network","tcp-ip"],"created_at":"2025-12-27T04:57:50.573Z","updated_at":"2026-05-21T00:32:10.527Z","avatar_url":"https://github.com/inticoy.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 문제 풀이\n## Level 1. IPv4\n\n![level1](./Image/level1.png)\n### 문제 의도\n- IPv4 체계에서의 주소의 표현 가능 범위에 대해 알아보자.\n- LAN(Local Area Network)에서의 IP 주소 지정 방식과 서브넷 마스크에 대해서 공부한다.\n### Goal 1 : client A와 client B 연결\n- 두 컴퓨터가 통신을 하기 위해서는 같은 네트워크에 들어있어야하므로, 네트워크 주소를 같게 한 뒤, 남은 부분으로 A의 주소를 B의 주소와 구분되도록 지정한다.\n- 서브넷 마스크가 255.255.255.0 이므로, 24번째 비트까지가 (104.99.23.0) 네트워크 주소가 된다. \n1. 인터페이스 A의 IP 주소는 104.99.23.0 ~ 104.99.23.255 중에서 네트워크 주소인 (104.99.23.0)과 브로드캐스트 주소 (104.99.23.255), 그리고 인터페이스 B의 주소인 (104.99.23.12) 를 제외한 주소로 지정한다.\n### Goal 2: client C와 client D 연결\n- 서브넷 마스크가 255.255.0.0 이므로, 16번째 비트까지가 (211.191.0.0) 네트워크 주소가 된다.\n1.  Goal 1과 마찬가지로, 인터페이스 D의 IP 주소는 211.191.0.0 ~ 211.191.255.255 중 네트워크 주소와 브로드캐스트 주소, 인터페이스 C의 주소를 제외한 주소로 지정한다.\n## Level 2. Subnetting\n![level2](./Image/level2.png)\n### 문제 의도\n- 서브넷 마스크의 표현 방식에 대해 알아보자.\n- 브로드캐스트 주소에 대해서 알아보자.\n- Loopback Address에 대해서 알아보자.\n\t- (는 127.0.0.0/8 범위를 사용하며, 일반적으로 127.0.0.1을 사용한다. 루프백 주소로 패킷을 보내면 외부로 전송되지 않고 로컬로 인식된다.)\n### Goal 1: client A와 client B 연결\n1. 인터페이스 B1의 서브넷 마스크를 인터페이스 A1의 서브넷 마스크와 같은 /27로 통일한다.\n2. 인터페이스 A1의 주소를 192.168.15.192 ~ 192.168.15.223 중 네트워크 주소, 브로드캐스트 주소, B1의 주소를 제외한 주소로 지정한다.\n### Goal 2: client C와 client D 연결 \n- 문제의 기본값으로 작성되어 있는 127.0.0.1 은 루프백 주소(127.0.0.0/8) 이므로 피해야 한다.\n1. 인터페이스 C1와 D1의 주소를 루프백 주소를 제외한 주소로, 단, 서브넷 마스크로 계산 했을 때 같은 네트워크 주소를 가지도록 설정한다.\n\n## Level 3. Switch\n![level3](./Image/level3.png)\n### 문제 의도\n- 스위치의 역할에 대해서 알아보자.\n### Goal 2: A와 C 연결\n- 스위치로 연결된 A, B, C 컴퓨터 모두 동일한 네트워크 내에서 통신을 해야한다\n1. 따라서 인터페이스 C1의 서브넷 마스크 /25로 인터페이스 A1의 서브넷 마스크를 설정한다.\n2. 서브넷 마스크가 /25, 인터페이스 A1의 IP 주소가 104.198.154.125 이므로, 인터페이스 C1의 IP 주소는 104.198.154.0 ~ 104.198.154.127 에서 네트워크 주소와 브로드캐스트 주소, 인터페이스 A1의 IP 주소를 제외한 주소로 지정한다.\n### Goal 1: A와 B 연결\n\n### Goal 3: B와 C 연결\n- 인터페이스 A1과 인터페이스 C1은 동일한 네트워크로 설정을 마쳤으니, 인터페이스 B1 또한 설정해주면 Goal 1과 3이 동시에 해결된다.\n1. 인터페이스 B1의 서브넷 마스크를 /25로 설정한다.\n2. 인터페이스 B1의 IP 주소를  104.198.154.0 ~ 104.198.154.127에서 네트워크 주소, 브로드캐스트 주소, 인터페이스 A1, C1의 주소를 제외한 주소로 지정한다.\n## Level 4. Router\n![level4](./Image/level4.png)\n### 문제 의도\n- 라우터의 역할에 대해서 알아보자.\n### Goal 2: A와 R 연결\n- 라우터는 여러 네트워크들을 연결하게끔 해준다. 단, 서로 다른 네트워크들의 범위가 겹치면 안됨을 주의해 인터페이스 R1의 IP 주소와 서브넷 마스크를 지정해주면 된다.\n- 라우터 R을 기준으로 인터페이스 R3와 연결된 네트워크의 IP주소 사용 범위는 84.41.114.192 ~ 84.41.114.255이다. \n- 라우터 R을 기준으로 인터페이스 R2와 연결된 네트워크의 IP주소 사용 범위는 84.41.114.0 ~ 84.41.114.127이다.\n1. 인터페이스 R1은 위의 범위를 피하고, 84.41.114.132 주소를 포함하되, 인터페이스 A1과 같은 서브넷 마스크를 가져야 한다. 단, 네트워크에 인터페이스 A1, B1, R1이 필요하므로 서브넷 마스크는 /30보다 작아야 한다. 예를 들면, 84.41.114.128 ~ 84.41.114.191, /26은 인터페이스 A1의 주소를 포함하면서 다른 네트워크의 주소 범위와도 겹치지 않는다.\n### Goal 1: A와 B 연결\n\n### Goal 3: B와 R 연결\n1. 인터페이스 A1과 B1의 서브넷 마스크와 IP 주소는 앞선 레벨과 같이 인터페이스 R1의 서브넷 마스크와 동일하게, 같은 네트워크 범위에 있도록 설정한다.\n## Level 5\n![level5](./Image/level5.png)\n### 문제 의도\n- 경로와 라우팅 테이블에 대해서 알아보자.\n### Goal 1: A와 R 연결\n### Goal 2: B와 R 연결\n- Goal 1,2까지는 앞선 레벨 문제들과 동일하다. 인터페이스 A1의 주소와 서브넷 마스크는 인터페이스 R1을 기준으로, 인터페이스 B1의 주소와 서브넷 마스크는 인터페이스 R2를 기준으로 설정하면 된다.\n### Goal 3: A와 B 연결\n- A와 B는 다른 네트워크에 있기 때문에 A-\u003eB로, B-\u003eA로 패킷을 보내고 싶다면 경로를 지정해줘야한다. 그리고 그 패킷은 라우터로 제대로 보내져야 해당 네트워크에 보내질 수 있다. \n- 라우팅 테이블의 첫번째 필드는 목적지로, CIDR 형식으로 작성하고, 두번째 필드는 그 목적지로 가기 위해서 거쳐야 할 경로의 다음 인터페이스의 IP주소를 적으면 된다.\n- A에서 B로 패킷을 보내려고 하면, A의 라우팅 테이블에서 해당 주소가 포함되는 곳이 있는지 찾아본다. 어떤 destination에 포함된다면, 해당 next hop으로 패킷을 보낸다.\n- 보내려는 패킷이 라우팅 테이블의 어떠한 destination에도 포함되지 않는다면, default(0.0.0.0/0)에 포함되므로, default의 next hop으로 송신된다. (if-else 문의 else와 같다.)\n- 이 문제에서는 경로가 하나뿐인데다가 A에서 B로만 패킷을 보내므로 destination을 default(0.0.0.0/0)로 작성해도 된다.\n1. 인터페이스 B1의 IP 주소를 166.137.3.253, 서브넷 마스크는 /18 이라고 하자. 그러면 166.137.3.253/18을 포함하도록 destination을 적어주기만 하면 되나, 네트워크 주소(166.137.0.0/18)로 설정한다.\n2. next hop은 인터페이스 R1의 IP 주소 66.255.59.126이 되어야 한다.\n## Level 6\n![level6](./Image/level6.png)\n### 출제 의도\n- 인터넷에 대해서 알아보자.\n### Goal 1: A와 Net 상의 인터페이스와 연결\n1. 앞선 문제들과 같이 인터페이스 R1의 IP주소와 인터페이스 A1의 서브넷 마스크를 먼저 설정한다.\n2. 클라이언트 A와 라우터 R의 라우팅 테이블 Destination은 8.8.8.8/16, 혹은 default로 설정한다.\n3. 클라이언트 A의 라우팅 테이블 Next hop은 인터페이스 R1의 IP 주소로 설정한다.\n4. 인터넷의 라우팅 테이블 Destination은 인터페이스 A1의 네트워크를 써주면 된다. 예를 들면 93.70.122.128/25로 설정한다.\n## Level 7\n![level7](./Image/level7.png)\n### 출제 의도\n- 주소 범위가 겹치지 않게끔 네트워크를 설정한다.\n- 라우터에 라우터가 연결되어 있을 때는 어떻게 해야할까? (결국 똑같다)\n### Goal 1: dev.non-real.net과 accounting.non-real.net 연결\n- 3개의 네트워크를 서로 네트워크 주소 범위가 겹치지 않게 설정해주면 된다.\n- 이후, 서로 다른 네트워크들끼리 패킷을 주고 받을 수 있도록 라우팅 테이블을 적절하게 설정한다.\n1. (R11, A1), (R12, R21), (R22, C1) 총 3개의 네트워크를 구성하되, 서로의 주소 범위가 겹치지 않게 설정하는데, R11 주소와 R12 주소가 이미 105.198.14.0/24 까지를 공유하고 있다. 따라서 두 네트워크는 구분되어야 하므로, 서브넷 마스크는 최소한 /25를 사용해서 다음과 같이 구분되어야 한다. 서브넷 마스크는 각 네트워크 안에 있는 인터페이스의 IP 주소가 들어올 수 만 있다면, /26을 사용하든, /27을 사용하든 상관없다.\n\t- 105.198.14.0 ~ 105.198.14.127\n\t- 105.198.14.128 ~ 105.198.14.255\n2. R22와 C1의 주소는 위의 두 네트워크에서 사용하지 않은 네트워크 주소 범위의 주소로 설정하면 된다. 예를 들어, R22에 0.0.0.1/25, C1에 0.0.0.2/25 도 답이 될 수 있다. \n3. 클라이언트 A와 라우터 R1에서는 클라이언트 C가 포함된 네트워크에 도달하는 방법을 알지 못한다. 반대로, 클라이언트 C와 라우터 R2에서는 클라이언트 A가 포함된 네트워크에 도달하는 방법을 알지 못한다. 따라서, 위의 두 라우터 테이블에는 클라이언트 C의 네트워크로 가는 경로에 있는 다음 인터페이스의 주소를 입력하고, 아래의 두 라우터 테이블에는 그 반대를 입력하면 된다.\n\t- 예를 들어, 라우터 R2의 라우터 테이블은 105.198.14.0/25 -\u003e 105.198.14.254 혹은, default -\u003e 105.198.14.254를 입력한다.\n## Level 8\n![level8](./Image/level8.png)\n### 출제  의도\n- 레벨 7번에서 인터넷을 연결해보자.\n### Goal 1: office.non-real.com 과 home.non-real.com 연결\n### Goal 2: office.non-real.com과 인터넷 연결\n### Goal 3: home.non-real.com과 인터넷 연결\n1. 먼저 바로 채울 수 있는 부분이 두 개가 있다. 인터넷 라우팅 테이블의 Next hop은 R12의 IP 주소 (163.135.250.12)가 되어야만 하고, 인터페이스 R13의 IP 주소는 라우터 R2의 Next hop이 되어야 하므로 (145.24.126.62)가 되어야만 한다.\n2. 인터넷이 결국 클라이언트 C와 D에 접속할 수 있어야 하므로, 라우터 R2와 연결되어 있는 3개의 네트워크가 145.24.126.0/26 범위안에 들어있으면서, 최소 3개의 네트워크로 구분되어야 한다. 따라서 /28을 사용해 4개의 네트워크로 구분해 설정하면 된다.\n3. 인터페이스 R13의 주소는 145.24.126.62/28로 정해졌으므로, 인터페이스 R21의 주소는 자동적으로 같은 네트워크 범위인 145.24.126.48 ~ 145.24.126.63 안에 들어오게 설정해야 한다.\n4. 나머지 (R23, D1)과 (R22, C1)은 145.24.126.0/26 (145.24.126.0 ~ 145.24.126.63) 안에 들어오면서, 인터페이스 (R21, R13)이 가진 네트워크 주소의 범위를 피해서 설정하면 된다.\n\t- 예를 들면 R23은 145.24.126.1/28, R22는 145.24.126.17/28 을 가지게 설정할 수 있다. \n\t- 4번까지 해결하면 Goal 1은 해결된다. \n5. 이후 라우팅 테이블에 적절하게 보내고 싶은 경로에 있는 다음 인터페이스의 주소를 입력하면 된다. \n## Level 9\n![level9](./Image/level9.png)\n### 출제 의도\n- 인터넷과의 연결뿐만 아니라 네트워크끼리의 연결도 시켜보자.\n### Goal 2: C와 D 연결\n### Goal 1: A와 B 연결\n### Goal 3: A와 인터넷 연결\n### Goal 4: A와 D연결\n### Goal 5: B와 C 연결\n### Goal 6: C와 인터넷 연결\n## Level 10\n![level10](./Image/level10.png)\n### 출제 의도\n- Level 9와 상당히 유사하나, 지정된 값이 많아서 오히려 더 쉽다.\n- 주소 범위가 겹치지 않도록 설정하기만 하면 된다.\n\n### Goal 1: H1과 H2 연결\n1. H1과 H2의 IP 주소와 서브넷 마스크는 R11으로 인해 지정되어 있다. 서브넷 마스크는 /25로, H21 IP 주소는 162.175.134.0 ~ 162.175.134.127 범위 안에 들어오도록 설정한다.\n### Goal 2: H3와 H4 연결\n1. R23의 서브넷 마스크는 /26, IP주소는 H4의 라우팅 테이블 Next Hop에 적힌대로 설정한다.\n- R22와 H31의 주소와 서브넷 마스크는 라우터 R2만을 기준으로 한다면 두 네트워크만 피해서 설정하면 되지만, H1과 H2와도 연결이 되어야 하므로, 총 4개의 네트워크가 주소가 겹치지 않고 설정 되어야 한다.\n- 따라서, 이미 설정되어 있는 다음 3개의 네트워크 주소를 피해서 설정한다.\n\t- 162.175.134.0/25\n\t- 162.175.134.128/26\n\t- 162.175.134.252/30\n2. 예를 들어, H31과 R22의 주소는 162.175.134.192/28 범위 내에서 설정할 수 있다.\n### Goal 4: H1과 H4 연결\n### Goal 5: H2와 H3 연결\n1. R13의 주소는 라우터 R2의 Next hop에 적힌 대로 설정한다.\n2. 라우터 R1에서 클라이언트 H3으로 가는 패킷의 경로를 지정해줘야 하므로, 비어있는 라우팅 테이블의 목적지를 H31과 R22의 네트워크 범위로 설정한다.\n### Goal 3: H1과 인터넷 연결\n\n### Goal 6: H3와 인터넷 연결\n### Goal 7: H4와 인터넷 연결\n- 인터넷의 라우팅 테이블 목적지를 4개의 네트워크 범위를 포함하도록, 예를 들면 162.175.134.0/24 로 설정한다. 네트워크 범위를 잘 포함한다면, default나 0.0.0.0/0 만 아니면 된다.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finticoy%2Fnet-practice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finticoy%2Fnet-practice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finticoy%2Fnet-practice/lists"}