What encryption mode should I use to protect a packet but the integrity of the entire packet, including its header, is protected? What encryption mode should I use to protect a packet, such that the payload of the packet is encrypted, but the integrity of the entire packet, including its header, is protected?
What encryption mode should I use to protect a packet, such that the payload of the packet is encrypted, but the integrity of the entire packet, including its header, is protected?

If the context is to be ignored, this functionality is usually called Authenticated Encryption with Associated Data (AEAD) in cryptography. It has usually four inputs (and is deterministic in those):

A key - which must be uniformly random and unknown to any adversary
A nonce - which must be unique for a given key, you don't need to keep this secret
A plaintext message - which will be encrypted and integrity protected
Some associated data - which will only be integrity protected

Upon decryption, the key, the nonce, the ciphertext, and the associated data is given and is guaranteed that decryption only succeeds (yielding the plaintext) - assuming the adversary doesn't know the key - if this nonce and associated data have been used to produce this ciphertext.
Good schemes that satisfy this notion include AES-GCM, AES-EAX, and ChaCha-Poly1305.
However, there's a good chance that you actually want a higher-level primitive: A Secure Channel. Which given a key gives you a randomized / stateful / nonce-based encryption algorithm and a stateful decryption algorithm. These guarantee you that not only have no new messages been added without the knowledge of the key, they also guarantee you to detect whenever messages have been re-ordered or dropped.
Standard constructions for this include (pre-shared key) TLS and an appropriate selection from the Noise Framework.