I wrote an Ethernet simulator. The main purpose for this development is leaning Ethernet by my students in Kogakuin University. This program is in public domain.
There are simulators that exactly simulates Ethernet networks, but I could not find an appropriate simulator for educational purposes, so I wrote one by myself. You can open multiple command windows and each window can run this program to simulate a switch or a terminal. It is a very simple program, so there are restrictions such as the port number range. However, you can roughly see mechanisms of Ethernet network.
The usage is written in the read me file in the zip file of the simulator. A simple use case (in Japanese) is available here. The simulator is written by Python (3), so it can run on either Windows, Linux, or Macintosh. It can run on Python 2, but you have to rewrite the program according to the comments in the program.
A paper on this simulator is available, and the history of this program is written in "the lecture blog (in Japanese).