This is entirely normal behaviour with a duplex mismatch.
Why was only downstream affected and not upstream?
Since the computer is operating in full duplex mode, it isn't utilizing CSMA-CD. This means it doesn't check if the medium is idle before it transmits, nor will it perceive any data it receives while transmitting as a collision. As such, the upload from the computer would remain largely unaffected.
Conversely, the switch is utilizing CSMA-CD and will wait for the medium to be idle before it transmits. In addition, when the switch detects a collision, it immediately stops transmitting the frame and follows the CSMA-CD collision detect procedure. This has a significant performance impact on the traffic sent to the computer.
When the traffic is TCP, the negative effect will be multiplied as any lost TCP ACK's going to the computer will cause a TCP retransmission.
Are these real collisions? Since cable has separate transmit and receive pairs.
Yes, they are real collisions; even in a full half duplex environment (i.e. hubs) there are separate transmit and receive pairs. The reason is that in a half duplex environment the hubs will repeat the signal received on one port out all other ports. If two stations were to try to transmit at the same time, the signal that gets repeated will not be usable.
Since the switch is operating in half duplex mode, it operates like it is in such an environment and can only transmit or receive at any given time. Any time the switch is sending a frame and detects other traffic on the medium (i.e. the computer, which isn't checking for an idle medium), this is treated as a collision and the switch will follow the collision detection procedure (which includes a wait or back off period of time).
As the computer is not operating this way (i.e. it starts transmitting automatically when there is data to send), you end up with many more collisions than you would get in a environment that was entirely made up of half duplex devices.
Edit: I did come across a reference to these this weekend while searching an unrelated matter where they were referred to as false collisions. I would disagree with this viewpoint since the switch clearly sees them as a collision and handles them as such. Rather, I would think of them as unnecessary collisions in that they should not exist in a switched network.
As an aside, this is the most often reported type of duplex mismatch (where the switch is set to auto and the computer to full duplex). Most people download much more than they upload, they tend to notice this condition more easily to report it.
Actually, TCP and Ethernet are examples of different layers of the OSI model. TCP works in layer 4 (transport layer), which is used for making connections between nodes on a network. TCP is indeed bidirectional, and it's sometimes referred to as connection-oriented.
Ethernet is a layer 2 (data link layer) protocol, which dictates how signals are to be interpreted in the physical layer (layer 1). There are many sublayers to layer 2, but in general, Ethernet is the most popular.
If Ethernet is run in half-duplex, then the node cannot transmit and receive at the same time. But this doesn't mean that the node cannot use TCP. TCP still runs on top of Ethernet, and additionally, on top of IP (Layer 3) to create the bidirectional connection that TCP needs to communicate. So when talking about Ethernet and TCP, they operate as different layers.
TCP still makes the bidirectional connection even though the Ethernet NIC cannot receive and send at the same time.
A good reference to how this works is the classic Stevens book: http://books.google.com/books/about/TCP_IP_Illustrated_Volume_1.html?id=a23OAn5i8R0C
Best Answer
All the NICs actually support half-duplex since autonegotiation is a requirement for 1000BASE-T; you just can't manually configure it. As far as I know, there are no hubs for 1000BASE-T, which is where half-duplex would be used.
There was a strong movement not to include half-duplex in the 1000BASE-T standard, but it was left in to support hubs. However, half-duplex was left out of the 10GBASE-T standard.