There is a Linux-feature which makes your machine reply for every IP address assigned, on every interface, when they share the same IP subnet, regardless of the particular IP-interface assignments. This may or may not be desirable for you.
This feature is switched on by default, and you can configure it through sysctl.
For the output traffic, your machine works like this: for every interface configured as UP, a route entry will be inserted into the routing table, regardless of whether there is link or not, and regardless of whether any other nodes are reachable through that interface or not. Since you have two interfaces for the same IP subnet, you'll have two identical routes in the routing table. The OS will only use one of them, and you have no control over which one will be used! Also, which one will get used is independent from the incoming address of the packet in reply to which the output packet will be sent. This means, that failover in general does not work as you'd expect.
arp_filter - BOOLEAN
1 - Allows you to have multiple network interfaces on the same subnet, and have the ARPs for each interface be answered based on whether or not the kernel would route a packet from the ARP'd IP out that interface (therefore you must use source based routing for this to work). In other words it allows control of which cards (usually 1) will respond to an arp request.
0 - (default) The kernel can respond to arp requests with addresses from other interfaces. This may seem wrong but it usually makes sense, because it increases the chance of successful communication. IP addresses are owned by the complete host on Linux, not by particular interfaces. Only for more complex setups like load-balancing, does this behaviour cause problems.
arp_filter for the interface will be enabled if at least one of
conf/{all,interface}/arp_filter is set to TRUE,
it will be disabled otherwise
arp_announce - INTEGER
Define different restriction levels for announcing the local
source IP address from IP packets in ARP requests sent on
interface:
0 - (default) Use any local address, configured on any interface
1 - Try to avoid local addresses that are not in the target's subnet for this interface. This mode is useful when target hosts reachable via this interface require the source IP address in ARP requests to be part of their logical network configured on the receiving interface. When we generate the request we will check all our subnets that include the target IP and will preserve the source address if it is from such subnet. If there is no such subnet we select source address according to the rules for level 2.
2 - Always use the best local address for this target. In this mode we ignore the source address in the IP packet and try to select local address that we prefer for talks with the target host. Such local address is selected by looking for primary IP addresses on all our subnets on the outgoing interface that include the target IP address. If no suitable local address is found we select the first local address we have on the outgoing interface or on all other interfaces, with the hope we will receive reply for our request and even sometimes no matter the source IP address we announce.
The max value from conf/{all,interface}/arp_announce is used. Increasing the restriction level gives more chance for receiving answer from the resolved target while decreasing the level announces more valid sender's information.
Try running
sudo apt install linux-generic-hwe-16.04
That will install a "hardware enablement" (HWE) kernel, which is a newer version with updated drivers that will probably work better on your system. There's more info about HWE here:
https://wiki.ubuntu.com/Kernel/RollingLTSEnablementStack
A sufficient version of that should be available from your original installation media. If it isn't, then you'll probably need to "sneakernet" the files over by copying to a USB stick, or find a USB WiFi adapter that is supported by kernel version 4.4.0, and use that to download the material you need.
Best Answer
Have you tried (while the system is on) turning the interface off and on? I'll assume that you have rebooted your system and this is something consistently happening.
Use a different cable. Bad cables or connectors do happen. Also of note, make sure you are using the right Cat of cable.
Use a different router/switch port. The router/switch port might be bad.
Examine configuration of router/switch port, is it auto negotiating? is the speed fixed? If you try to do auto on a port that has a fixed speed, I have seen what you have specified happen.
Some adapter boards do not properly do auto negotiation. If that is the case, then manually set both the router/switch port to a fixed speed.
Finally replace adapter board with new board and go through the troubleshooting including above.
Your final option is that the switch/router is bad.