Just work bottom up. Regular ethernet frames (no jumbo frames, no vlan tagging) are 1542 bytes
in total and can have a payload of 1500 bytes
. An Ipv4 header without options is 20 bytes
and a TCP header without options also 20 bytes
. So you end up with 1460 bytes
possible payload of a 1542 byte
link-layer frame. So your efficiency is 1460/1542=0.9468223086900129
, resulting in a maximum throughput of 3.7872892347600517Mbps
.
Notice however this will usually be lower. This is the theoretical maximum rate for a continuous stream you can get on a full duplex link, after the TCP session is established and when you're the only user of that link. Also note that as soon as you're sending at a slightly higher rate for some time your link will get congested, you will see drops and your actual TCP throughput might drop significantly because of slow-start.
If the link is wireless (802.11) the calculation becomes a lot more complex because of RTS/CTS mechanisms, but it's about /2
for only one active user and that's without incorporating loss, which is unrealistic.