代写CSCI-GA.2662 Data Communications & Networks Assignment 8: Final Project代做Java编程

2024-12-17 代写CSCI-GA.2662 Data Communications & Networks Assignment 8: Final Project代做Java编程

Computer Science Department

Courant Institute of Mathematical Sciences

Course Title: Data Communications & Networks

Course Number: CSCI-GA.2662-001

Assignment 8: Final Project

I. Due

Friday December 20, 2024 by 11:59 pm EST.

II. Objectives

Software-defined networking (SDN) is a recent paradigm for running networks. As per the networking layer topics covered in the course, the network is divided into the control and data planes. The control plane provides a set of protocols and configurations that set up the forwarding elements (hosts, switches, and routers) so that they can forward packets. This includes, for example, ARP resolution, DNS, DHCP,  the  Spanning  Tree  Protocol,  MAC  learning,  NAT  and  access  control configuration, as well as all of the routing protocols. Usually, switches and routers have to run all of these protocols, detect topology changes, issue heartbeats, manage caches, timeouts, etc. Meanwhile, in many cases network administrators achieve desired goals with the network indirectly, by tweaking parameters in the routing protocols like link weights and local BGP preference. While the data plane is nicely organized in the familiar layered scheme, the aggregate structure of the control plane is a lot less clean.

SDN is a radical departure from this organization. The main idea is a separation of the control plane from the forwarding elements. SDN switches and routers do not run control plane protocols and mostly only forward packets based on matching of packet predicates  to  a  set  of  forwarding  rules.  They  export  a  simple  API  to configure these rules, as well as some feedback about current and past packets. An accepted  standard  for  this  API  is  the OpenFlow protocol,  which  has  been implemented  by  dozens  of  switch  vendors  and  has  fostered  a  rich  software ecosystem. The intelligence of the control plane is (logically) centralized in a network  controller.  The  controller  decides  which  rules  to  install  based  on  its configuration, and on a global view of the network topology and flows.

In this project, you will implement the logic in such a controller to manage the following:

1.   A layer-3 routing application that installs rules in SDN switches to forward traffic  to  hosts  using  the  shortest,  valid  path  through  the  network.  Your application logic will manage the efficient switching of packets among hosts in a large LAN with multiple switches and potential loops. You will write the code for a SDN controller application that will compute and install shortest path routes among all the hosts in your network. SDN as described is suitable for networks under a single administrative domain (e.g., the network in a single AS),  but  there  are  ongoing  research  projects  to  use  its  flexibility  across domains, integrating with and perhaps even replacing BGP.

2.   A distributed load balancer application that redirect new TCP connections to hosts in a round-robin order.

As always, the NYU and class policy about plagiarism must be followed in this project.   If you use ANY code in your project that is not of your own creation, then you MUST attribute that code to the author, even if you modify it (ANY modification).

III. References

1.   Slides and handouts posted on the course Web site

2.   Textbook chapters as applicable

