and how do you send a explicit zero so that the client knows that the field is really set by the server and not the default?
or a explicit empty string?
One case where this question is important is when you are updating a record stored by the server. You only want to send fields you are changing because the record might be huge. But then how does the server distinguish between fields you didn't set and fields you want to set back to the default? The solution is to also tell the server which fields you are changing in a separate message.
Example:
See also "Field Masks in Update Operations" https://developers.google.com/protocol-buffers/docs/referenc...