GithubHelp home page GithubHelp logo

computernetwork's Introduction

2022 Computer Network

  1. ARP Protocol
  2. Static Router

TermProject#2 Static Router

Goal

다른 네트워크에 있는 호스트와 통신하기 위한 라우터 프로그램

Static Router

Router에 Routing Table을 수동으로 입력해야하므로 Static Router

Router의 동작과정

패킷 수신

  1. 해당 패킷의 IP 목적지 주소를 가져온다.
  2. Routing Table을 통해 해당 패킷을 전달할 네트워크 주소를 알아낸다
  3. 네트워크 주소로 보내기 위한 인터페이스를 선택
  4. 선택된 인터페이스를 통해 Gateway(by Routing Table)로 패킷을 전송한다.
    • Gateway의 IP 주소는 Routing Table을 통해서 알 수 있다.
    • 패킷을 Gateway에 전달하려면 그 Gateway의 MAC 주소를 알아야 한다.
    • MAC 주소는 ARP cache table에서 Gateway 주소에 해당하는 MAC 주소를 가져온다.
    • ARP cache table에 Gateway의 정보가 없다면 ARP 메세지를 통해서 MAC 주소를 알아낸다.
  5. 모든 Router가 이 과정을 반복하여 목적지까지 패킷을 전달한다.

Network Topology

스크린샷 2022-11-22 오후 3 05 38

TermProject#1 ARP

ARP Protocol

IP 주소를 이용하여 MAC Address 를 알아내기 위한 프로토콜

Basic ARP

Proxy ARP

Gratuitous ARP

TimeOut

  • Completed Entry : 20 minutes
  • Incomplete Entry : 3 minutes

구현 목표

Layer Structure

img

GUI Layout

image

ToDo List

1. Application Layer

  • GUI 생성
  • 각 Layer 연결
  • cache table update

2. ARP Layer

Basic ARP, Proxy ARP, Grauitous ARP에 대한 모든 기능 구성

  • ARP_MSG의 구성 요소
  • ARP Cache Table 자료 구조 결정
  • 각각의 Entry Class로 구성
  • ARP_MSG 의 초기화
  • Send 함수, Receive 함수 수정
  • ARP Request에 대한 응답을 보내는 함수 생성(자기 주소 입력 하고 Swapping하는 등의 과정)
  • ARP Layer는 IP Layer와는 단방향 연결, Ethernet Layer과는 양방향 연결)
  • TimeOut 관련해서 어떻게 할 것인지? => Timer, TimerTask 이용하여 해결함.

3. TCP Layer

  • TCP Header 생성
  • Send() 함수 생성

4. IP Layer

  • IP Header 생성
  • Send() 함수 생성
  • IP 주소는 GUI에 나타나야 하므로 String으로 변경하는 것 => Application Layer에서 진행함

5. Ethernet Layer

  • 이전 과제 참고해서 필요한 함수들 구현

6. 추가 구현(ChatFileDlg)

  • GUI 추가 구현
  • Layer 연결 수정
  • 각각의 Chat/File과 연결

computernetwork's People

Contributors

jhyun505 avatar cansjun avatar ryu-jm avatar

Watchers

 avatar

computernetwork's Issues

Ethernet Layer 함수 구현

구현 하실 분 계신가요?
데이터 통신때 했던거 기반으로 구현하시면 됩니다.

Ethernet Layer 함수 구현

  • Chat/File 관련된 함수는 제외하고 기존의 Ethernet Layer에서 필요한 부분과 ARP Layer에 전달하는 부분 구현

To-do

Send

  • 상위 계층으로부터 데이터 전달받으면 그 데이터를 프레임의 데이터에 저장
  • 수신될 Ethernet 주소와 자신의 Ethernet 주소를 헤더에 저장
  • 상위 계층의 종류에 따라서 상위 프로토콜 형태 저장 후 물리적 계층으로 Ethernet Frame 전달

Receive

  • 하위 계층으로부터 프레임을 받으면 상위로 보내야하는지, 혹은 폐기해야 하는지 결정
    • 상위계층으로 전달
      • 목적지 Ethernet 주소가 브로드캐스트(ff-ff-ff-ff-ff-ff)일 경우
      • 목적지 Ethernet 주소가 자신의 Ethernet 주소일 경우
    • 폐기
      • Src Ethernet 주소가 자신의 주소인 경우
  • Ethernet 프레임 헤더 중에 16bit 프로토콜 타입 필드를 보고 판단하여 상위 계층으로 전달
    • 0x0800 : Internet Protocol
    • 0x0806 : Address Resolution Protocol

ARP/Proxy Table 관련 함수

  • ARP Cache Table 추가/업데이트/삭제 하는 함수
  • Proxy Table 추가 / 업데이트 / 삭제 하는 함수

Key값으로 사용 할 것 : IP Address

10/06 논의할 내용

ARP 관련 자료 구조들 결정

  • ARP Cache Table 자료구조 결정
  • ARP Cache Entry 자료구조 결정
  • Proxy Entry Table 자료구조 결정
  • Proxy Entry 자료구조 결정

Timeout 관련

  • Time out을 어떻게 구현할지? Complete : 20분 / Incomplete : 3분 유지

❗중간 보고서 마감일 10월 9일

  • 진행 일정 계획
  • 진행 사항
  • 프로젝트 설계
    • 자료구조 정의 및 설명
    • 클래스 정의 및 설명

앞으로 해야할 일들...

업무 분배하기

  1. Issue로 등록 or 올라온 Issue 중에 선택(지금 당장 내가 할 수 없어도 필요해 보이는 부분은 Issue로 남기기)
  2. Assignees에 추가