3.   Mininet network emulator documentation (http://mininet.org/)

4.   Openflow documentation (https://www.opennetworking.org/sdn-resources/onf- specifications/openflow)

5.   Open vSwitch switch software documentation (http://openvswitch.org)

6.   Floodlight Java-based SDN controller documentation

(https://floodlight.atlassian.net/wiki/spaces/floodlightcontroller/overview)

7.   If you have additional questions about SDN, OpenFlow, or Floodlight you may

want to consult: openflow-switch-v1.5.1.pdf (opennetworking.org) (sections 2, 3, and 5.1 - 5.4 are likely to be the most useful), and Floodlight-plus Javadoc

8.   Additional readings:

Software Defined Networking Concepts

The Road to SDN: An Intellectual History of Programmable Networks

SDN Reading List

IV. Software Required

1.   Microsoft Word

2.   Win Zip as necessary

3. Oracle VirtualBox

4. Virtual Box Image with all necessary software provided

5.   Java Programming language, Eclipse, and other development tools installed in Virtual Box Image provided

6. Additional code for Part 4

V. Assignment

This is a final take-home project that can be completed individually or as a team (only two students per team).

1.   Background:

You will run the code for this project in an emulated network inside of a single Linux VM. You will use the Mininet network emulator, which is designed to emulate arbitrary topologies of emulated OpenFlow switches and Linux hosts. It uses container-based virtualization for very light-weight emulated nodes. The switches in your network run the open source Open vSwitch switch software, which  implements  the  Openflow  protocol.  The  switches  connect  to  an Openflow network controller, and you will use Floodlight, a relatively mature Java-based controller. We will use OpenFlow version 1.0 for this project. Your SDN applications will be written in Java and run atop the Floodlight OpenFlow controller. You will use Mininet to emulate a variety of network topologies consisting of OpenFlow switches and hosts.

Code you run on Mininet is ready to run with no changes in real networks.

2.   Environment Setup:

a.   Install Oracle VirtualBox as necessary.

b.   Download the Virtual Box Image with all necessary software provided. It is  a .ova image that will enable you to run the necessary software on your  computer using the latest version of Oracle VirtualBox. To install the .ova  file goto File and Import Appliance on VirtualBox. This VM uses “mininet” as username and password.

c.   To ssh into the VM from your host computer, log in first using the GUI, open a terminal, and type ifconfig. This will show you the IP addresses of the VM. You will be able to connect to one of them from your host computer via ssh. The VM also has Eclipse installed, which you can use inside the VirtualBox graphical console or remotely via X. Once you have ssh’d into the  VM,  you  can  go  through  the  following  steps  to  run  your  control applications.

d.   Optional (see acknowledgement in item 8 below):

Refactor edu.brown.cs.sdn.apps.sps to edu.nyu.cs.sdn.apps.sps

e.   Compile Floodlight and your applications:

$ cd ~/project3/ $ ant

This will produce a jar file FloodlightWithApps.jar that includes the compiled code for Floodlight and your SDN applications.

f.   Start Floodlight and your SDN applications:

$ java -jar FloodlightWithApps.jar -cf l3routing.prop

The above command will start Floodlight and only your layer-3 routing application. The .prop file configures your application.

Note: For future reference when working on part 4, you can start both your layer-3     routing      and      load     balancer      applications     by      using loadbalancer.prop for   the    -cf (configuration   file)    argument.   The loadbalancer application code is provided separately.

You    should   always start    Floodlight    and   your    SDN    applications before starting  Mininet. Also, we recommend that you restart Floodlight and your SDN applications whenever you restart Mininet.

Note: In the VirtualBox image, it is possible that the system will start an openvswitch-controller process   by   default,   which    means   your Floodlight controller will not be able to bind to port 6633. To prevent it from starting the next time you boot up, do:

$ sudo update-rc.d -f openvswitch-controller remove  When Floodlight starts, you should see output like the following:

23:18:45 .874 INFO [n .f .c .m .FloodlightModuleLoader:main] Loading modules from file shortestPathSwitching .prop 23:18:46 .277 INFO [n .f .c .i .Controller:main] Controller role set to MASTER

23:18:46 .285 INFO [n .f .c .i .Controller:main] Flush switches on reconnect -- Disabled 23:18:46 .302 INFO [ArpServer:main] Initializing ArpServer . . .

23:18:46 .302 INFO [ShortestPathSwitching:main] Initializing ShortestPathSwitching . . .

23:18:48 .533 INFO [n .f .l .i .LinkDiscoveryManager:main] Setting autoportfast feature to OFF 23:18:48 .579 INFO [ArpServer:main] Starting ArpServer . . .

23:18:48 .580 INFO [ShortestPathSwitching:main] Starting ShortestPathSwitching . . .

23:18:48 .700 INFO [o .s .s .i .c .FallbackCCProvider:main] Cluster not yet configured; using fallback local configuration 23:18:48 .701 INFO [o .s .s .i .SyncManager:main] [32767] Updating sync configuration ClusterConfig

[allNodes={32767=Node [hostname=localhost, port=6642, nodeId=32767, domainId=32767]}, authScheme=NO_AUTH, keyStorePath=null, keyStorePassword is unset]

23:18:48 .790 INFO [o .s .s .i .r.RPCService:main] Listening for internal floodlight RPC on localhost/127 .0 .0 .1:6642 23:18:48 .978 INFO [n .f .c .i .Controller:main] Listening for switch connections on 0 .0 .0 .0/0 .0 .0 .0:6633

Keep the terminal with Floodlight open, as you will need to see the output for debugging. Use another terminal for the next step.