MSS are calculated as MSS = MTU - IP header length - TCP header length.
One example is MSS=1500-20-20=1460 in Ethernet.
This calculation neglects the options in TCP and IP headers, which lead to variable header length.
To my understanding, when TCP assembles segments, it is aware of the options in TCP header and it can truncate the data to the "right" size to satisfy MSS as it considers IP header for 20 bytes.
However, TCP has no knowledge of IP options as it is on top of IP layer, then how can it assemble segments correctly?
For example, a TCP segment has 1460 bytes, and IP decides some options are needed, which makes its header longer than 20 bytes.
In such situation, does IP need to split the TCP segment to satisfy MTU (which seems to lower the efficiency of transmission as the second packet may have only few bytes in its payload)?
Are there any negotiation between TCP and IP in implementation to avoid such split in IP?