Basic ARP 함수

  • ARP Request Send
  • ARP Reply Send
  • Target IP Address확인 함수
  • Sender <-> Target Swapping 하는 함수
  • Request 받았을 때 동작하는 함수
  • Reply 받았을 때 동작하는 함수
  • ARP Cache Table에 추가/삭제하는 함수
  • ARP Cache Table 업데이트 하는 함수
  • 추가!

Proxy ARP 함수

  • Proxy Entry Table에 추가/삭제하는 함수
  • Proxy Table에 존재하는지 확인하는 함수
  • 추가!

Gratuitous ARP 함수

  • GARP Send 함수 : Destination MAC Address는 브로드캐스트 | Target IP Address는 자기 자신
  • 추가!

Application Layer(Dlg)

  • 각 버튼에 적정한 함수 연결
  • Proxy ARP GUI 추가 구현
  • 추가!

ARP Layer Receive 함수 - Reply

조건

  • ARP Reply를 받은 경우 (opCode == 2)
  • #13 의 함수 사용하여 ARP Table 업데이트 해야 함
  • else if 문으로 구성

해야 할 일

  • 나에게 온 것이 맞는지 확인
  • ARP Table Update(MAC 주소 입력, status complete로 변경하기)

ARP Layer 기초 함수

  • ARP Msg의 Target IP가 나의 IP와 일치하는 지 확인
  • Target IP가 나의 Proxy Table에 있는지 확인
  • Sender <-> Target Swap함수

GUI

팝업창에서 정보 받아서 Routing Table, ARP Cache Table, Proxy Table에 저장하는 과정 필요
NILayer에 네트워크 뭐 쓸지 전달 필요

ARP Layer Send함수 (2)

조건

  • ARP Request가 왔을 때 Reply보내는 함수

Receive 함수에서 호출 예정

input값

  • byte[] input
  • int length

해야 할 것

  • 받은 msg의 Sender, Target을 swap하는 swap함수 호출
  • byte배열에 담아서
  • 하위 Layer로 전달한다.

ARP Layer Receive함수 - Request 기본

조건

  • ARP Request를 받은 경우(opCode == 1)
    • ARP Table에 Sender의 IP의 Entry가 존재한다면 Update한다(GARP 포함)
    • ARP Table에 Sender의 IP의 Entry가 존재하지 않는다면 추가한다.
    • #13 의 함수들 사용

input 값

  • byte[] input

해야 할 일

  • input 배열 각각 나눠서 IP/MAC 주소 값으로 분리
  • srcIP 주소 가지고 Cache Table 확인
  • 추가 / 업데이트 / 아무것도 안 함

ARP Layer Receive 함수 - 응답이 필요한 Request

조건

  • ARP Request를 받았는데(opCode == 1)
    • dstIP 주소가 자기 자신의 IP주소인 경우
    • Proxy Table에 dstIP가 존재하는 경우
    • ARP Reply를 보내야 한다. #12 의 함수 사용

동작 순서

  • #14 의 ARP Cache Table 업데이트 이후에 동작

해야 할 일

  • #10 의 함수들 사용해서 내가 응답해야 하는지 확인
  • 내가 응답 안 해도 되면 그냥 무시해도 됨
  • 내가 응답 해야 하면 #12 사용해서 하위 Layer로 ARP Reply Msg 전달

NILayer 함수 구현

Network Interface Layer(class NILayer)

  • JnetPcap을 이용하여 기본적인 packet 송수신 operation 구현한 class

  • Adapter와 상위 Layer간의 데이터 송수신의 중간자 역할 담당

To-do

  • MAC 정보를 받아오는 함수 구현(JnetPcap 설치 pdf 참조)

Application Layer - main 함수

해야할 일

  • 각각의 Layer 생성
  • 각각의 Layer 연결

개요

  • 일단은 application layer, arp layer, ethernet, ni 연결하는 거로

남은 할 일

  • Timeout 구현 => 3분/20분
  • IP/TCP Layer 연결해야 하는지 확인
    • 연결해야 한다면 ? => TCP, IP Layer Send함수 완성
    • Application Layer에서 TCP Layer로 내려보내도록 수정
    • IP Layer에서 받아오는 것으로 ARP Layer 수정
  • GARP 함수 구현(Send)
  • Layer간 상위 Layer에서 하위 Layer에 간섭하는 부분 삭제
  • 테스트를 위한 Print문들 전부 삭제
  • 오류 찾기

ARP Layer Send함수 (1)

조건

  • 현재 ARP Cache Table에 있는 IP인지 확인
    • 있으면 아무것도 안 해도 된다.
    • 없으면 ARP Table에 추가하고 ARP 메세지 보냄

input값

  • byte[] input
  • int length
  • byte[] dstIPAddress

해야 할 것

  • ARP Cache Table에 dstIPAddress에 해당하는 Entry가 존재하는지 확인
  • 없으면 ARP Cache Table에 추가(Incomplete 상태)
  • ARP Message 정해진 값들 채움
  • UnderLayer의 Send함수를 호출해서 내려보냄

ARP Layer Cache, Proxy Table구현

ARP

  • ARP Cache Entry
    • Class로 구현
    • _ARP_Cache : IP Address, MAC Address, Status
  • ARP Cache Table : Array List로 구현

Proxy ARP

  • Proxy Entry
    • Class로 구현
    • _ Proxy_Entry : Device Name, IP Address, Ethernet Address
  • Proxy Entry Table
    • Array List로 구현

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.