If you enjoy this post, you may also enjoy the companion post which dives into the same level of detail, but for the receive side[1].
I set out to write all this up because so much of the existing documentation (including the man pages) is vague, incomplete, or nonexistent. FWIW, I think this is probably to be expected for a system as complex as the Linux kernel.
[1]: https://blog.packagecloud.io/eng/2016/06/22/monitoring-tunin...