์ด ํ๋ก์ ํธ๋ Switchyard๋ฅผ ํ์ฉํ์ฌ ๋คํธ์ํฌ์์ ๋์ํ๋ ์ด๋๋ท ๋ฌ๋ ์ค์์น์ ARP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ผ์ฐํฐ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
๋ฌ๋ ์ค์์น ํ๋ก์ ํธ์์๋ MAC ์ฃผ์ ํ์ต๊ณผ ๋ค์ํ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ ์ ์ฉํ๊ณ , ๋ผ์ฐํฐ ํ๋ก์ ํธ์์๋ ARP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค.
| ํ๋ก์ ํธ ๋ช | ์ค๋ช |
|---|---|
| Project #1 - Learning Switch Implementation | ๋คํธ์ํฌ ํจํท์ ๋ชฉ์ ์ง๋ก ํจ์จ์ ์ผ๋ก ์ ๋ฌํ๋ ์ด๋๋ท ๋ฌ๋ ์ค์์น๋ฅผ ๊ตฌํ |
| Project #2 - ARP ์์ฒญ ์ฒ๋ฆฌ ๋ผ์ฐํฐ | ARP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ผ์ฐํฐ์ ARP ์บ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ |
์ด ํ๋ก์ ํธ๋ MAC ์ฃผ์ ํ์ต ๊ธฐ๋ฐ์ ๋ฌ๋ ์ค์์น๋ฅผ ๊ตฌํํ๋ ๊ฒ์ผ๋ก, ํจํท์ ๋ชฉ์ ์ง MAC ์ฃผ์์ ๋ฐ๋ผ ์ ๋ฌํ๋ฉฐ, ์ ์ ์๋ ๋ชฉ์ ์ง์ ๊ฒฝ์ฐ ๋ธ๋ก๋์บ์คํธ(ํ๋ฌ๋ฉ)ํฉ๋๋ค.
๋ค์ํ ํจํท ์ ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ์ฌ ์ต์ ํ๋ ๋ฌ๋ ์ค์์น๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
-
๊ธฐ๋ณธ ๋ฌ๋ ์ค์์น (
myswitch-1-BasicSwitch.py)- ์ถ๋ฐ์ง MAC ์ฃผ์๋ฅผ ํ์ตํ์ฌ ํฌํธ๋ฅผ ๊ธฐ๋กํ๊ณ , ๋ชฉ์ ์ง MAC ์ฃผ์๋ฅผ ํ์ธํ์ฌ ํจํท ์ ๋ฌ ์ํ
- ๋ชฉ์ ์ง MAC ์ฃผ์๋ฅผ ๋ชจ๋ฅผ ๊ฒฝ์ฐ ํ๋ฌ๋ฉ
-
ํ์์์ ์ ์ฉ ๋ฌ๋ ์ค์์น (
myswitch-2-TimeOut.py)- MAC ์ฃผ์ ํ์ต ์ ๋ณด์ **ํ์์์(10์ด)**์ ์ ์ฉํ์ฌ ์ค๋๋ ์ ๋ณด๋ฅผ ์๋ ์ญ์
- ๋ถํ์ํ MAC ์ฃผ์๊ฐ ๋จ์์์ง ์๋๋ก ๊ด๋ฆฌ
-
LRU ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ๋ฌ๋ ์ค์์น (
myswitch-3-LRU.py)- MAC ์ฃผ์ ํ ์ด๋ธ ํฌ๊ธฐ๋ฅผ 2๊ฐ๋ก ์ ํํ๊ณ , ์ค๋๋ MAC ์ฃผ์๋ฅผ ์ญ์ ํ๋ ๋ฐฉ์ ์ ์ฉ
- ์์ฃผ ์ฌ์ฉํ๋ MAC ์ฃผ์๋ฅผ ์ ์งํ์ฌ ๋คํธ์ํฌ ์ฑ๋ฅ ๊ฐ์
-
LTV ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ ๋ฌ๋ ์ค์์น (
myswitch-4-LTV.py)- MAC ์ฃผ์๋ณ ํธ๋ํฝ ๋ฐ์๋์ ์ ์ฅํ๊ณ , ๊ฐ์ฅ ์ ์ ํธ๋ํฝ์ ๋ฐ์์ํจ MAC ์ฃผ์๋ฅผ ์ญ์
- ์์ฃผ ์ฌ์ฉ๋๋ MAC ์ฃผ์๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ ์งํ์ฌ ์ต์ ์ ์ฑ๋ฅ ์ ๊ณต
์ด ํ๋ก์ ํธ๋ ๋ผ์ฐํฐ๊ฐ ARP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๊ตฌํํ๋ ๊ฒ์ผ๋ก, ARP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์บ์๋ฅผ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฅ์ ํฌํจํฉ๋๋ค.
๋ผ์ฐํฐ๋ ์์ ์ IP ์ฃผ์์ ๋ํ ARP ์์ฒญ์ ์ฒ๋ฆฌํ๊ฑฐ๋, ๊ธฐ์กด์ ARP ํ
์ด๋ธ์ ์ฐธ์กฐํ์ฌ ์๋ต์ ๋ณด๋ผ ์ ์์ต๋๋ค.
-
ARP ์์ฒญ ์บ์ ๊ธฐ๋ฐ ์ฒ๋ฆฌ (
myrouter_handle_arp_req_cache.py)- ๊ธฐ์กด ARP ์บ์์ ์๋ IP ์ฃผ์์ ๋ํด ARP ์๋ต์ ๋ณด๋
- ARP ์์ฒญ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ์ก์ ์์ IP/MAC ์ ๋ณด๋ฅผ ํ์ตํ์ฌ ์บ์์ ์ ์ฅ
-
๋ผ์ฐํฐ์ ๋ก์ปฌ ARP ์์ฒญ ์ฒ๋ฆฌ (
myrouter_handle_arp_req_local.py)- ๋ผ์ฐํฐ์ ์ธํฐํ์ด์ค IP ์ฃผ์์ ๋ํ ARP ์์ฒญ์ด ๋ค์ด์ฌ ๊ฒฝ์ฐ ์๋ต์ ๋ณด๋
- ๋ถํ์ํ ํจํท ์ฒ๋ฆฌ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์์ฒญ์ ์ ๋ณํ์ฌ ์ฒ๋ฆฌ
Switchyard ํ๊ฒฝ์์ ๊ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ฌ ํ ์คํธํ ์ ์์ต๋๋ค.
# Project #1 - Learning Switch ์คํ
$ python3 myswitch-1-BasicSwitch.py
$ python3 myswitch-2-TimeOut.py
$ python3 myswitch-3-LRU.py
$ python3 myswitch-4-LTV.py
# Project #2 - ARP ์์ฒญ ์ฒ๋ฆฌ ๋ผ์ฐํฐ ์คํ
$ python3 myrouter_handle_arp_req_cache.py
$ python3 myrouter_handle_arp_req_local.py- ๋คํธ์ํฌ ํจํท ์ฒ๋ฆฌ ์๋ฆฌ: ๋ฌ๋ ์ค์์น์ ๋ผ์ฐํฐ์ ๋์ ๋ฐฉ์ ๋ฐ ํจํท์ ํ๋ฆ์ ์ดํดํจ.
- MAC ์ฃผ์ ํ์ต ๋ฐ ๊ด๋ฆฌ: ํจํท์ ์ถ๋ฐ์ง MAC ์ฃผ์๋ฅผ ํ์ตํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋คํธ์ํฌ ํธ๋ํฝ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ตํ.
- ๋ผ์ฐํฐ์ ARP ์์ฒญ ์ฒ๋ฆฌ: ๋ผ์ฐํฐ๊ฐ ARP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ, ์บ์๋ฅผ ํ์ฉํ ์ต์ ํ ๊ธฐ๋ฒ์ ํ์ตํจ.
- Switchyard ํ์ฉ ๊ฒฝํ: ๋คํธ์ํฌ ์๋ฎฌ๋ ์ด์ ํ๊ฒฝ์์ ์ง์ ํจํท์ ์ก์์ ํ๊ณ , ๋คํธ์ํฌ ์ฅ๋น์ ๋์์ ๊ตฌํํ๋ ๊ฒฝํ์ ์์.
- Switchyard ๊ณต์ ๋ฌธ์: https://github.com/usi-systems/switchyard
- Computer Networking: Principles, Protocols, and Practice - Olivier Bonaventure
- RFC 826 - Address Resolution Protocol (ARP)
- TCP/IP Illustrated, Volume 1 - W. Richard Stevens